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?

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

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 .


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.


+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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.