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 i
steht fürinteraktiv.
Das erste, was ich dann probiert habe, war natürlich, es auszuschalten.
Nach dem Ausführen set +i
enthielt $-
es kein i
, aber ansonsten funktionierte anscheinend alles noch wie immer.
Auch das Einfügen set -i
einer Skriptdatei hatte beim Ausführen keine erkennbaren Auswirkungen.
Meine Frage also: Hat das Einfügen von set -i
/ set +i
in 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 -i
oder set +i
in der Befehlszeile nach der Initialisierung der Shell die Änderung des Wertes von $-
. Die -i
Option 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 [+-]i
und $-
die forced_interactive
globale Variable. ( interactive
wird auf „true“ gesetzt, wenn forced_interactive
festgelegt 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
Das Bash-Handbuch zu interaktiven Shells