Я читал в книге Bash O'reilly (третий выпуск, 2005), что я понял как это, если я выполнюсь hash
Я буду видеть "хеш-таблицу" со списком всех возможных команд Bash плюс все команды, характерные для большинства сред включая Bash, которые доступны в моей системе.
Все же в WSL-Ubuntu (16.04 - гостеприимный) я выполнился hash
и стал справедливым:
hits command 1 /usr/bin/mesg
Это могло бы быть уникально для WSL (у меня нет non-WSL машины Ubuntu для тестирования на прямо сейчас)?
Я неправильно понял главу - хеш-таблица не включает все команды Bash, но по-видимому все недавно используемые команды неудара (с путем к файлам, содержащим их данные);
просто, что авторы дали список, содержащий некоторые очень общие команды, я по ошибке перепутал как "встроенный" от беглого взгляда в списке, хотя они - автономные утилиты (и вот список из книги - страница 72):
cat
stat
less
man
apropos
more
ln
ls
ps
vi
Конечно, это не Bash встроенные команды как cd
, echo
, set
, shopt
, source
, bash
, if
, case
, for
, while
, kill
, trap
, exit
, и т.д., но автономные утилиты, очень распространенные в основанных на Bash средах.
К настоящему времени я усвоил различие достаточно глубоко и кротко полагаю, что не перепутаю этим смущающим способом снова. Это - важный урок для меня; я никогда действительно погрузился достаточно глубоко на различиях между тем, какая очень общая программа является встроенным Bash или "очень общая" утилита в основанных на Bash средах, которые могли бы быть схвачены как "встроенное", но моя позиция - "не больше!".
Как help hash
шоу, hash
функция используется, чтобы определить и помнить полные пути программ:
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME as the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Exit Status:
Returns success unless NAME is not found or an invalid option is given.
В Вашем случае это возвращается /usr/bin/mesg
потому что, очевидно, mesg
был назван прежде и hash
теперь помнит его путь.
Надевать справку bash
builtins, функции и т.д. существует help
функция. Назовите его без аргумента для получения списка команд оболочки, определенных внутренне. Получить список bash
builtins можно использовать compgen -b
.