Frage Wie überprüfe ich, welche Shell ich verwende?


Ich habe gelesen, dass das Terminal nichts anderes ist als Shell, und Unix bietet verschiedene Varianten von Shells:

  • Bourne-Muschel (sh)
  • C-Hülle (csh)
  • TC-Hülle (tcsh)
  • Kornschale (ksh)
  • Bourne Again Shell (Bash)

Fragen:

  • Wenn ich ein Terminalfenster öffne, welche Shell ist standardmäßig geöffnet?
  • Wie überprüfe ich, wie viele Shells installiert sind?
  • Wie ändere ich die verwendete Shell von meinem Konto?

236
2018-02-28 03:58


Ursprung


Wie ermittle ich die aktuelle Shell, an der ich gerade arbeite? auf stackoverflow.com - αғsнιη
@KasiyA Dies bezieht sich auch auf askubuntu.com/questions/87853/ ... - d a i s y


Antworten:


Sie können den folgenden Befehl in Ihrem Terminal eingeben, um zu sehen, welche Shell Sie verwenden:

echo $0

Das Ergebnis sieht ähnlich aus wie in der folgenden Abbildung, wenn Sie die Option verwenden bash (Bourne wieder Shell) Terminal:

-bash

288
2018-02-28 04:03



ist 0 eine Umgebungsvariable? - Mi_Onim
@Mi_Onim $ 0 ist der Name des laufenden Prozesses. Wenn Sie es innerhalb einer Shell verwenden, wird der Name der Shell zurückgegeben. Wenn Sie es innerhalb eines Skripts verwenden, ist dies der Name des Skripts. - kingmilo
HINWEIS: Dies funktioniert nicht für interaktive csh. % echo $0 No file for $0. , aber es funktioniert für tcsh - Sergiy Kolodyazhnyy
Funktioniert nicht, wenn einer symlink ist. Mögen bash wie sh - Anwar
@Anwar macht einen guten Punkt, nachdem du den Shell-Namen bekommen hast echo $0, ls -l `which <name>`  um zu sehen, ob es mit einer anderen Shell-Binärdatei verknüpft ist. - JivanAmara


Um die Shell zu finden, die Sie in der Standardumgebung haben, können Sie den Wert von SHELL Umgebungsvariable:

echo $SHELL

Um die aktuelle Shell-Instanz zu finden, suchen Sie nach dem Prozess (Shell) mit der PID der aktuellen Shell-Instanz.

So finden Sie die PID der aktuellen Instanz der Shell:

echo "$$"

Jetzt den Prozess mit der PID finden:

ps -p <PID>

Etwas zusammensetzen:

ps -p "$$"

75
2018-02-28 04:06



$ SHELL ist die Standard-Shell für das System (oder den Benutzer), die normalerweise (aber nicht notwendigerweise) die Shell ist, die tatsächlich zu einem bestimmten Zeitpunkt verwendet wird. - kingmilo
@kingmilo: Richtig du bist, Antwort geändert. - heemayl
Ich fand das ziemlich nützlich, wenn ich zu einem Benutzer über 'su- <Benutzername>' z. für die Einrichtung von Postgres, Jenkins, ... - bully
echo $SHELL gab mir /bin/csh und ps -p $$ gab mir 22673 pts/1 00:00:00 bash. Kingmilo erklärte (oben), warum sie nicht gleich sind. - 18446744073709551615
@ 18446744073709551615 Ich habe auch nicht gesagt, dass sie gleich sind. Bitte lesen Sie die Antwort nochmals sorgfältig durch; beachten Sie das Standard und Strom Formulierungen. - heemayl


$SHELL gibt Ihnen die Standard-Shell. $0 gibt dir die aktuelle Shell.

Zum Beispiel: Ich habe bash als meine Standard-Shell, die ich für meine Terminal-App verwende. Aber für meine iTerm2-App verwende ich den Befehl, wenn das Fenster geöffnet wird: /bin/ksh.

So mein $0 gibt mir /bin/ksh auf iTerm2. $SHELL gibt mir /bin/bash auf iTerm2. $0,$SHELL gibt mir /bin/bash am Terminal


16
2017-11-18 11:45



Dies ist eine nette Eindeutigkeit der anderen oben gewählten Antworten. Vielen Dank. - Michael Hoffmann


Um zu wissen, welches die Standard-Shell für Ihren Benutzer ist, können Sie Folgendes ausführen:

echo "$SHELL"

Wenn Sie beispielsweise Bash verwenden, sollten Sie folgende Ausgabe erhalten:

/bin/bash

Wenn Sie keine Konfiguration geändert haben, sollte es Bash seit Bash sein, es ist die Standard-Shell auf Ubuntu.


5
2018-02-28 04:02



/ bin / sh ist die Shell-Befehlssprache und nicht die Bourne-Shell. Bearbeiten Sie Ihre Antwort. - kingmilo
@kingmilo Es gibt keine /bin/sh Referenz in meiner Antwort - kos
@kol gab es vor dem Bearbeiten. Bitte beachten Sie auch, dass $ SHELL die Standard-Shell für das System (oder den Benutzer) ist. Dies ist normalerweise (aber nicht notwendigerweise) die Shell, die tatsächlich zu einem bestimmten Zeitpunkt verwendet wird. - kingmilo
@kingmilo Bitte beachte, dass die Frage "wenn ich das Terminal öffne welche Shell standardmäßig geöffnet ist" ist und dass die Antwort lautet: "Wenn Sie keine Konfiguration geändert haben, sollte es sein Bash, weil das die Standard-Shell unter Ubuntu ist ", so passt die Antwort zu der Frage - kos
@kingmilo Die Antwort noch einmal lesen Ich denke, ich verstehe, was deine Sorge ist, wahrscheinlich habe ich mich nicht gut ausgedrückt. Ich habe die Bedeutung von "derzeit" in meiner Antwort geklärt - kos


Die anderen Antworten neigen dazu, Shell-spezifische Funktionen zu verwenden, aber wir versuchen herauszufinden, welche Shell wir verwenden, daher nehmen sie die Antwort auf das Problem an. Zum Beispiel wird keine der Antworten auf Fisch funktionieren.

sh -c 'ps -p $$ -o ppid=' | xargs ps -o cmd= -p

Verwenden Sie stattdessen die Syntax $$ in einem Aufruf von sh, aber dann suchen wir nach der PPID nicht die PID. Verwenden Sie die PPID, um den cmd zu finden.

sh -c 'ps -p $$ -o ppid=' | xargs -i readlink -f /proc/\{\}/exe

Danke für die Verbesserung @muru


2
2018-04-06 04:00



Sie können verwenden ppid=/cmd=die Header weglassen (und so die tail -1s), und betrachte es /proc/.../exe um zu sehen, welche Datei ausgeführt wird (seit dem cmd Ausgabe kann manipuliert werden durch was auch immer die Shell lief). - muru
Anscheinend funktioniert dies nicht in busybox, da die Konformität nicht posix ist: ref: github.com/broadinstitute/cromwell/pull/... - Evan Benn