
Veo dos posibles usos para la SHELL
variable de entorno:
- Se puede utilizar para especificar elinteractivoshell que el usuario quiere usar, y/o
- Los procesos pueden utilizarlo para ejecutar otros comandos, reemplazando el comando en el
/bin/sh -c "..."
idioma habitual.
Si solo se usara para lo primero, podría ser algo muy extraño (por ejemplo ipython
), si también se usara para lo segundo, debe proporcionar una forma básica de compatibilidad POSIX, por ejemplo, comprender el -c
parámetro y mantener el entorno intacto (lo cual es sorprendentemente complicado).
Elestándar POSIXNo es muy explícito aquí, simplemente escribe.
Esta variable representará un nombre de ruta del intérprete de lenguaje de comandos preferido del usuario. Si este intérprete no se ajusta al lenguaje de comandos de Shell en el volumen Shell y utilidades de IEEE Std 1003.1-2001, Capítulo 2, Lenguaje de comandos de Shell, las utilidades pueden comportarse de manera diferente a las descritas en IEEE Std 1003.1-2001.
¿El segundo uso es realmente común y/o válido y, por lo tanto, es algo de qué preocuparse si configuro SHELL
algo extraño?
Respuesta1
Ninguna de las API de POSIX C utiliza la SHELL
variable de entorno explícitamente. Elsystem
ypopen
La función debe llamar a un programa llamado sh
. Algunas utilidades (p. ej.ex
,mailx
, …) debe usar $SHELL
, pero siempre para ejecutar código proporcionado por el usuario;make
ignora explícitamente $SHELL
.
La sección sobreVariables de entornopermiteutilidades, pero no las API de C (“interfaces de sistema”) para tener un comportamiento diferente si $SHELL
no cumplen con POSIX sh.
En la práctica, SHELL
se configura en el shell de inicio de sesión del usuario, que puede o no ser compatible con POSIX.Zshypezson alternativas populares. He estado usando zsh durante una década en varias variantes de Unix y no recuerdo que ninguna utilidad del sistema haya fallado. He visto ocasionalmente llamadas de código mal escritas $SHELL
en lugar de sh
ejecutar scripts sh. Esto es bastante raro y no tiene por qué disuadirte de configurar SHELL
lo que quieras.
En resumen, sí, SHELL
es su shell interactivo favorito y las aplicaciones no reciben garantía de qué sintaxis acepta, ni siquiera de si aceptan una -c
opción.