¿En qué shell estoy corriendo?

39

Cuando ejecuto echo $SHELLla salida dice lo /bin/tcshque significa que estoy ejecutando un tcshshell. Pero, por ejemplo, cuando emito el siguiente comando

alias emacs 'emacs -nw' 

Obtuve el siguiente error:

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

y cuando publico alias emacs="emacs -nw"funciona bien!

Esto es confuso ya que estoy ejecutando tcshpero los comandos son interpretados por bash.

¿Cuál podría ser la razón?

taza de cafe
fuente
tcsh/cshtiene su caparazón actual en$shell
HongboZhu

Respuestas:

48

$SHELLno es necesariamente su shell actual, es el shell de inicio de sesión predeterminado . Para verificar el shell que está utilizando, intente

ps $$

Esto debería funcionar en la versión más reciente de Unix / Linux con una pssintaxis BSD. De lo contrario, esta es la forma portátil (POSIX)

ps -p $$

Eso debería devolver algo como esto si está ejecutando tcsh:

8773 pts/10   00:00:00 tcsh

Si desea que tcshsea ​​su shell predeterminado, use chshpara configurarlo.

terdon
fuente
¿Sabes cómo puedo verificar qué archivo de configuración está cargado? (que bashrc)
coffeMug
@ Cafe_Mug no estoy seguro de lo que quieres decir. Puede configurar el shell predeterminado con chsh, .bashrcsolo se leerá si está i) ejecutando bash y ii) ejecutándolo como un shell interactivo sin inicio de sesión. ¿Cómo estás iniciando sesión en esta máquina?
terdon
Tengo un script que inicia este shell bash desde un shell tcsh.
coffeMug
44
¿Por qué no solo?ps $$
cjm
1
@cjm, por qué no, de hecho, la respuesta editada.
terdon
8

Desde la línea de comando, también puede usar la $0variable para determinar qué shell está usando. p.ej:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

Nota: no puede determinar el shell utilizando $ 0 dentro de un script, porque $ 0 será el script en sí.

jamespfinn
fuente
1

Esto funciona para Linux:

lsof -a -p $$ -d txt

o, si necesita una selección más fuerte (más sistemas):

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

fuente
1

Esta es una enmienda a todas las mejores respuestas anteriores. Tuve un pequeño problema al identificar el guión en un punto; parecía correcto compartir:

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

Bueno para solucionar problemas en espacios reducidos es todo. Aclamaciones.

todd_dsm
fuente