¿La variable de entorno $SHELL es solo para shells interactivos?

¿La variable de entorno $SHELL es solo para shells interactivos?

Veo dos posibles usos para la SHELLvariable 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 -cpará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 SHELLalgo extraño?

Respuesta1

Ninguna de las API de POSIX C utiliza la SHELLvariable de entorno explícitamente. ElsystemypopenLa 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;makeignora explícitamente $SHELL.

La sección sobreVariables de entornopermiteutilidades, pero no las API de C (“interfaces de sistema”) para tener un comportamiento diferente si $SHELLno cumplen con POSIX sh.

En la práctica, SHELLse 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 $SHELLen lugar de shejecutar scripts sh. Esto es bastante raro y no tiene por qué disuadirte de configurar SHELLlo que quieras.

En resumen, sí, SHELLes su shell interactivo favorito y las aplicaciones no reciben garantía de qué sintaxis acepta, ni siquiera de si aceptan una -copción.

información relacionada