bashactúa de manera diferente si es un shell o un lenguaje de programación normal (como perlo python).
Por diseño, las configuraciones en ~/.bash_profile, ~/.bashrcetc. son para que los usuarios establezcan cosas cuando bashdesempeñan el papel de un shell (shell de inicio de sesión, shell interactivo). Piense en el entorno que tiene en un xterm(shell interactivo) o en sshsesiones (shell de inicio de sesión) o en consolas (shell de inicio de sesión).
Por otro lado, bashtambién es un poderoso lenguaje de programación, piense en muchos scripts para administrar servicios systemd, lo que requiere un estilo de trabajo diferente. Por ejemplo, cuando un desarrollador está escribiendo una secuencia de comandos del sistema o un bashprograma, no le gustaría obtener el usuario ~/.bash_profileautomáticamente. Es un programa normal, no un shell. Un programa normal (incluidos los bashprogramas) heredaría naturalmente la configuración del evironement de trabajo actual (shell), pero no la establecería .
Si escribimos un programa para cronin bash, resulta que está escrito en bash; De hecho, podemos escribir en pythono perl, o cualquier otro lenguaje programación, entonces podemos tener una opción para las fuentes de bash's ~/.bash_profile(es decir: el establecimiento de la concha del usuario, que sólo pasa a ser el mismo idioma de su lenguaje de programación):
[ -f /home/user/.bash_profile ] && . /home/user/.bash_profile
Sin embargo, ¿qué pasa si ese usuario en particular no lo usa bashcomo su shell? Él / ella puede usar zsh, ksh, fish, etc Por lo tanto, esa práctica no es realmente trabajar al escribir el programa para el uso público.
Por lo tanto, puede fuente ~/.bash_profilesi cree que funcionará. Pero, aquí, no se trata de si podemos obtener un archivo, se trata de cómo deberían funcionar las cosas en el sistema: el concepto de diseño . En resumen: deberíamos verlo bashcomo algo que tiene 2 roles: shell y lenguaje de programación . Entonces todo será mucho más fácil de entender.
.bashrctiene una línea que impide que se ejecute en shells no interactivos.