Ich habe gelesen, dass Terminal nichts als Shell ist und Unix verschiedene Shell-Varianten bietet:
- Borowski-Schale (sh)
- C-Shell (csh)
- TC-Shell (tcsh)
- Korn Shell (ksh)
- Bourne Again Shell (Bash)
Fragen:
- Welche Shell wird beim Öffnen eines Terminalfensters standardmäßig geöffnet?
- Wie überprüfe ich, wie viele Shells installiert sind?
- Wie ändere ich die von meinem Konto verwendete Shell?
command-line
LearNer969
quelle
quelle
Antworten:
Sie können den folgenden Befehl in Ihr Terminal eingeben, um zu sehen, welche Shell Sie verwenden:
Das Ergebnis sieht ungefähr so aus, wenn Sie das Bash- Terminal ( Bourne Again Shell ) verwenden:
quelle
0
eine Umgebungsvariable?csh
.% echo $0 No file for $0.
, aber es funktioniert fürtcsh
bash
assh
echo $0
, umls -l `which <name>`
zu sehen, ob er mit einer anderen Shell-Binärdatei verknüpft ist.Um die Shell in der Standardumgebung zu finden, können Sie den Wert der
SHELL
Umgebungsvariablen überprüfen :Um die aktuelle Shell-Instanz zu finden, suchen Sie nach dem Prozess (Shell) mit der PID der aktuellen Shell-Instanz.
So ermitteln Sie die PID der aktuellen Shell-Instanz:
So finden Sie den Prozess mit der PID:
Etwas zusammensetzen:
quelle
echo $SHELL
gab mir/bin/csh
undps -p $$
gab mir22673 pts/1 00:00:00 bash
. Kingmilo erklärte (oben), warum sie nicht gleich sind.$SHELL
gibt Ihnen die Standard-Shell.$0
gibt Ihnen die aktuelle Shell.Zum Beispiel: Ich habe Bash als Standardshell, die ich für meine Terminal-App verwende. Aber für meine iTerm2 app verwende ich den Befehl als das Fenster öffnet sich :
/bin/ksh
.Also mein
$0
gibt mir/bin/ksh
auf iTerm2.$SHELL
gibt mir/bin/bash
auf iTerm2.$0
,$SHELL
gibt mir/bin/bash
am Terminalquelle
bash
das Terminal eingeben. Um zu zsh zurückzukehren, geben Siezsh
Um zu wissen, welches die Standardshell für Ihren Benutzer ist, können Sie Folgendes ausführen:
Wenn Sie beispielsweise Bash verwenden, sollten Sie die folgende Ausgabe erhalten:
Wenn Sie keine Konfiguration geändert haben, sollte dies Bash sein, da Bash die Standard-Shell unter Ubuntu ist.
quelle
/bin/sh
Hinweis in meiner Antwort$$
Variable wird tatsächlich von POSIX definiert und funktioniert auf den meisten Shells. Fish hat beschlossen, sich hier nicht an den Standard zu halten, daher halte ich es für angemessen, ihn zu ignorieren. Ich kann bestätigen, dass$$
es in sh, dash, bash, zsh, ksh, ash, tcsh und csh wie erwartet funktioniert. Tatsächlich fällt mir keine andere Muschel ein, als Fisch, bei dem es nicht funktioniert.Bei den anderen Antworten werden in der Regel Shell-spezifische Funktionen verwendet. Wir versuchen jedoch herauszufinden, welche Shell wir verwenden, und nehmen daher die Antwort auf das Problem an. Zum Beispiel funktioniert keine der Antworten bei Fischen.
Verwenden Sie stattdessen die $$ -Syntax in einem Aufruf von sh, aber dann suchen wir nach der PPID und nicht nach der PID. Verwenden Sie die PPID, um die cmd zu finden.
Danke für die Verbesserung @muru
quelle
ppid=
/ verwendencmd=
, um die Header (und damit dietail -1
s) wegzulassen , und überlegen/proc/.../exe
, welche Datei gerade ausgeführt wird (da diecmd
Ausgabe von jedem Programm bearbeitet werden kann, das die Shell ausführt).Der ursprüngliche Beitrag stellte drei Fragen. Die Antworten beziehen sich auf die erste Frage: "Wenn ich ein Terminalfenster öffne, welche Shell wird standardmäßig geöffnet?" Sie beantworten auch eine Frage, die NICHT gestellt wurde: "Wie kann ich herausfinden, welche Shell derzeit im Terminal ausgeführt wird?" Soweit ich jedoch sehen kann, hat noch niemand die ursprünglich gestellte zweite oder dritte Frage beantwortet, nämlich "Wie überprüfe ich, wie viele Shells installiert sind?" und "Wie ändere ich die von meinem Konto verwendete Shell?"
Katze / etc / Muscheln
Beispielsweise ergibt sich bei einer Standardinstallation von Ubuntu 18.10 Folgendes:
# / etc / shells: Gültige Login-Shells
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
Standardmäßig ist sh jedoch eine symbolische Verknüpfung zum Bindestrich, während rbash Verknüpfungen zur Bash mit der Option -r ("eingeschränkte Bash") enthält, sodass tatsächlich nur zwei Shells vorhanden sind, nicht vier, wie in der obigen Liste angegeben. Der folgende Befehl zeigt Ihnen, ob es sich bei einer der aufgelisteten Shells tatsächlich um symbolische Verknüpfungen handelt und wo diese verknüpft sind: ls -l / bin
quelle