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
0
una variable de entorno?csh
.% echo $0 No file for $0.
, pero funciona paratcsh
bash
comosh
echo $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
SHELL
variable 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 $SHELL
me dio/bin/csh
yps -p $$
me dio22673 pts/1 00:00:00 bash
. Kingmilo explicó (arriba) por qué no son lo mismo.$SHELL
te da el shell predeterminado.$0
te 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
$0
me da/bin/ksh
en iTerm2.$SHELL
me da/bin/bash
en iTerm2.$0
,$SHELL
Me da/bin/bash
en la Terminalfuente
bash
en el terminal. Para volver a cambiar a zsh, escribazsh
Para 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/sh
referencia 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 -1
s), y considere mirar/proc/.../exe
para ver qué archivo se está ejecutando (ya que lacmd
salida 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