bash
actúa de manera diferente si es un shell o un lenguaje de programación normal (como perl
o python
).
Por diseño, las configuraciones en ~/.bash_profile
, ~/.bashrc
etc. son para que los usuarios establezcan cosas cuando bash
desempeñ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 ssh
sesiones (shell de inicio de sesión) o en consolas (shell de inicio de sesión).
Por otro lado, bash
tambié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 bash
programa, no le gustaría obtener el usuario ~/.bash_profile
automáticamente. Es un programa normal, no un shell. Un programa normal (incluidos los bash
programas) heredaría naturalmente la configuración del evironement de trabajo actual (shell), pero no la establecería .
Si escribimos un programa para cron
in bash
, resulta que está escrito en bash
; De hecho, podemos escribir en python
o 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 bash
como 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_profile
si 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 bash
como algo que tiene 2 roles: shell y lenguaje de programación . Entonces todo será mucho más fácil de entender.
.bashrc
tiene una línea que impide que se ejecute en shells no interactivos.