Я всегда объявляю строку хижины #!/bin/bash
в моем сценарии оболочки. Недавно, когда я назвал сценарий, который содержит exit
звоните, это уничтожило мой терминал. Это обычно уничтожает разветвленный процесс и возвратилось к моей терминальной подсказке. Почему, возможно, произошел, который остановил разветвление?
Править
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
. script_path
или через символьную ссылку на сценарий.Хижина никогда не заставляет процесс разветвляться. Это ничего не делает, ЕСЛИ сценарий не является исполняемым файлом, и это вызывается в таком далеко, что это заставляет систему оценивать хижину для наблюдения что программу/оболочку выполнить сценарий с.
Если, например, Вы уже работали в ударе, и Вы выполнили сценарий с source
команда, затем сценарий был бы выполнен в оболочке, которую Вы в настоящее время выполняли, и exit
влиял бы на тот процесс оболочки, а не это являющийся новым процессом оболочки, который был закончен.
Если у Вас есть файл сценария, который Вы хотите выполнить, необходимо сделать его исполняемым файлом со следующей командой:
chmod +x script
Затем если Вы хотите запустить скрипт, и если мы предполагаем, что файл сценария находится в текущем каталоге, Вы используете следующую команду:
./script
Обратите внимание, что это очень отличается от . script
, который является просто краткой нотацией для source script
.
./script
относительный путь в файл сценария, что означает поиск в текущем каталоге находить файл сценария 'сценарием' и затем выполнять его — который работает, только если файл сценария является исполняемым файлом.
Если у Вас есть файл сценария, который НЕ является исполняемым файлом, то можно вызвать его с:
bash script
Но в этом случае Вы указываете, какая оболочка работать и строка хижины проигнорирована.
Начиная с определения источника использования сценария .
причины это для выполнения в текущей оболочке, exit
заставляет текущую оболочку выходить. Можно использовать return
возвратиться из полученного сценария, а также из функции. Вы не можете возвратиться из скрипта, который был запущен непосредственно.
Для работы в рамках этих ограничений можно поместить условный тест в сценарий, чтобы сделать правильную вещь в зависимости от того, получено ли это или выполнено непосредственно.
Как первая строка после хижины:
called=$_
В точке Вы хотите выйти или возвратиться:
[[ $called != $0 ]] && exit || return
Хижина не заставляет программу разветвляться; зависят ли ветвления процесса от того, как сценарий выполняется. Определение источника сценария заставит это работать в текущем интерпретаторе и использовании exec
заменит текущий процесс полностью.