Was ist die Standardshell für das Terminal?

51

Nehmen wir an, ich habe ein Terminal geöffnet und einige Shell-Befehle eingegeben / ausgeführt.

Aber ich habe nicht explizit Bash oder eine andere Shell aufgerufen.

Welche Shell wurde standardmäßig verwendet?

DrStrangeLove
quelle

Antworten:

51

Die auf Ihrer Zeile in angegebene /etc/passwd(es ist eine :getrennte Zeile und die Shell ist die letzte).

Zum Beispiel meine:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

Hier ist es /bin/bash(der Ubuntu-Standard)

Sie können auch verwenden chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Das sagt mir, dass meine Muschel ist /bin/bashund lässt mich sie ändern.

Schließlich echo $SHELLwird das gleiche tun:

$ echo $SHELL
/bin/bash
Cäsium
quelle
Wenn es bash ist, warum wird es manchmal explizit wie sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" aufgerufen?
DrStrangeLove
Ich persönlich halte das für einen schlechten Befehl - dazu ist nicht einmal root erforderlich. Wenn ja , wäre es besser geschrieben als sudo netstat -an | grep LISTEN | grep -v ^unix. Ich sehe keinen Grund, das in eine Bash-Subshell einzuschließen.
Caesium
2
@DrStrangeLove: Wenn mehr als ein Befehl in der Pipe Root-Berechtigungen benötigt, wird sudo bash -c "..."sichergestellt, dass die gesamte Pipe von Root ausgeführt wird.
Keith Thompson
Wenn Sie nicht wissen, für welche Befehle root erforderlich ist (und warum), sollten Sie sie nicht ausführen. Warum sollten Sie ansonsten einem Befehl / Programm / Skript mehr vertrauen, als erforderlich ist? Wenn Sie dies nicht können commandA | sudo commandB | commandC, können Sie eine sudo iderste idroot
Aktion ausführen
2
Wenn Sie chshdann müssen Sie sich abmelden und wieder anmelden , um diese Änderung zu sehen.
Neil Traft
17

GNU Bash ist die Shell, die standardmäßig in Terminals unter Ubuntu verwendet wird. Wenn jedoch Skripte beim Systemstart ausgeführt werden, wird dash verwendet, da dash / bin / sh ist.

Dies ist in der Umgebungsvariablen $ SHELL definiert. Sie können dies überprüfen, indem Sie echo $SHELLim Terminal eingeben .

Anonym
quelle
14

Wenn Sie Folgendes eingeben, wird angezeigt, mit welcher Shell das Terminal geöffnet wurde:

echo $SHELL

Um jedoch herauszufinden, in welcher Shell Sie sich gerade befinden (Sie haben sie möglicherweise geändert), geben Sie Folgendes ein

ps -p $$

zB werden Sie sehen, dass die Shell in der Beispielausgabe bash ist

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Eine andere Methode ist zu verwenden

echo $0

Dadurch wird einfach der Name der aktuellen Shell zurückgegeben.

fossfreedom
quelle
+1 der Einfachheit halberecho $0
DJTHOMS
Gute Antwort! Danke, aus irgendeinem Grund hat echo $ SHELL nicht funktioniert (habe immer diese verwendet) und Ihre beiden Alternativen haben funktioniert. Vielen Dank!
Wolfdawn
3

Standardmäßig ist es bash:

env | grep ^SHELL=

In den meisten Fällen wird produzieren

SHELL=/bin/bash
wojox
quelle
Nicht unbedingt. Wenn Sie einen neuen Benutzer mit erstellen useradd, ist dies standardmäßig der Fall sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk
+1, da die ausgewählte Antwort zwar weniger Eingaben erfordert, es aber immer schön ist, mehr als eine Möglichkeit zu haben, etwas zu tun.
2

Um den Dateipfad der aktuellen Shell-Programmdatei abzurufen, kann man verwenden

readlink -f /proc/$$/exe

Einige mögliche Ausgaben sind:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
Victor Yarema
quelle