Выполнение команд в bash

После того как команда была разделена на слова, если это приводит к простым командам и дополнительному списку аргументов, предпринимаются следующие действия.

Если имя команды не содержит косой черты «/», shell пытается её найти. В тех случаях, если существует shell функция, с таким же именем, что функции как описано раньше в статье о функциях в bash. Если имя не соответствует функции, shell ищет его в списке встроенных команд shell. Если совпадение найдено, то вызывается встроенная команда.

Если же имя не является ни shell функцией, не встроенной командой, не содержит косой черты, bash ищет каждый элемент пути (PATH) для каталога, содержащего исполняемый файл с таким именем. Bash использует хеш-таблицу для запоминания полных имен путей исполняемых файлов. Полный поиск каталогов в пути (PATH), выполняется только тогда, когда команда не найдена в хеш-таблице. Если поиск не удается, shell ищет определённую функцию shell имени command_not_found_handle. Если эта функция существует, то он вызывается с оригинальной командой и аргументами оригинальных команд, в качестве аргументов, и функциями статуса выхода, становится статус выхода из shell. Если эта функция не определена, shell выдает сообщение об ошибке и возвращает код завершения «127».

Если поиск является успешным, или если имя команды содержит одну или несколько косых черт, shell выполняет указанную программу в отдельной среде выполнения. Аргумент «0» устанавливается на заданное имя, а остальные аргументы команды устанавливаются на заданные аргументы, если таковые имеются.

Это не удаётся потому что файл не находится в исполняемом формате, и файл не является директорией, то предполагается что shell скрипт, файл, содержит команды shell. Порождается подоболочка для его выполнения. Эта подоболочка реинициализирует себя, так что эффект получается как если бы новая оболочка была вызвана для обработки скрипта с тем исключением, что местонахождение команды запоминается родительской оболочкой и остаются у порождённой.

Если программа представляет собой файл, начинающийся с «#!» оставшаяся часть в первой строке указывает интерпретатор программы. Shell выполняет указанный интерпретатор операционной системы, которые не что не справится с этим форматом исполняемым себя. Аргументы интерпретатора, состоят из одного дополнительного аргумента после имени интерпретатора в первой строке программы, за которым следует название программы, а затем аргументы команды, если они есть.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *