hash
выполняет поиск команды и запоминает определенное местоположение. Часть командного поиска пропускает его, когда в имени * есть имя sh. Следовательно, hash foo/bar
ничего не делает.
Соответствует POSIX spe c:
га sh:
Ха * Утилита 1034 * должна влиять на то, как текущая среда оболочки запоминает местоположения утилит, найденных, как описано в разделе «Поиск и выполнение команд». [...] Он должен добавить служебные местоположения в свой список запомненных местоположений
Поиск и выполнение команд :
Если имя команды содержит по крайней мере, один <slash>
, оболочка должна выполнить утилиту в отдельной среде утилит с действиями, эквивалентными вызову функции execl ()
[...]
После запуска утилиты [ без косой черты] был найден и найден (либо в результате этого указанного c поиска, либо в качестве части неуказанной операции запуска оболочки), реализация может запомнить его местоположение и не нуждается в поиске утилиты снова
* Кстати, именно поэтому вы выполняете скрипт в текущем каталоге с ./myfile
: это самый короткий способ сделать так, чтобы имя файла содержало sla sh.