Su quale shell sto correndo?


39

Quando eseguo echo $SHELLl'output /bin/tcshindica che sto eseguendo una tcshshell. Ma per esempio quando emetto il seguente comando

alias emacs 'emacs -nw' 

Ottengo il seguente errore:

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

e quando emetto alias emacs="emacs -nw"funziona benissimo!

Questo è confuso dal momento che sto correndo tcshma i comandi sono interpretati da bash.

Quale potrebbe essere la ragione?


tcsh/cshha la sua shell attuale in$shell
HongboZhu

Risposte:


48

$SHELLnon è necessariamente la tua shell attuale, è la shell di login predefinita . Per verificare la shell che si sta utilizzando, provare

ps $$

Questo dovrebbe funzionare su Unix / Linux più recenti con un pssupporto per la sintassi BSD. Altrimenti, questo è il modo portatile (POSIX)

ps -p $$

Ciò dovrebbe restituire qualcosa del genere se si esegue tcsh:

8773 pts/10   00:00:00 tcsh

Se vuoi tcshessere la shell predefinita, usa chshper impostarla.


Sai come posso verificare quale file di configurazione è caricato? (quale bashrc)
coffeMug

@Coffe_Mug non sono sicuro di cosa intendi. È possibile impostare la shell predefinita con chsh, .bashrcverrà letta solo se si sta eseguendo bash e ii) eseguendola come shell interattiva senza accesso. Come stai accedendo a questa macchina?
terdon

Ho uno script che avvia questa shell bash da una shell tcsh.
coffeMug

4
Perché non solops $$
cjm

1
@cjm perché no davvero, risposta modificata.
terdon

8

Dalla riga di comando, puoi anche usare la $0variabile per determinare quale shell stai usando. per esempio:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Nota: non è possibile determinare la shell utilizzando $ 0 all'interno di uno script, poiché $ 0 sarà lo script stesso.


1

Questo funziona per Linux:

lsof -a -p $$ -d txt

oppure, se hai bisogno di una selezione più forte (più sistemi):

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

1

Questo è un emendamento a tutte le risposte migliori di cui sopra. Ho avuto un piccolo problema nell'identificare il trattino a un certo punto; sembrava giusto condividere:

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

Buono per la risoluzione dei problemi in punti stretti è tutto. Saluti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.