3 votos

En Terminal, ¿cómo se puede determinar qué shell se está ejecutando realmente?

Usando Terminal en OS X 10.11.4, al inicializar Terminal se abre una nueva ventana que ejecuta bash (por defecto). Según tengo entendido, la introducción de echo $SHELL debería mostrar el shell al que se envía dicho comando. Entonces, ¿por qué obtengo esta salida después de cambiar de bash a tcsh ?

[<dir>] <username>$ tsch
[<dir>] <username>% echo $SHELL
/bin/bash

5voto

jlliagre Puntos 196

En csh de la familia, tendrás tu shell en funcionamiento con este comando:

% echo $shell

Si csh se ejecutaba, directa o indirectamente, desde un shell de la familia Bourne que tenía su variable SHELL exportada, siendo este último el caso más común, la variable SHELL permanecería intacta por lo que echo $SHELL seguirá mostrando su valor anterior, lo que resultaría confuso.

Esto es lo que te ocurre, uno de los procesos madre de tu tcsh sesión fue bash . Si bash se inicia con el SHELL se establece la ruta de acceso a bash a pesar de lo que dice su documentación. Tenga en cuenta que el lanzamiento de una nueva familia de shell Bourne no habría cambiado tampoco la variable SHELL si está establecida. SHELL no es definitivamente la forma de identificar qué shell está ejecutando, sólo para saber qué shell es su shell por defecto cuando está en un entorno POSIX.

Una forma portátil de saber qué shell se está ejecutando actualmente sería:

ps -o comm= -p $$

Sin embargo, este último comando supone $$ se establece en el PID del proceso actual, que desafortunadamente algunas conchas exóticas como fish romper. Una forma aún más portátil que soluciona este problema es:

env sh -c 'basename $(ps -o comm= -p $(ps -o ppid= -p $$))'

4voto

yoliho Puntos 340

Depende del shell en el que se esté ejecutando.

Si se trata de un shell que confirma POSIX, por ejemplo, bash, ash,ash, sh, y algunos otros, por ejemplo, csh, tcsh, entonces echo $0 devolverá el nombre del shell

Por ejemplo

~ $ bash
bash-3.2$ echo $0
bash

o

~ $ ksh
$ echo $0
ksh

Sin embargo, no todos los shells son POSIX, por ejemplo, yo solía usar el perfil de shell de ipython y ahora fish

2voto

user36155 Puntos 36

Otra forma sería comprobar a qué TTY está conectado su terminal y comprobar qué shell se está ejecutando en ese tty. Entonces podrías mirar el PID (Process ID) y el PPID (Parent Process ID) en caso de que tu shell haya engendrado otro shell como proceso hijo:

MacBook:~$ w
15:16  up 8 days, 16:11, 2 users, load averages: 1.26 1.22 1.24
USER     TTY      FROM              LOGIN@  IDLE WHAT
myuser   console  -                19Apr16 8days -
myuser   s000     -                15:15       - w
MacBook:~$ ps -ef | grep s000
UID   PID  PPID   C STIME   TTY           TIME CMD
    0 23865   293   0  3:15PM ttys000    0:00.14 login -pf myuser /bin/bash
  501 23866 23865   0  3:15PM ttys000    0:00.05 -bash
    0 23992 23866   0  3:16PM ttys000    0:00.01 ps -ef
  501 23993 23866   0  3:16PM ttys000    0:00.00 grep s000
MacBook:~$ 

En el ejemplo anterior, utilizando el w he descubierto que el usuario myuser está conectado a la console (ignorar este) y también a s000 .

Luego corrí ps -ef y sólo mirando las columnas PID y PPID, puedo ver que login (PID 23865) ha ejecutado bash (PID 23866, PPID 23865), que luego ejecutó dos procesos: ps -ef (PID 23992, PPID 23866) y grep s000 (PID 23993 PPID 23866).

Si, por alguna razón, ejecutara tcsh de bash Si no se ha ejecutado el comando de arriba, se puede ver qué shell está ejecutando el comando actual.

1voto

Michael Zhou Puntos 167

Cuando se inicia una sesión de terminal en OS X el login se llama utilidad.

De la página man:

The login utility enters information into the environment (see environ(7)) specifying the user's home directory (HOME), command inter-
preter (SHELL), search path (PATH), terminal type (TERM) and user name (both LOGNAME and USER).

Some shells may provide a builtin login command which is similar or identical to this utility.  Consult the builtin(1) manual page.

Observe las opciones utilizadas cuando se llama a la utilidad y luego lea la página del manual:

ps -ef | grep -w [l]ogin

Parte de esta información se obtuvo de su registro en opendirectory.

dscl . -read /Users/your_user_name RecordName UserShell NFSHomeDirectory

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X