Czytałem, że terminal jest niczym innym jak powłoką, a Unix zapewnia różne smaki powłok:
- Skorupa Bourne'a (sh)
- Powłoka C (csh)
- Powłoka TC (TCsh)
- Korn shell (ksh)
- Powłoka Bourne Again (bash)
Pytania:
- Kiedy otwieram okno terminala, która powłoka jest otwierana domyślnie?
- Jak sprawdzić, ile powłok jest zainstalowanych?
- Jak zmienić powłokę używaną z mojego konta?
command-line
LearNer969
źródło
źródło
Odpowiedzi:
Możesz wpisać następujące polecenie w swoim terminalu, aby zobaczyć, której powłoki używasz:
Wynik będzie wyglądał podobnie do poniższego, jeśli używasz terminalu bash ( Bourne Again Shell ):
źródło
0
zmienną środowiskową?csh
.% echo $0 No file for $0.
, ale to działatcsh
bash
jaksh
echo $0
,ls -l `which <name>`
aby sprawdzić, czy jest ona dowiązana do innego pliku binarnego powłoki.Aby znaleźć powłokę w domyślnym środowisku, możesz sprawdzić wartość
SHELL
zmiennej środowiskowej:Aby znaleźć bieżącą instancję powłoki, poszukaj procesu (powłoki) o numerze PID bieżącej instancji powłoki.
Aby znaleźć PID bieżącej instancji powłoki:
Teraz, aby znaleźć proces mający PID:
Składając to razem:
źródło
echo $SHELL
dał mi/bin/csh
ips -p $$
dał mi22673 pts/1 00:00:00 bash
. Kingmilo wyjaśnił (powyżej), dlaczego nie są takie same.$SHELL
daje domyślną powłokę.$0
daje bieżącą powłokę.Na przykład: mam domyślną powłokę bash, której używam w mojej aplikacji terminalowej. Ale dla mojej aplikacji iTerm2 używam komendy jak otworzy się okno:
/bin/ksh
.Więc mój
$0
daje mi/bin/ksh
iTerm2.$SHELL
daje mi/bin/bash
iTerm2.$0
,$SHELL
daje mi/bin/bash
w terminaluźródło
bash
terminal. Aby wrócić do zsh, wpiszzsh
Aby wiedzieć, która jest domyślną powłoką dla twojego użytkownika, możesz uruchomić:
Na przykład, jeśli używasz Bash, powinieneś otrzymać następujące dane wyjściowe:
Jeśli nie zmieniłeś żadnej konfiguracji, powinien to być Bash, ponieważ Bash jest domyślną powłoką na Ubuntu.
źródło
/bin/sh
mojej odpowiedzi nie ma odniesienia$$
Zmienna jest faktycznie zdefiniowany przez POSIX i będzie działać na większości muszli. Fish zdecydował się nie stosować tutaj standardu, więc myślę, że sprawiedliwie go zignorować. Mogę potwierdzić, że$$
działa zgodnie z oczekiwaniami w sh, dash, bash, zsh, ksh, ash, tcsh i csh. W rzeczywistości z czubka mojej głowy nie mogę wymyślić żadnej innej skorupy, z wyjątkiem ryb, które nie działają.Inne odpowiedzi zwykle używają funkcji specyficznych dla powłoki, ale staramy się odkryć, której powłoki używamy, więc przyjmują odpowiedź na problem. Na przykład żadna z odpowiedzi nie zadziała na rybach.
Zamiast tego użyj składni $$ w wywołaniu sh, ale wtedy szukamy PPID, a nie PID. Użyj PPID, aby znaleźć cmd.
Dzięki za ulepszenie @muru
źródło
ppid=
/,cmd=
aby pominąć nagłówki (i tak teżtail -1
s) i zastanowić/proc/.../exe
się, czy plik nie jest uruchamiany (ponieważcmd
wyjściem można manipulować przez cokolwiek, co uruchomiło powłokę).Oryginalny post zadał trzy pytania. Podane odpowiedzi obejmują pierwsze pytanie: „Kiedy otwieram okno terminala, która powłoka jest domyślnie otwierana?” Odpowiadają również na pytanie, które NIE zostało zadane, a mianowicie: „Jak mogę dowiedzieć się, która powłoka działa obecnie w terminalu?”. Jednak, o ile wiem, nikt nie odpowiedział na pierwotnie zadane pytanie drugie lub trzecie, a mianowicie: „Jak sprawdzić, ile zainstalowanych powłok?” i „Jak zmienić powłokę używaną z mojego konta?”
cat / etc / shells
Na przykład w przypadku domyślnej instalacji Ubuntu 18.10 daje to:
# / etc / shells: poprawne powłoki logowania
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
Jednak domyślnie sh jest dowiązaniem symbolicznym do dash, podczas gdy rbash prowadzi do bash z opcją -r („bash ograniczony”), więc w rzeczywistości są tylko dwie powłoki, a nie cztery, jak sugeruje powyższa lista. Następujące polecenie pokaże, czy którakolwiek z wymienionych powłok jest w rzeczywistości dowiązaniami symbolicznymi, a jeśli tak, to gdzie prowadzą do: ls -l / bin
źródło