En Linux y, que yo sepa, todos los sistemas Unix, emuladores de terminal ejecutan shells interactivos sin inicio de sesión de forma predeterminada. Esto significa que, para bash, el shell iniciado:
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde
/etc/bash.bashrc
y~/.bashrc
, si existen estos archivos. Esto puede inhibirse mediante el uso de la--norc
opción.La
--rcfile
opción de archivo obligará a bash a leer y ejecutar comandos desde el archivo en lugar de/etc/bash.bashrc
y~/.bashrc
.
Y para los shells de inicio de sesión:
Cuando se invoca bash como un shell de inicio de sesión interactivo o como un shell no interactivo con la
--login
opción, 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 órdenes desde el primero que existe y es legible.La
--noprofile
opción se puede usar cuando se inicia el shell para inhibir este comportamiento.
Sin embargo, en OSX, el shell predeterminado (que es bash) se inició en el terminal predeterminado (Terminal.app) en realidad fuentes ~/.bash_profile
o ~.profile
etc. En otras palabras, actúa como un shell de inicio de sesión.
Pregunta principal : ¿Por qué el shell interactivo predeterminado es un shell de inicio de sesión en OSX? ¿Por qué OSX eligió hacer esto? Esto significa que todas las instrucciones / tutoriales para cosas basadas en shell que mencionan cambios en las cosas ~/.bashrc
fallarán en OSX o viceversa ~/.profile
. Aún así, si bien muchas acusaciones pueden dirigirse a Apple, contratar desarrolladores incompetentes o idiotas no es una de ellas. Presumiblemente, tenían una buena razón para esto, entonces, ¿por qué?
Preguntas: ¿Terminal.app realmente ejecuta un shell de inicio de sesión interactivo o ha cambiado el comportamiento de bash? ¿Es esto específico para Terminal.app o es independiente del emulador de terminal?