Я видел этот вопрос на этом сайте, и это побудило меня задать этот вопрос. Я хочу знать, в Unix говорят, в чем разница между исполняемым файлом и сценарием оболочки?
Я видел этот вопрос на этом сайте, и это побудило меня задать этот вопрос. Я хочу знать, в Unix говорят, в чем разница между исполняемым файлом и сценарием оболочки?
Исполняемый файл относится к любому файлу с установленным исполняемым битом, который может быть выполнен (даже если есть ошибки в реальном запуске программы).
Сценарий оболочки - это конкретный тип исполняемого файла, который предназначен для интерпретации оболочкой с использованием #!
директивы для указания интерпретатора.
Сценарий представляет собой файл , который:
Сценарий оболочки является сценарием которого интерпретатор является оболочкой . В мире Unix «оболочка» относится к семейству оболочек, которые напоминают оболочку Борна ; такие современные оболочки (ash, bash, ksh, zsh,…) соответствуют стандарту оболочки POSIX . В более общем смысле слово «оболочка» может включать в себя другие интерпретаторы команд, такие как csh, tcsh, fish,…
Исполняемый файл является любой файл , который может быть выполнен. Для эффективного выполнения файл должен иметь два свойства:
ls -l
: x
символ должен присутствовать в столбце разрешений.Формат файла должен быть таким, который система распознает как исполняемый. Исполняемые форматы можно разделить на несколько категорий:
#!
за которыми следует путь к файлу. Чтобы выполнить такой файл, ядро выполняет программу интерпретатора и передает ей путь к сценарию в качестве аргумента.Обратите внимание, что наличие исполняемого файла зависит от системы. Например, двоичный файл amd64 Linux исполняется в системе amd64 Linux, но не в 32-разрядной системе. Бинарный файл для Android не исполняется при обычной установке Linux. Исполняемый файл Windows исполняется только в Linux, если присутствует Wine. Сценарий, который начинается с, #!/usr/local/bin/ruby
является исполняемым, только если есть программа, расположенная в /usr/local/bin/ruby
.
Сценарий оболочки обычно является исполняемым. Но он может быть неисполняемым, если у вас нет разрешения на его выполнение. Вы все еще можете интерпретировать его, передав его явно интерпретатору (например bash /path/to/script
) - «имей интерпретировать» - это причудливый способ сказать «выполнить».
оболочки скрипт:
Сценарий оболочки - это серия команд, которые будут интерпретироваться оболочкой (обычно sh или sh-совместимая оболочка, иногда другая).
Имя скрипта может, но не обязательно, заканчиваться на «.sh» или «.bash» или «.csh» и т. Д. (Давая подсказку относительно оболочки, которой он должен быть запущен).
Для ясности предположим, что имя скрипта script
и оболочка, в которой он должен быть запущен, есть bash
.
Типичный способ запустить его в оболочке будет: bash /absolute/path/to/the/script
или bash ./relative/path/to/the/script
. Таким образом, ему не нужно устанавливать исполняемый бит, так как он читается только bash, который затем выполняет содержимое.
Он может также быть установлен + х (исполняемый файл) , чтобы запустить его непосредственно из текущего сеанса оболочки с: / абсолютного / путь / к / в / скрипта (или ./relative/path/to/the/script). Осторожно: по умолчанию, когда запускается таким образом, он запускается через оболочку, которую вы набрали, или через оболочку posix (поведение зависит от ОС), так что это может быть не та оболочка, которой он должен выполняться. Вот почему вы можете (и должны) указать в качестве первой строки скрипта: #! / Path / to / good / shell, который указывает вашей ОС, что этот скрипт действительно должен быть запущен с помощью / path / to / good / shell.
исполняемый:
Исполняемый файл - это файл, в котором установлен бит "x" для пользователя (ей) / группы (групп), для которых он должен быть запущен. Обычно это может быть «двоичный файл» или скрипт.
Совет: file /some/file
может рассказать вам больше о содержимом файла. Попробуйте file /usr/bin/bash
или file /etc/profile
посмотрите несколько примеров.