Co to jest domyślna powłoka dla terminala?

51

Powiedzmy, że otworzyłem terminal i wprowadziłem / wykonałem kilka poleceń powłoki.

Ale nie przywołałem wyraźnie Bash ani żadnej innej powłoki.

Jaka powłoka była domyślnie używana?

DrStrangeLove
źródło

Odpowiedzi:

51

Ten określony w twojej linii w /etc/passwd(jest to :linia oddzielona, ​​a powłoka jest ostatnią).

Na przykład mój:

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

Oto on /bin/bash(domyślny system Ubuntu)

Możesz także użyć chsh:

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

To mówi mi, że moja skorupa jest /bin/bashi pozwala mi ją zmienić.

Wreszcie echo $SHELLzrobi to samo:

$ echo $SHELL
/bin/bash
Cez
źródło
jeśli jest to bash, to dlaczego czasami jest wywoływane jawnie, jak sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove,
Myślę, że to osobiście złe polecenie - żadne z nich nawet nie wymaga rootowania. Gdyby tak było , lepiej byłoby napisać jako sudo netstat -an | grep LISTEN | grep -v ^unix. Nie widzę powodu, aby umieszczać to w podpowłoce bash.
Cesium,
2
@DrStrangeLove: Jeśli więcej niż jedno polecenie w potoku potrzebuje uprawnień roota, wtedy sudo bash -c "..."upewni się, że cała rura jest wykonywana przez roota.
Keith Thompson,
Jeśli nie wiesz, które polecenia wymagają roota (i dlaczego), nie powinieneś ich uruchamiać. W przeciwnym razie, po co ufać komendom / programom / skryptom bardziej niż jest to wymagane. Jeśli nie możesz commandA | sudo commandB | commandC, możesz zrobić sudo idpierwszy (uruchamia idpolecenie jako root, ale nabywa również token „ użyj sudo bez hasła ”, który trwa (domyślnie) 15 minut.
waltinator,
2
Jeśli używasz chshwtedy należy się wylogować i zalogować ponownie, aby zobaczyć tę zmianę.
Neil Traft
17

GNU Bash jest powłoką używaną domyślnie w terminalach na Ubuntu. Jednak gdy skrypty są uruchamiane podczas uruchamiania systemu, używany jest myślnik, ponieważ jest to myślnik, czyli / bin / sh.

Jest to zdefiniowane w zmiennej środowiskowej $ SHELL. Możesz to sprawdzić, wpisując echo $SHELLterminal.

Anonimowy
źródło
14

wpisanie następującego spowoduje wyświetlenie powłoki, którą otworzył terminal:

echo $SHELL

Jednak, aby dowiedzieć się, w jakiej aktualnie jesteś powłoce (mogłeś ją zmienić), wpisz

ps -p $$

np. zobaczysz, że powłoka jest bash na przykładowym wyjściu

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

Inną metodą jest użycie

echo $0

zwróci to po prostu nazwę bieżącej powłoki.

fossfreedom
źródło
+1 za prostotęecho $0
djthoms
Świetna odpowiedź! Dzięki, z jakiegoś powodu echo $ SHELL nie działało (zawsze tego używałem) i wasze dwie alternatywy działały. Dzięki!
wolfdawn
3

Domyślnie jest to bash:

env | grep ^SHELL=

W większości przypadków będzie produkować

SHELL=/bin/bash
wojox
źródło
Niekoniecznie. Jeśli utworzysz nowego użytkownika useradd, domyślnie jest to sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk
+1, ponieważ chociaż wybrana odpowiedź wymaga mniej pisania, zawsze miło jest mieć więcej niż jeden sposób na zrobienie czegoś.
2

Aby uzyskać ścieżkę pliku bieżącego pliku wykonywalnego powłoki, można użyć

readlink -f /proc/$$/exe

Niektóre możliwe wyniki to:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
Victor Yarema
źródło