Perché la riga di comando non rispetta l'ordine PATH su OS X?

2

Ho aggiunto un comando ssh all'interno di ~/bin/ssh e modificato PATH per includerlo, prima di altri percorsi.

Quando eseguo which ssh risponderà con ~/bin/ssh , ma quando eseguirò ssh eseguirò invece /usr/bin/ssh .

Non ho alias per ssh .

Qual è la ragione e come posso risolverlo?

    
posta sorin 06.09.2013 - 14:38
fonte

2 risposte

4

Non usare which , usa type . Il comando which nella shell predefinita (bash) è un'utilità esterna che non conosce alias e funzioni. D'altra parte, type è un'utilità interna che ti dirà se il suo argomento è un alias, una funzione, un'utilità incorporata o un comando esterno.

Il comando which è menzionato in tutorial e manuali solo per ragioni storiche - 30 anni fa il comando type non esisteva ovunque e alcune persone sono state lente ad adattarsi.

Per maggiori dettagli, inclusa una discussione sulle shell storiche e attuali, vedi Perché non usare" quale "? Cosa usare allora?

$ type cp
cp is aliased to 'cp -i'
$ type mkcd
mkcd is a function
mkcd ()
{
…
}
$ type type
type is a shell builtin
$ type cat
cat is /bin/cat

In zsh, è ok usare which : zsh ha sia type che which come comandi incorporati.

Nota anche che se hai appena installato o rimosso un programma, la shell potrebbe aver memorizzato la sua vecchia posizione. Ad esempio, se hai appena installato la tua versione di un programma in una directory che è più avanti delle directory di sistema in $PATH , la shell potrebbe continuare a richiamare il programma fornito con il sistema. Questo è solo un problema nelle shell che erano già in esecuzione al momento dell'installazione o della rimozione. Per aggiornare la memoria della shell con i dati correnti, esegui il comando hash -r o hash COMMANDNAME .

    
risposta data 26.12.2013 - 20:32
fonte
0

Mistety risolto, ho avuto una funzione in bash_profile con questo nome ...

Trovato usando: set | grep ssh

    
risposta data 06.09.2013 - 14:40
fonte

Leggi altre domande sui tag