Bash: ефект запуску `set -i`?


2

Сьогодні я читав через документацію set, коли я зрозумів , що мої прапори змінних ( $-) містять прапор без документів на сторінці довідки ( help set) і gnu.org : i.
Через деякий час мені вдалося знайти цю сторінку, в якій зазначено, що iрозшифровується як інтерактивна .
Перше, що я спробував тоді, звичайно, було вимкнути.
Після запуску set +i, $-більше не містилося i, але крім цього, все було по- видимому , до сих пір працює , як завжди.
Так само, введення set -iфайлу сценарію не мала явного ефекту при його запуску.

Отже, моє запитання: чи введення set -i/ set +iв скрипт або запуск його в командному рядку насправді має будь-який вплив, крім зміни $-змінної?

Відповіді:


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 на сторінці man. 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

Посібник з башти про інтерактивні оболонки

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


Я це розумію, але інтерактивна оболонка чи ні, залежить тільки від того, як вона запускається, правда? Отже, чи працює set +iв командному рядку (коли оболонка вже запущений) насправді робить щось, крім модифікації $-?
Сигуза

Інтерактивний стан застосовується лише під час ініціалізації оболонки, тому зміна його в командному рядку не призведе до решти сеансу.
Алекс Аткінсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.