¿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?


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.


¿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í.


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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.