Почему "ha sh / bin / ls" ничего не делает? - PullRequest
0 голосов
/ 14 февраля 2020

Запись команды hash с некоторым относительным или абсолютным путем, будь то файл, каталог или никуда, кажется, ничего не делает.

$> hash /bin/ls
prints nothing ***

$> hash /path/to/nowhere
prints nothing ***

$> hash ../same/as/above
same thing ***

Почему это так?

1 Ответ

0 голосов
/ 14 февраля 2020

hash выполняет поиск команды и запоминает определенное местоположение. Часть командного поиска пропускает его, когда в имени * есть имя sh. Следовательно, hash foo/bar ничего не делает.

Соответствует POSIX spe c:

га sh:

Ха * Утилита 1034 * должна влиять на то, как текущая среда оболочки запоминает местоположения утилит, найденных, как описано в разделе «Поиск и выполнение команд». [...] Он должен добавить служебные местоположения в свой список запомненных местоположений

Поиск и выполнение команд :

Если имя команды содержит по крайней мере, один <slash>, оболочка должна выполнить утилиту в отдельной среде утилит с действиями, эквивалентными вызову функции execl ()

[...]

После запуска утилиты [ без косой черты] был найден и найден (либо в результате этого указанного c поиска, либо в качестве части неуказанной операции запуска оболочки), реализация может запомнить его местоположение и не нуждается в поиске утилиты снова


* Кстати, именно поэтому вы выполняете скрипт в текущем каталоге с ./myfile: это самый короткий способ сделать так, чтобы имя файла содержало sla sh.

...