Una cáscara se pone en marcha cuando se conecta, pero también se inició por programas como make
, o cuando se ejecuta un script de shell, o cuando se escribe :sh
a vi
, o cuando se crea una nueva ventana de terminal.
Originalmente, el shell se leía ~/.profile
cuando iniciaba sesión o corría su
. Este script haría cosas como anunciar si tenía un nuevo correo electrónico, personalizar sus caracteres de borrar y matar, y establecer y exportar las variables TERM y PATH. Cuando se inició en casi cualquier otro contexto, el shell no leía ~/.profile
, porque hacer la mayoría de esas cosas sería redundante. Se esperaba que haya exportado cualquier variable de shell importante al nuevo shell.
La forma en que el shell sabía si leer ~/.profile
era verificar si el primer carácter de argv[0]
, alias $0
, era '-'
.
Comenzando con csh
, se introdujeron alias. Los alias no se exportaron al medio ambiente. csh
fue diseñado para leer en dos secuencias de comandos de inicialización diferentes. ~/.login
se leía solo cuando un usuario argv[0]
iniciaba sesión y la señal para hacerlo era si comenzaba con '-'
. ~/.cshrc
se leía cada vez que se iniciaba el shell. En general, uno coloca alias ~/.cshrc
y todo lo demás en ~/.login
. csh
también compatible ~/.logout
, que en la mayoría de los casos simplemente borró la pantalla y se ejecutó fortune
.
Otros proyectiles adoptaron estas mismas características. ksh
leería ~/.kshrc
, bash
leería ~/.bashrc
, y ahí es donde colocarías tus definiciones de alias.
Entonces, para resumir, la aplicación que genera un shell puede decidir si debe ser un "shell de inicio de sesión", en cuyo caso existe '-'
al principio, o un shell normal. En la mayoría de los casos, un shell que será interactivo se inicia como un shell de inicio de sesión, y un shell está destinado a ejecutar algunos comandos, ya sea como argumentos o desde un script, y luego salir es un shell normal.
Pero todo depende del capricho de la aplicación que inicia el shell.