ВЫПОЛНЕНИЕ КОМАНДЫ
После разбиения команды на слова, если в результате получилась простая команда с необязательным списком аргументов, выполняются следующие действия.
Если имя команды не содержит сиволов косой черты, командный интерпретатор пытается ее найти. Если существует функция командного интерпретатора с таким именем, она вызывается как было описано выше в разделе "". Если же функции с таким именем нет, командный интерпретатор ищет ее в списке встроенных команд. Если такая встроенная команда есть, она выполняется.
Если имя не является именем функции или именем встроенной команды и не содержит пробелы, командный интерпретатор bash просматривает каждый каталог в значении переменной PATH в поисках выполняемого файла с соответствующим именем. Для запоминания полных имен выполняемых файлов bash использует хэш-таблицу (см. описание команды в разделе "" далее). Полный поиск по каталогам в PATH
выполняется только если команда не найдена в этой хэш-таблице. Если команда при таком поиске не найдена, командный интерпретатор выдает соответствующее сообщение и завершает выполнение команды со статусом выхода 127.
Если команда найдена или имя команды содержит косые черты, командный интерпретатор выполняет соответствующую команду в отдельной среде выполнения. Аргумент 0 устанавливается равным имени команды, и ей передаются параметры, соответствующие аргументам в командной строке, если они заданы.
Если выполнить команду не удалось, потому что файл не соответствует поддерживаемым выполняемым форматам, и этот файл не является каталогом, предполагается, что файл является сценарием командного интерпретатора, содержащим его команды. Для его выполнения запускается порожденный командный интерпретатор. Этот порожденный командный интерпретатор переинициализируется, как если бы для обработки сценария был вызван новый командный интерпретатор, но только местонахождения команд, запомненные родительским интерпретатором (см. описание команды ниже в разделе ""), передаются порожденному.
Если текст в файле начинается с #!, остаток первой строки задает интерпретатор для программы. Командный интерпретатор запускает указанный интерпретатор в операционных системах, которые не поддерживают соответствующий формат выполняемого файла непосредственно. Этому интерпретатору в качестве аргументов передается один необязательный аргумент, затем имя интерпретатора из первой строки программы, затем имя самой программы и ее аргументы, если они заданы.