В оболочке Linux все команды, которые работают в сценарии оболочки, также работают в командной строке? - PullRequest
1 голос
/ 18 февраля 2011

Я пытаюсь в интерактивном режиме протестировать код перед тем, как поместить его в скрипт, и мне было интересно, есть ли какие-то вещи, которые ведут себя по-другому в скрипте?

Ответы [ 3 ]

3 голосов
/ 18 февраля 2011

Когда вы выполняете скрипт, он имеет свои собственные переменные окружения, которые наследуются от родительского процесса (оболочки, из которой вы выполнили команду). Только экспортированные переменные будут видны дочернему сценарию.

Дополнительная информация:

Кстати, если вы хотите, чтобы ваш скрипт работал в той же среде, что и оболочка, в которой он выполняется, вы можете сделать это с помощью команды point:

. script.sh

Это позволит избежать создания нового процесса для вашего сценария оболочки.

2 голосов
/ 18 февраля 2011

Как правильно заметил Дэвид, следите за переменными среды.

В зависимости от того, как вы собираетесь запустить скрипт, переменные, установленные в .profile и .bashrc, могут быть недоступны.Это зависит от того, запущен ли скрипт в интерактивном режиме и была ли это оболочкой входа в систему.См. Справочник по файлам быстрого запуска .

Обычная проблема, которую я вижу, это сценарии, которые работают при запуске из оболочки, но не работают при запуске из другого приложения (cron, nagios, buildbot и т. Д.), Потому что$PATH не был установлен.

Чтобы проверить, будет ли команда / сценарий работать в сеансе clean , вы можете войти в систему, используя:

ssh -t localhost "/bin/bash --noprofile --norc"

Это гарантирует, чтомы не наследуем никакие экспортируемые переменные из родительской оболочки и ничего из .profile или .rc.

Если это работает в сеансе clean , и ни одна из ваших командожидайте быть в интерактивном режиме , тогда все готово!

2 голосов
/ 18 февраля 2011

Сценарий выполняется точно так же, как если бы вы вводили содержимое в командной строке.Четные циклы и операторы if можно вводить в командной строке.Оболочка будет продолжать запрашивать больше, пока не получит полный оператор для выполнения.

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