Terminale: comando sovrascritto tramite script di shell in / usr / local / bin non eseguito a meno che non venga chiamato direttamente

0

Ho creato uno script di shell che avvolge ssh per cambiare lo sfondo del mio terminale quando ci si connette a un server seguendo uno dei molti esempi su questo sito e stackexchange.

11:22 ~  $ echo $PATH
/opt/local/bin:/opt/local/sbin:/Volumes/Macintosh HD/Users/robertson/bin/android-sdk-macosx/platforms:/Volumes/Macintosh HD/Users/robertson/bin/android-sdk-macosx/tools:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
11:22 ~  $ which ssh
/usr/local/bin/ssh
11:22 ~  $ whereis ssh
/usr/bin/ssh

Come puoi vedere, quale ssh trova correttamente lo script che ho inserito in / usr / local / bin, comunque dove ssh non lo fa, e quando eseguo ssh [email protected] , ottengo ancora il sistema ssh senza eseguire il wrapper. Sono costretto a chiamarlo direttamente tramite /usr/local/bin/ssh [email protected] per ottenere il cambio di colore.

Qualche idea di cosa manca qui?

    
posta Sean Robertson 05.11.2014 - 17:29
fonte

1 risposta

1

L'ordine di esecuzione è basato sull'ordine PATH - le posizioni poste prima vengono cercate per prime, se la corrispondenza è stata trovata, TUTTAVIA, la mappatura dei programmi è memorizzata nella cache, quindi è necessario aggiornare la cache prima che le modifiche abbiano luogo (se hai usato quell'app prima). Vedi link (punto 3):

hash command maintains a hash table, which has the used command’s path names. When you execute a command, it searches for a command in the variable $PATH. But if the command is available in the hash table, it picks up from there and executes it. Hash table maintains the number of hits encountered for each commands used so far in that shell.

e

You can delete a particular command from a hash table using -d option, and -r option to reset the complete hash table.

Sidenote: forse prova a creare alias invece di wrapper?

    
risposta data 13.11.2014 - 11:56
fonte

Leggi altre domande sui tag