1

Сегодня я читал документацию по set , когда понял, что моя переменная flags ($-) содержит флаг, недокументированный на странице справки (help set) и на GNU.org: i .
Через некоторое время мне удалось найти эту страницу, где говорится, что i выступаю за интерактив .
Первое, что я тогда попытался, конечно, было отключить.
После запуска set +i , $- больше не содержал i , но кроме этого все, очевидно, все еще работало как всегда.
Аналогично, установка set -i в файле сценария не имела видимого эффекта при его запуске.

Итак, мой вопрос: помещает ли set -i/set +i в скрипт или запускает его в командной строке, на самом деле имеет какой-либо эффект, кроме изменения переменной $- ?

2 ответа2

5

По-видимому, единственное последствие использования set -i или set +i в командной строке после инициализации оболочки - это изменение значения $- . Опция -i может использоваться осмысленно только при вызове bash для создания оболочки, и в этом случае она заставит оболочку быть интерактивной.

Быстрая проверка источника bash показывает, что интерактивные проверки во время выполнения относятся к глобальной переменной interactive , которая устанавливается во время последовательности инициализации, а затем не изменяется. Устанавливайте только set [+-]i и $- используйте глобальный forced_interactive . (interactive будет иметь значение true, если установлен forced_interactive или иным образом, как описано в man bash .)

0

bash-1.14.7-14 имеет документацию для опции -i на странице руководства. https://bugzilla.redhat.com/show_bug.cgi?id=1129

   -i        If the -i option is present, the shell is interactive.

Интерактивная оболочка читает команды из пользовательского ввода на tty. Среди прочего, такая оболочка читает файлы запуска при активации, отображает подсказку и включает управление заданиями по умолчанию. Пользователь может взаимодействовать с оболочкой. Оболочка, выполняющая скрипт, всегда является неинтерактивной оболочкой.

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

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/what-do-you-mean-by-interactive-shell

Дополнение: Больше ссылок

Действительно хороший ответ о не входящих в систему оболочек

https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

Руководство по bash на интерактивных оболочках

http://www.gnu.org/software/bash/manual/html_node/Interactive-Shell-Behavior.html#Interactive-Shell-Behavior

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .