Em qual shell estou executando?

39

Quando executo echo $SHELLa saída diz o /bin/tcshque significa que estou executando um tcshshell. Mas, por exemplo, quando eu emito o seguinte comando

alias emacs 'emacs -nw' 

Estou tendo o erro a seguir:

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

e quando eu emitir, alias emacs="emacs -nw"ele corre bem!

Isso é confuso, pois estou executando, tcshmas os comandos são interpretados por bash.

Qual seria a razão?

coffeMug
fonte
tcsh/cshtem seu shell atual em$shell
HongboZhu 03/07

Respostas:

48

$SHELLnão é necessariamente seu shell atual, é o shell de login padrão . Para verificar o shell que você está usando, tente

ps $$

Isso deve funcionar no Unix / Linux mais recente, com pssuporte à sintaxe BSD. Caso contrário, esta é a maneira portátil (POSIX)

ps -p $$

Isso deve retornar algo assim se você estiver executando tcsh:

8773 pts/10   00:00:00 tcsh

Se você quiser tcshser seu shell padrão, use-o chshpara configurá-lo.

terdon
fonte
Você sabe como posso verificar qual arquivo de configuração está carregado? (que bashrc)
coffemug
@Coffe_Mug não sabe o que você quer dizer. Você pode definir o shell padrão com chsh, .bashrcsomente será lido se você estiver i) executando o bash e ii) executando-o como um shell interativo e sem login. Como você está acessando esta máquina?
terdon
Eu tenho um script que inicia esse shell bash a partir de um shell tcsh.
coffemug
4
Por que não apenasps $$
cjm 16/10
1
@ cjm por que não, de fato, resposta editada.
terdon
8

Na linha de comando, você também pode usar a $0variável para determinar qual shell você está usando. por exemplo:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Nota: você não pode determinar o shell usando $ 0 dentro de um script, porque $ 0 será o próprio script.

jamespfinn
fonte
1

Isso funciona para linux:

lsof -a -p $$ -d txt

ou, se você precisar de uma seleção mais forte (mais sistemas):

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

fonte
1

Esta é uma alteração a todas as melhores respostas acima. Eu tive um pequeno problema ao identificar traço em um ponto; parecia certo em compartilhar:

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

Bom para solucionar problemas em locais apertados é tudo. Felicidades.

todd_dsm
fonte