Я бачив це питання на цьому веб-сайті, і це спонукало мене до цього питання. Я хочу знати, щоб в Unix говорити, в чому різниця між виконуваним сценарієм і сценарієм оболонки?
Я бачив це питання на цьому веб-сайті, і це спонукало мене до цього питання. Я хочу знати, щоб в Unix говорити, в чому різниця між виконуваним сценарієм і сценарієм оболонки?
Відповіді:
Виконавчий файл посилається на будь-який файл із набором виконуваного біта, який міг би бути виконаний (навіть якщо є фактичні помилки в реальному виконанні програми).
Сценарій оболонки - це специфічний тип виконуваного файлу, який призначений для інтерпретації оболонки, використовуючи #!
директиву для визначення інтерпретатора.
Сценарій є файлом , який:
Сценарій оболонки є сценарієм якого інтерпретатор є оболонкою . У світі Unix "оболонка" відноситься до сімейства оболонок, що нагадують оболонку Борна ; сучасні такі снаряди (зола, баш, кш, зш, ...) відповідають стандарту оболонки POSIX . Більш загально, слово "оболонка" може включати інші інтерпретатори команд, такі як csh, tcsh, fish, ...
Виконавчим файлом є будь-який файл, який можна виконати. Для ефективного виконання файлу потрібно мати два властивості:
ls -l
: x
символ повинен бути присутнім у стовпці дозволів.Формат файлу повинен бути таким, який система визнає виконуваним. Виконані формати можна розділити на кілька категорій:
#!
за якими слідує шлях до файлу. Для виконання такого файлу ядро виконує програму інтерпретатора і передає йому шлях до сценарію як аргумент.Зауважте, що бути виконавчим файлом залежить від системи. Наприклад, бінарний файл amd64 Linux виконується в системі amd64 Linux, але не в 32-бітній системі. Бінарний файл для Android не виконується при звичайній установці Linux. Виконавчий файл Windows виконується лише в Linux, якщо він присутній. Сценарій, який починається з, #!/usr/local/bin/ruby
виконується лише в тому випадку, якщо на ньому знаходиться програма /usr/local/bin/ruby
.
Сценарій оболонки зазвичай виконується. Але він може бути невиконаним, якщо у вас немає дозволу на його виконання. Ви все ще можете його інтерпретувати, передаючи його явно інтерпретатору (наприклад, bash /path/to/script
- "інтерпретувати це" - це фантазійний спосіб сказати "виконати".
shell-скрипт:
Сценарій оболонки - це ряд команд, які будуть інтерпретовані оболонкою (як правило, ш або ш-сумісна оболонка, іноді інша.)
Ім'я сценарію може, але НЕ потрібно, закінчуватися на ".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
подивіться деякі приклади.