Se esegui hash
mostra il percorso di tutti i comandi eseguiti dall'ultimo ripristino dell'hash (hash -r
)
[[email protected] ~]# hash
hash: hash table empty
[[email protected] ~]# whoami
root
[[email protected] ~]# hash
hits command
1 /usr/bin/whoami
[[email protected] ~]# whoami
root
[[email protected] ~]# hash
hits command
2 /usr/bin/whoami
Secondo le pagine man, lo scopo dell'hash è:
L'utilità /usr/bin/hash influisce sul modo in cui l'ambiente della shell
corrente ricorda le posizioni delle utilità trovate.
A seconda degli argomenti specificati, aggiunge le posizioni delle utilità
all'elenco delle posizioni ricordate oppure elimina il
contenuto dell'elenco. Quando non vengono specificati argomenti,
segnala il contenuto dell'elenco. Il -r
opzione fa sì che
la shell dimentichi tutte le posizioni ricordate.
Le utilità fornite come integrate nella shell non vengono
segnalate da hash.
Oltre a vedere quante volte ho inserito un comando, non riesco a vedere l'utilità di hash
.
È stato persino incluso nei 15 comandi utili migliori di thegeekstuff.com
In che modo è hash
utile?
Risposta accettata:
hash
è un comando integrato in bash. La tabella hash è una caratteristica di bash
ciò gli impedisce di dover cercare $PATH
ogni volta che si digita un comando memorizzando nella cache i risultati. La tabella viene cancellata su eventi che ovviamente invalidano i risultati (come la modifica di $PATH
)
L'hash
comando è solo il modo in cui interagisci con quel sistema (per qualsiasi motivo ritieni necessario).
Alcuni casi d'uso:
-
Come hai visto, stampa quante volte hai premuto quali comandi se lo digiti senza argomenti. Questo potrebbe dirti quali comandi usi più spesso.
-
Puoi anche usarlo per ricordare eseguibili in posizioni non standard.
Esempio:
[[email protected] ~]# hash -p /lol-wut/whoami whoami
[[email protected] ~]# whoami
Not what you're thinking
[[email protected] ~]# which whoami
/usr/bin/whoami
[[email protected] ~]# /usr/bin/whoami
root
[[email protected] ~]#
Il che potrebbe essere utile se hai solo un singolo eseguibile in una directory al di fuori di $PATH
che vuoi eseguire digita semplicemente il nome invece di includere tutto in quella directory (che sarebbe l'effetto se lo aggiungessi a $PATH
).
Un alias di solito può fare anche questo, tuttavia e poiché stai modificando il comportamento della shell corrente, non è mappato nei programmi che inizi. Un collegamento simbolico all'eseguibile solitario è probabilmente l'opzione preferibile qui. hash
è un modo per farlo.
- Puoi usarlo per non ricordare i percorsi dei file. Questo è utile se viene visualizzato un nuovo eseguibile in un precedente
PATH
directory o ottienemv
'd da qualche altra parte e vuoi forzare bash a uscire e trovarlo di nuovo invece dell'ultimo posto in cui ricorda di averlo trovato.
Esempio:
[[email protected] ~]# hash
hits command
1 /bin/ls
[[email protected] ~]# cp /bin/ls /lol-wut
[[email protected] ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[[email protected] ~]# hash -d ls
[[email protected] ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[[email protected] ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[[email protected] ~]#
Il cp
comando ha causato una nuova versione di ls
eseguibile da visualizzare prima nel mio $PATH
ma non ha attivato un'eliminazione della tabella hash. Ho usato hash -d
per eliminare selettivamente la voce per ls
dalla tabella hash. Bash è stato quindi costretto a cercare $PATH
di nuovo e quando lo ha fatto, lo ha trovato nella posizione più recente (prima in $PATH rispetto a prima).
Puoi invocare selettivamente questo "trova nuova posizione dell'eseguibile da $PATH
” comportamento, però:
[[email protected] ~]# hash
hits command
1 /bin/ls
[[email protected] ~]# hash ls
[[email protected] ~]# hash
hits command
0 /lol-wut/ls
[[email protected] ~]#
Per lo più vorresti farlo se volevi qualcosa fuori dalla tabella hash e non fossi al 100% che potresti disconnetterti e poi rientrare con successo, o se volessi preservare alcune modifiche che hai apportato alla tua shell.
Per eliminare le mappature obsolete, puoi anche eseguire hash -r
(o export PATH=$PATH
) che elimina efficacemente l'intera tabella hash di bash.
Ci sono tante piccole situazioni del genere. Non so se lo definirei uno dei comandi "più utili", ma ha alcuni casi d'uso.