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 :sha vi, o cuando se crea una nueva ventana de terminal.
Originalmente, el shell se leía ~/.profilecuando 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 ~/.profileera 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. cshfue diseñado para leer en dos secuencias de comandos de inicialización diferentes. ~/.loginse leía solo cuando un usuario argv[0]iniciaba sesión y la señal para hacerlo era si comenzaba con '-'. ~/.cshrcse leía cada vez que se iniciaba el shell. En general, uno coloca alias ~/.cshrcy todo lo demás en ~/.login. cshtambié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. kshleería ~/.kshrc, bashleerí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.