¿Qué es el shell predeterminado para la terminal?


51

Digamos que abrí una terminal e ingresé / ejecuté algunos comandos de shell.

Pero no invoqué explícitamente a Bash ni a ningún otro shell.

¿Qué shell se usó por defecto?

Respuestas:


51

El especificado en su línea en /etc/passwd(es una :línea separada y el shell es el final).

Por ejemplo el mío:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

Aquí está /bin/bash(el valor predeterminado de Ubuntu)

También puedes usar chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Esto me dice que mi caparazón es /bin/bashy me permite cambiarlo.

Finalmente, echo $SHELLharemos lo mismo:

$ echo $SHELL
/bin/bash

si es bash, ¿por qué a veces se invoca explícitamente como sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove

Creo que es un mal comando personal, nada de eso requiere root. Si lo hiciera , sería mejor escribirlo como sudo netstat -an | grep LISTEN | grep -v ^unix. No veo ninguna razón para encerrar eso en un subshell bash.
Cesio

2
@DrStrangeLove: si más de un comando en la tubería necesitara permisos de root, entonces sudo bash -c "..."se aseguraría de que la tubería completa sea ejecutada por root.
Keith Thompson

Si no sabe qué comandos requieren root (y por qué), no debe ejecutarlos. De lo contrario, ¿por qué confiar en cualquier comando / programa / script más de lo necesario? Si no puede commandA | sudo commandB | commandC, puede hacer un sudo idprimer (ejecuta el idcomando como root, pero también adquiere un token " usar sudo sin contraseña " que dura 15 minutos (predeterminado).
waltinator

2
Si utiliza chsha continuación, debe cerrar la sesión y volver a iniciarla para ver este cambio.
Neil Traft

17

GNU Bash es el shell utilizado por defecto en terminales en Ubuntu. Sin embargo, cuando las secuencias de comandos se ejecutan en el arranque del sistema, se utiliza el guión, ya que es / bin / sh.

Esto se define en la variable ambiental $ SHELL. Puede verificar escribiendo echo $SHELLen la terminal.


14

escribiendo lo siguiente mostrará con qué shell se abrió el terminal:

echo $SHELL

Sin embargo, para averiguar en qué shell se encuentra actualmente (puede haberlo cambiado) escriba

ps -p $$

por ejemplo, verá que el shell es bash en la salida de ejemplo

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Otro método es usar

echo $0

esto simplemente devolverá el nombre del shell actual.


+1 por simplicidadecho $0
djthoms

¡Gran respuesta! Gracias, por alguna razón echo $ SHELL no funcionó (siempre usó ese) y sus dos alternativas funcionaron. ¡Gracias!
Wolfdawn

3

Por defecto es bash:

env | grep ^SHELL=

En la mayoría de los casos producirá

SHELL=/bin/bash

No necesariamente. Si crea un nuevo usuario con useradd, el valor predeterminado es sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk

+1, porque aunque la respuesta seleccionada requiere menos tipeo, siempre es bueno tener más de una forma de hacer algo.

2

Para obtener la ruta del archivo del ejecutable de shell actual, se puede usar

readlink -f /proc/$$/exe

Algunas salidas posibles son:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
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.