Запуск скрипта bash - PullRequest
       10

Запуск скрипта bash

1 голос
/ 29 февраля 2012

Что является причиной написания

#! /bin/bash

в самом начале каждого скрипта bash?

Я имею в виду, я знаю, что это что-то вроде хака, но я хочу знать, как именно это работает?

Ответы [ 5 ]

4 голосов
/ 29 февраля 2012

проверить Шебанг!.

http://en.wikipedia.org/wiki/Shebang_%28Unix%29

3 голосов
/ 29 февраля 2012

Если вы вызываете сценарий с явным интерпретатором, например

 bash foo.sh
 /bin/bash foo.sh
 dash foo.sh
 sh foo.sh

, то используется выбранный вами интерпретатор, независимо от того, что говорит шебанг, что является просто комментарием.

Если вы сделаете сценарий исполняемым и запустите его:

 chmod a+x foo.sh
 ./foo.sh

ядро ​​ищет шебанг и запускает программу с указанным в нем интерпретатором.Так как ядро ​​не знает PATH, необходимо указать весь путь или env:

 #!/usr/bin/env python 

, чтобы выбрать локальный путь для программы.

Поскольку dash, bash, zsh и т. Д. Не полностью совместимы, вам следует вызывать программу без специального интерпретатора, поскольку автору следовало бы знать, что он делает.

Возможно, на вашемСистема sh является ссылкой на /bin/bash, но будьте осторожны!Оболочка может проанализировать, как она была вызвана, а bash может действовать способом, называемым режимом POSIX, который немного отличается и является лишь подмножеством того, что обычно делает.

Если вы пишете сценарии для установки или для серверов, которые могут работать на разных платформах - подумайте, OsX, Linux, Solaris и т. Д., Где доступны разные оболочки, вы попытаетесь ограничиться этим подмножеством, чтобыполучить совместимый, многоразовый результат.

Но на вашей частной машине вы можете предпочесть более удобные оболочки, такие как zsh и bash.

1 голос
/ 29 февраля 2012

Попробуйте следующее (уточню, что это не вредно):

  • создайте новый файл, содержащий:

    #!/bin/rm
    whatever
    
  • установить исполняемый бит с chmod +x the_file
  • запустить с ./the_file
  • увидите, что ваш файл волшебным образом исчез.

Таким образом, как предполагает Кент, она-челка в исполняемом файле указывает путь к другому исполняемому файлу, который будет использоваться в качестве интерпретатора.

0 голосов
/ 29 февраля 2012

Для вызова оболочки Bourne или совместимой оболочки в вашем скрипте.

Look: Shebang

0 голосов
/ 29 февраля 2012

Unix не использует расширения (.sh, .bat и т. Д.) Для идентификации содержимого файла.

"#!" нотация ( shebang ) - это магическое число , используемое для указания ядру, как выполнить скрипт, указав путь к ожидаемому интерпретатору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...