Kiedy uruchamiam echo $SHELL
dane wyjściowe, /bin/tcsh
co oznacza, że uruchamiam tcsh
powł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, tcsh
ale polecenia są interpretowane przez bash
.
Co może być przyczyną?
tcsh/csh
ma swoją obecną powłokę$shell
Odpowiedzi:
$SHELL
niekoniecznie jest twoją bieżącą powłoką, jest domyślną powłoką logowania . Aby sprawdzić używaną powłokę, spróbujPowinno to działać na najnowszym systemie Unix / Linux z
ps
obsługą składni BSD. W przeciwnym razie jest to przenośny (POSIX) sposóbTo powinno zwrócić coś takiego
tcsh
:Jeśli chcesz
tcsh
być domyślną powłoką, użyj,chsh
aby ją ustawić.źródło
chsh
,.bashrc
będzie odczytywany tylko wtedy, gdy: i) uruchamiasz bash i ii) uruchamiasz go jako interaktywną powłokę bez logowania. Jak się logujesz na tym komputerze?ps $$
Z wiersza poleceń możesz również użyć
$0
zmiennej, aby określić, której powłoki używasz. na przykład:Uwaga: nie można określić powłoki za pomocą 0 $ w skrypcie, ponieważ 0 $ będzie samym skryptem.
źródło
Działa to dla systemu Linux:
lub, jeśli potrzebujesz silniejszego wyboru (więcej systemów):
źródło
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:
Wszystko jest dobre do rozwiązywania problemów w ciasnych miejscach. Twoje zdrowie.
źródło