Wie kann ich die aktuelle Shell, an der ich arbeite, bestimmen?
Würde die Ausgabe des ps
Befehl allein ausreichend sein?
Wie kann dies in verschiedenen Unix-Varianten geschehen?
Wie kann ich die aktuelle Shell, an der ich arbeite, bestimmen?
Würde die Ausgabe des ps
Befehl allein ausreichend sein?
Wie kann dies in verschiedenen Unix-Varianten geschehen?
$SHELL
muss nicht immer die aktuelle Shell anzeigen. Sie zeigt nur die Standard-Shell an, die aufgerufen werden soll.
Um dies zu testen, sagen Sie bash
die Standard-Shell ist, versuchen Sie echo $SHELL
und dann im selben Terminal in eine andere Shell ( KornShell (ksh) zum Beispiel) und versuchen $SHELL
. Das Ergebnis wird in beiden Fällen als Bash angezeigt.
Um den Namen der aktuellen Shell zu erhalten, verwenden Sie cat /proc/$$/cmdline
. Und der Pfad zur ausführbaren Shell von readlink /proc/$$/exe
.
Es gibt viele Möglichkeiten, die Shell und die entsprechende Version herauszufinden. Hier sind einige, die bei mir funktioniert haben.
Unkompliziert
Hackiger Ansatz
$> ******* (Geben Sie eine Reihe von zufälligen Zeichen ein und in der Ausgabe erhalten Sie den Namen der Shell. In meinem Fall -bash: chapter2-a-sample-isomorphic-app: Befehl nicht gefunden )
Ich habe einen einfachen Trick, um die aktuelle Shell zu finden. Geben Sie einfach eine zufällige Zeichenfolge ein (die kein Befehl ist). Es wird fehlschlagen und einen Fehler "nicht gefunden" zurückgeben, aber am Anfang der Zeile wird es sagen, welche Shell es ist:
ksh: aaaaa: not found [No such file or directory]
bash: aaaaa: command not found
Ich habe viele verschiedene Ansätze ausprobiert, und der beste ist für mich der:
ps -p $$
Es funktioniert auch unter Cygwin und kann keine falsch positiven Ergebnisse wie beim PID-Grepping erzeugen. Mit etwas Bereinigung gibt es nur den Namen der ausführbaren Datei aus (unter Cygwin mit Pfad):
ps -p $$ | tail -1 | awk '{print $NF}'
Sie können eine Funktion erstellen, damit Sie sie nicht auswendig lernen müssen:
# Print currently active shell
shell () {
ps -p $$ | tail -1 | awk '{print $NF}'
}
...und dann einfach ausführen shell
.
Es wurde unter Debian und Cygwin getestet.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.