¿Cuál es la diferencia entre un bash shell 'Login' y un 'Interactive'


50

¿Cuál es la diferencia entre un bash shell 'Login' y un 'Interactive'? He citado Wikipedia a continuación, pero ¿alguien puede dar una mejor respuesta?

EDITAR: Esta es una wiki comunitaria, por lo que quizás, en lugar de votar para cerrar, podría proporcionar ejemplos de qué situaciones requieren qué tipo de $ SHELL

Guiones de inicio

Cuando se inicia Bash, ejecuta los comandos en una variedad de scripts diferentes.

Cuando se invoca Bash como un shell de inicio de sesión interactivo, primero lee y ejecuta comandos del archivo / etc / profile, si ese archivo existe. Después de leer ese archivo, busca ~ / .bash_profile, ~ / .bash_login y ~ / .profile, en ese orden, y lee y ejecuta comandos del primero que existe y es legible.

Cuando sale un shell de inicio de sesión, Bash lee y ejecuta comandos del archivo ~ / .bash_logout, si existe.

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta comandos desde ~ / .bashrc, si ese archivo existe. Esto puede inhibirse usando la opción --norc. La opción de archivo --rcfile obligará a Bash a leer y ejecutar comandos desde el archivo en lugar de ~ / .bashrc.


He editado la pregunta para que se ajuste más a las reglas del sitio medio aprobadas. No creo que nunca voy a entender el deseo de eliminar la información útil ...
Gareth

77
¿Por qué la gente vota esta pregunta? ¿Me parece perfectamente legítimo?
duffbeer703

2
Ugh, tome la respuesta de su pregunta y publíquela como respuesta. Está bien responder tu propia pregunta.
derobert

2
Es una pregunta muy válida ya que la distinción es confusa. Tenga en cuenta, por ejemplo, que cuando inicia sesión en un entorno gráfico a través de xdm y ejecuta xterm, obtiene un shell interactivo y los archivos de inicio del shell de inicio de sesión no se ejecutan.
pjc50

Respuestas:


16

En los archivos de perfil de su shell de inicio de sesión, puede configurar algunas cosas que usará durante su sesión, y que solo deben hacerse una vez. Algunas ideas:

  • cree un archivo temporal que contenga la dirección IP desde la que se conectó, luego puede incluirlo en algunos scripts que configuran las reglas del firewall.
  • ejecute ssh-agent, solicite sus claves SSH y almacene las variables de entorno del agente SSH en un archivo.
  • si esa es una máquina limitada, y sus compañeros de trabajo quieren estar al tanto de los inicios de sesión de los demás, escriban (1) mensajes informándoles de su inicio de sesión.

En los archivos de un shell sin inicio de sesión ( .bashrc), debe configurar su shell:

  • Aviso de lujo
  • establecer alias
  • establecer opciones de historial
  • definir funciones de shell personalizadas
  • exportar variables de entorno (tal vez PAGER, EDITOR si la configuración de todo el sistema apesta)
  • cargar variables de agente ssh guardadas en .bash_profile

Por lo general, incluiría .bashrcdesde .bash_profilecon lo siguiente. Luego, el shell de inicio de sesión obtiene todas sus personalizaciones, y el .bash_profilearchivo no tiene que duplicar cosas que ya están en .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc

3
¿Es un shell de inicio de sesión el primero que se inicia cuando estás fresco en la máquina? Todos los demás shells que abra después de eso pueden ser interactivos o no. ¿Un shell que se ejecuta desde cron? No parece interactivo, pero ¿es inicio de sesión? ¿Qué pasa si no estás en la máquina? Esas son las preguntas que quedan sin respuesta
François Beausoleil

44
Ahora, ESO es una respuesta que puedo entender: linuxquestions.org/questions/linux-general-1/…
François Beausoleil
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.