Pokud spustíte hash
ukazuje cestu všech příkazů spuštěných od posledního resetování hashe (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
Podle manuálových stránek je účel hash:
Obslužný program /usr/bin/hash ovlivňuje způsob, jakým si aktuální prostředí shell
pamatuje umístění nalezených nástrojů.
V závislosti na zadaných argumentech přidá umístění nástroje
do svého seznamu zapamatovaných umístění. nebo vyčistí
obsah seznamu. Pokud nejsou zadány žádné argumenty,
podá zprávu o obsahu seznamu.-r
volba způsobí, že
shell zapomene všechna zapamatovaná umístění.Nástroje poskytované jako vestavěné do shellu nejsou
hlášeny pomocí hash.
Kromě toho, kolikrát jsem zadal příkaz, nevidím užitečnost hash
.
Byl dokonce uveden v 15 nejužitečnějších příkazech webu thegeekstuff.com
Jakými způsoby je hash
užitečné?
Přijatá odpověď:
hash
je vestavěný příkaz bash. Hašovací tabulka je funkcí bash
což zabraňuje tomu, aby musel hledat $PATH
pokaždé, když zadáte příkaz, uložením výsledků do mezipaměti. Tabulka se vymaže u událostí, které zjevně znehodnocují výsledky (jako je úprava $PATH
)
hash
příkaz je jen způsob, jakým interagujete s tímto systémem (z jakéhokoli důvodu si myslíte, že to potřebujete).
Některé případy použití:
-
Jak jste viděli, vypíše, kolikrát jste zadali které příkazy, pokud je zadáte bez argumentů. To vám může říct, které příkazy používáte nejčastěji.
-
Můžete jej také použít k zapamatování spustitelných souborů v nestandardních umístěních.
Příklad:
[[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] ~]#
Což může být užitečné, pokud máte pouze jeden spustitelný soubor v adresáři mimo $PATH
které chcete spustit, stačí napsat název namísto zahrnutí všeho v tomto adresáři (což by mělo efekt, kdybyste to přidali do $PATH
).
Alias to obvykle umí také, a protože upravujete chování aktuálního shellu, není mapováno v programech, které spustíte. Symbolický odkaz na osamocený spustitelný soubor je zde pravděpodobně preferovanou možností. hash
je jedním ze způsobů, jak to udělat.
- Můžete jej použít k tomu, abyste si nepamatovali cesty k souborům. To je užitečné, pokud se v dřívější
PATH
objeví nový spustitelný soubor adresář nebo získámv
‘d někam jinam a chcete přinutit bashe, aby šel ven a našel to znovu místo posledního místa, kde si pamatuje, že to našel.
Příklad:
[[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] ~]#
cp
příkaz způsobil novou verzi ls
spustitelný, aby se zobrazil dříve v mé $PATH
ale nespustilo čištění hašovací tabulky. Použil jsem hash -d
selektivně vyčistí záznam pro ls
z hash tabulky. Bash byl poté nucen prozkoumat $PATH
znovu, a když se tak stalo, našel jej v novějším umístění (dříve v $PATH, než byl spuštěn dříve).
Můžete selektivně vyvolat toto „najít nové umístění spustitelného souboru z $PATH
” chování, ačkoli:
[[email protected] ~]# hash
hits command
1 /bin/ls
[[email protected] ~]# hash ls
[[email protected] ~]# hash
hits command
0 /lol-wut/ls
[[email protected] ~]#
Většinou byste to chtěli udělat, pokud byste chtěli něco z hašovací tabulky a nebyli jste 100% schopni se odhlásit a poté úspěšně znovu přihlásit, nebo jste chtěli zachovat některé úpravy, které jste provedli ve vašem shellu.
Chcete-li se zbavit zastaralých mapování, můžete také provést hash -r
(nebo export PATH=$PATH
), který efektivně pouze vyčistí celou hašovací tabulku bash.
Takových malých situací je spousta. Nevím, jestli bych to nazval jedním z „nejužitečnějších“ příkazů, ale má několik případů použití.