
Ich sehe zwei mögliche Verwendungen für die SHELL
Umgebungsvariable:
- Damit können Sie festlegen,interaktivShell, die der Benutzer verwenden möchte, und/oder
- Es kann von Prozessen verwendet werden, um andere Befehle auszuführen und den Befehl in der üblichen
/bin/sh -c "..."
Ausdrucksweise zu ersetzen.
Wenn es nur für Ersteres verwendet würde, könnte es etwas sehr Seltsames sein (z. B. ipython
), wenn es auch für Letzteres verwendet werden soll, muss es eine grundlegende Form der POSIX-Kompatibilität bieten, z. B. den -c
Parameter verstehen und die Umgebung intakt halten (Das ist überraschend schwierig).
DerPOSIX-Standardist hier nicht sehr explizit, es steht einfach nur.
Diese Variable soll einen Pfadnamen des vom Benutzer bevorzugten Befehlsspracheninterpreters darstellen. Wenn dieser Interpreter nicht der Shell-Befehlssprache im Band Shell und Dienstprogramme von IEEE Std 1003.1-2001, Kapitel 2, Shell-Befehlssprache, entspricht, können sich die Dienstprogramme anders verhalten als in IEEE Std 1003.1-2001 beschrieben.
Ist die zweite Verwendung tatsächlich üblich und/oder gültig und daher Anlass zur Sorge, wenn ich SHELL
etwas Seltsames einstelle?
Antwort1
Keine der POSIX C-APIs verwendet die SHELL
Umgebungsvariable explizit. Diesystem
Undpopen
Funktion muss ein Programm namens aufrufen sh
. Einige Dienstprogramme (z. B.ex
,mailx
, …) müssen verwenden $SHELL
, aber immer, um benutzerdefinierten Code auszuführen;make
ignoriert ausdrücklich $SHELL
.
Der Abschnitt überUmgebungsvariablenerlaubtVersorgungsunternehmen, aber nicht C-APIs („Systemschnittstellen“), um ein anderes Verhalten zu zeigen, wenn $SHELL
es nicht mit POSIX sh übereinstimmt.
In der Praxis SHELL
wird auf die Anmelde-Shell des Benutzers eingestellt, die POSIX-kompatibel sein kann oder nicht.ZshUndFischsind beliebte Alternativen. Ich verwende zsh seit einem Jahrzehnt auf verschiedenen Unix-Varianten und kann mich nicht erinnern, dass ein Systemdienstprogramm versagt hätte. Ich habe gelegentlich schlampig geschriebenen Code gesehen, der sh-Skripte aufruft, $SHELL
anstatt sh
sie auszuführen. Das ist ziemlich selten und sollte Sie nicht davon abhalten, die Einstellungen SHELL
nach Belieben vorzunehmen.
Kurz gesagt: Ja, SHELL
es handelt sich um Ihre bevorzugte interaktive Shell, und Anwendungen erhalten keine Garantie dafür, welche Syntax sie akzeptiert oder ob sie überhaupt eine -c
Option akzeptiert.