Na której powłoce używam?


39

Kiedy uruchamiam echo $SHELLdane wyjściowe, /bin/tcshco oznacza, że ​​uruchamiam tcshpowłokę. Ale na przykład kiedy wydam następujące polecenie

alias emacs 'emacs -nw' 

Otrzymuję następujący błąd:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

a kiedy wydaje alias emacs="emacs -nw", działa dobrze!

Jest to mylące, ponieważ działam, tcshale polecenia są interpretowane przez bash.

Co może być przyczyną?


tcsh/cshma swoją obecną powłokę$shell
HongboZhu

Odpowiedzi:


48

$SHELLniekoniecznie jest twoją bieżącą powłoką, jest domyślną powłoką logowania . Aby sprawdzić używaną powłokę, spróbuj

ps $$

Powinno to działać na najnowszym systemie Unix / Linux z psobsługą składni BSD. W przeciwnym razie jest to przenośny (POSIX) sposób

ps -p $$

To powinno zwrócić coś takiego tcsh:

8773 pts/10   00:00:00 tcsh

Jeśli chcesz tcshbyć domyślną powłoką, użyj, chshaby ją ustawić.


Czy wiesz, jak mogę sprawdzić, który plik konfiguracyjny jest załadowany? (which bashrc)
coffeMug

@Coffe_Mug nie wiesz, co masz na myśli. Możesz ustawić domyślną powłokę za pomocą chsh, .bashrcbędzie odczytywany tylko wtedy, gdy: i) uruchamiasz bash i ii) uruchamiasz go jako interaktywną powłokę bez logowania. Jak się logujesz na tym komputerze?
terdon

Mam skrypt, który uruchamia tę powłokę bash z powłoki tcsh.
coffeMug

4
Dlaczego nie tylkops $$
cjm

1
@cjm, dlaczego nie, odpowiedź edytowana.
terdon

8

Z wiersza poleceń możesz również użyć $0zmiennej, aby określić, której powłoki używasz. na przykład:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Uwaga: nie można określić powłoki za pomocą 0 $ w skrypcie, ponieważ 0 $ będzie samym skryptem.


1

Działa to dla systemu Linux:

lsof -a -p $$ -d txt

lub, jeśli potrzebujesz silniejszego wyboru (więcej systemów):

lsof -a +D /bin +D /usr/bin -p $$ -d txt

1

Jest to poprawka do wszystkich lepszych odpowiedzi powyżej. Miałem drobny problem z identyfikacją kreski w pewnym momencie; Wydawało się słuszne udostępnienie:

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

Wszystko jest dobre do rozwiązywania problemów w ciasnych miejscach. Twoje zdrowie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.