Поиск и выполнение команд
После того, как команда была разделена на слова, если она приводит к простой команде и необязательному списку аргументов, выполняются следующие действия.
- Если имя команды не содержит слешей, оболочка пытается найти её. Если существует функция оболочки с таким именем, эта функция вызывается, как описано в Функциях оболочки.
- Если имя не соответствует функции, оболочка ищет его в списке встроенных команд оболочки. Если совпадение найдено, эта встроенная команда вызывается.
- Если имя не является функцией оболочки и не является встроенной командой, и не содержит слешей, Bash ищет каждый элемент
$PATHна наличие каталога, содержащего исполняемый файл с таким именем. Bash использует хеш-таблицу для запоминания полных путей исполняемых файлов, чтобы избежать многократныхPATHпоисков (см. описаниеhashв Встроенных командах Bourne Shell). Полный поиск каталогов в$PATHвыполняется только в том случае, если команда не найдена в хеш-таблице. Если поиск не увенчался успехом, оболочка ищет определённую функцию оболочки с именемcommand_not_found_handle. Если такая функция существует, она вызывается в отдельной среде выполнения с исходной командой и аргументами исходной команды в качестве своих аргументов, а код завершения функции становится кодом завершения этого дочернего процесса. Если такая функция не определена, оболочка выводит сообщение об ошибке и возвращает код завершения 127. - Если поиск успешен, или если имя команды содержит один или несколько слешей, оболочка выполняет указанную программу в отдельной среде выполнения. Аргумент 0 устанавливается в указанное имя, а оставшиеся аргументы команды устанавливаются в предоставленные аргументы, если таковые имеются.
- Если это выполнение завершилось неудачей, потому что файл не имеет исполняемого формата, и файл не является каталогом, предполагается, что это скрипт оболочки, и оболочка выполняет его, как описано в Скриптах оболочки.
- Если команда не запускалась асинхронно, оболочка ждёт завершения команды и собирает её код завершения.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Command-Search-and-Execution.html