Bash: Effekt der Ausführung von „set -i“?

Bash: Effekt der Ausführung von „set -i“?

Als ich heute die Dokumentation von durchlas set, fiel mir auf, dass meine Flag-Variable ( $-) ein Flag enthielt, das weder auf der Hilfeseite ( help set) noch aufGNU.org: i.
Nach einiger Zeit gelang es mir,diese Seitewelche besagt, dass isteht fürinteraktiv.
Das erste, was ich dann probiert habe, war natürlich, es auszuschalten.
Nach dem Ausführen set +ienthielt $-es kein i, aber ansonsten funktionierte anscheinend alles noch wie immer.
Auch das Einfügen set -ieiner Skriptdatei hatte beim Ausführen keine erkennbaren Auswirkungen.

Meine Frage also: Hat das Einfügen von set -i/ set +iin ein Skript oder dessen Ausführen in der Befehlszeile tatsächlich irgendeinen Effekt, außer dass die $-Variable geändert wird?

Antwort1

Offensichtlich ist die einzige Konsequenz der Verwendung von set -ioder set +iin der Befehlszeile nach der Initialisierung der Shell die Änderung des Wertes von $-. Die -iOption kann nur beim Aufruf zum Erstellen einer Shell sinnvoll verwendet werden bash. In diesem Fall wird die Shell zur Interaktion gezwungen.

Eine schnelle Untersuchung der Bash-Quelle zeigt, dass interaktive Prüfungen während der Ausführung auf die globale Variable verweisen interactive, die während der Initialisierungssequenz festgelegt und anschließend nicht geändert wird. Verwenden Sie nur set [+-]iund $-die forced_interactiveglobale Variable. ( interactivewird auf „true“ gesetzt, wenn forced_interactivefestgelegt ist, oder andernfalls wie in beschrieben man bash.)

Antwort2

bash-1.14.7-14 verfügt über eine Dokumentation zur Option -i auf der Manpage. https://bugzilla.redhat.com/show_bug.cgi?id=1129

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

Eine interaktive Shell liest Befehle aus Benutzereingaben auf einem TTY. Unter anderem liest eine solche Shell bei Aktivierung Startdateien, zeigt eine Eingabeaufforderung an und aktiviert standardmäßig die Jobsteuerung. Der Benutzer kann mit der Shell interagieren. Eine Shell, die ein Skript ausführt, ist immer eine nicht interaktive Shell.

Weitere Informationen hier:

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/was-meinen-Sie-mit-interactive-shell

Ergänzung: Weitere Links

Eine wirklich gute Antwort zum Thema Nicht-Login-Shells

https://askubuntu.com/questions/247738/warum wird etc.-profile nicht für Nicht-Login-Shells aufgerufen?

Das Bash-Handbuch zu interaktiven Shells

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

verwandte Informationen