Сегодня я читал документацию set
и понял, что моя переменная flags ( $-
) содержит флаг, недокументированный на странице справки ( help set
) и наGNU.org: i
.
Через некоторое время мне удалось найтиэта страницакоторый гласит, что i
означаетинтерактивный. Первое, что я тогда попробовал ,
конечно, было отключить его.
После запуска больше не содержал , но кроме этого, все, по-видимому, работало как всегда. Аналогично, размещение файла скрипта не имело видимого эффекта при его запуске.set +i
$-
i
set -i
Итак, мой вопрос: имеет ли добавление set -i
/ set +i
в скрипт или его запуск в командной строке какой-либо эффект, кроме изменения $-
переменной?
решение1
По-видимому, единственным последствием использования set -i
или set +i
в командной строке после инициализации оболочки является изменение значения $-
. -i
Опцию можно использовать осмысленно только при вызове bash
для создания оболочки, в этом случае она заставит оболочку стать интерактивной.
Беглый просмотр исходного кода bash показывает, что интерактивные проверки во время выполнения ссылаются на глобальную переменную interactive
, которая устанавливается во время последовательности инициализации и затем не изменяется. Только set [+-]i
и $-
используют forced_interactive
глобальную. ( interactive
будет установлена в true, если forced_interactive
установлена или в противном случае, как описано в man bash
.)
решение2
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/что-вы-имеете в виду-под-interactive-shell
Дополнение: Дополнительные ссылки
Действительно хороший ответ о оболочках без входа в систему
https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells
Руководство bash по интерактивным оболочкам