Leí que el terminal no es más que shell, y Unix proporciona diferentes tipos de shells:
- Bourne shell (sh)
- C shell (csh)
- TC shell (tcsh)
- Korn shell (ksh)
- Bourne Again shell (bash)
Preguntas:
- Cuando abro una ventana de terminal, ¿qué shell se abre por defecto?
- ¿Cómo verifico cuántos shells están instalados?
- ¿Cómo cambio el shell utilizado desde mi cuenta?
command-line
LearNer969
fuente
fuente

Respuestas:
Puede escribir el siguiente comando en su terminal para ver qué shell está utilizando:
El resultado será similar al siguiente si está utilizando el terminal bash ( Bourne Again Shell ):
fuente
0una variable de entorno?csh.% echo $0 No file for $0., pero funciona paratcshbashcomoshecho $0,ls -l `which <name>`para ver si está vinculado a otro binario del shell.Para encontrar el shell que tiene en el entorno predeterminado, puede verificar el valor de la
SHELLvariable de entorno:Para encontrar la instancia de shell actual, busque el proceso (shell) que tiene el PID de la instancia de shell actual.
Para encontrar el PID de la instancia actual de shell:
Ahora para encontrar el proceso que tiene el PID:
Poniendo todo junto:
fuente
echo $SHELLme dio/bin/cshyps -p $$me dio22673 pts/1 00:00:00 bash. Kingmilo explicó (arriba) por qué no son lo mismo.$SHELLte da el shell predeterminado.$0te da el shell actual.Por ejemplo: tengo bash como mi shell predeterminado, que uso para mi aplicación Terminal. Pero para mi iTerm2 aplicación, utilizo el comando como se abre la ventana:
/bin/ksh.Entonces mi
$0me da/bin/kshen iTerm2.$SHELLme da/bin/bashen iTerm2.$0,$SHELLMe da/bin/bashen la Terminalfuente
bashen el terminal. Para volver a cambiar a zsh, escribazshPara saber cuál es el shell predeterminado para su usuario, puede ejecutar:
Por ejemplo, si está utilizando Bash, debería obtener el siguiente resultado:
Si no cambió ninguna configuración, debería ser Bash, ya que Bash es el shell predeterminado en Ubuntu.
fuente
/bin/shreferencia en mi respuesta$$variable en realidad está definida por POSIX y funcionará en la gran mayoría de los shells. Fish ha decidido no seguir el estándar aquí, así que creo que es justo ignorarlo. Puedo confirmar que$$funciona como se esperaba en sh, dash, bash, zsh, ksh, ash, tcsh y csh. De hecho, en la parte superior de mi cabeza no puedo pensar en ninguna otra concha, excepto en los peces donde no funciona.Las otras respuestas tienden a usar funciones específicas de shell, pero estamos tratando de descubrir qué shell estamos utilizando, por lo que asumen la respuesta al problema. Por ejemplo, ninguna de las respuestas funcionará en peces.
En su lugar, use la sintaxis $$ en una invocación de sh, pero luego estamos buscando el PPID, no el PID. Use el PPID para encontrar el cmd.
Gracias por mejorar @muru
fuente
ppid=/cmd=para omitir los encabezados (y por lo tanto lostail -1s), y considere mirar/proc/.../exepara ver qué archivo se está ejecutando (ya que lacmdsalida puede ser manipulada por lo que sea que ejecute el shell).La publicación original hizo tres preguntas. Las respuestas dadas cubren la primera pregunta, "Cuando abro una ventana de terminal, ¿qué shell se abre por defecto?" También responden una pregunta que NO se hizo, a saber, "¿Cómo puedo averiguar qué shell se está ejecutando actualmente en el terminal?" Sin embargo, por lo que puedo ver, nadie ha respondido ni a la segunda ni a la tercera pregunta original, a saber, "¿Cómo verifico cuántos shells están instalados?" y "¿Cómo cambio el shell utilizado desde mi cuenta?"
gato / etc / conchas
Por ejemplo, en una instalación predeterminada de Ubuntu 18.10 esto da:
# / etc / shells: shells de inicio de sesión válidos
/ bin / sh
/ bin / dash
/ bin / bash
/ bin / rbash
Sin embargo, por defecto sh es un enlace simbólico al guión, mientras que rbash enlaza a bash con la opción -r ("bash restringido"), por lo que en realidad solo hay dos shells, no cuatro como sugiere la lista anterior. El siguiente comando le mostrará si alguno de los shells enumerados son en realidad enlaces simbólicos y, de ser así, dónde están vinculados: ls -l / bin
fuente