Sotto% family shell di% co_de, avrai la tua shell funzionante con questo comando:
% echo $shell
Se csh
è stato eseguito, direttamente o indirettamente, da una shell della famiglia Bourne che ha esportato la sua variabile SHELL, quest'ultimo essendo il caso comune, la variabile SHELL rimarrebbe invariata, quindi csh
mostrerà ancora il suo valore precedente che sarebbe fonte di confusione.
Questo è quello che ti sta succedendo, uno dei processi parent della tua sessione echo $SHELL
era tcsh
. Se bash
viene avviato con la variabile bash
unset, imposta il percorso su SHELL
, nonostante ciò che afferma la documentazione. Si noti che l'avvio di una nuova famiglia di shell Bourne non avrebbe cambiato la variabile SHELL se impostata. SHELL non è sicuramente il modo per identificare quale shell stai usando, solo per sapere quale shell è la tua shell predefinita quando si trova in un ambiente POSIX.
Un modo portatile per sapere quale shell è attualmente in esecuzione sarebbe:
ps -o comm= -p $$
Tuttavia, quest'ultimo comando presuppone che bash
sia impostato sul PID di processo corrente, che sfortunatamente alcune shell esotiche come $$
break. Un modo ancora più portabile per risolvere questo problema è:
env sh -c 'basename $(ps -o comm= -p $(ps -o ppid= -p $$))'