Respuestas:
No se llama bash_profile
, pero el lugar estándar para la configuración global de bash es /etc/bash.bashrc
. Es habitual llamar a esto desde /etc/profile
si el shell es bash. Por ejemplo, en mi /etc/profile
tengo:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
En términos de uso, /etc/profile
proporciona una configuración de todo el sistema para todos los shells compatibles con Bourne (sh, bash, ksh, etc.). Normalmente no hay necesidad de un equivalente /etc/bash_profile
, porque la intención del archivo de perfil es controlar el comportamiento de los shells de inicio de sesión. Normalmente, todo lo que quieras hacer allí no será específico de bash. /etc/bash.bashrc
es específico de bash y se ejecutará tanto para shells de inicio de sesión como de inicio de sesión.
Para complicar aún más las cosas, parece que OS X ni siquiera tiene un /etc/bash.bashrc
. Esto probablemente esté relacionado con el hecho de que los terminales en OS X se ejecutan de manera predeterminada como shells de inicio de sesión , por lo que se pierde la distinción:
Una excepción a las pautas de la ventana de terminal es Terminal.app de Mac OS X, que ejecuta un shell de inicio de sesión de forma predeterminada para cada nueva ventana de terminal, llamando a .bash_profile en lugar de .bashrc. Otros emuladores de terminal GUI pueden hacer lo mismo, pero la mayoría tiende a no hacerlo.
No ejecuto OS X, por lo que el alcance de mi conocimiento termina allí.
/etc/profile
en Ubuntu 12.04. ¿Qué sugeriría en su lugar si uno quisiera uno /etc/profile
que se ejecutara solo bajo bash y no otro shell compatible con sh?
/etc/profile
archivo para mi sistema contiene un comentario en la parte superior que dice: # System-wide .profile for sh(1)
. ¿Esto significa que profile
es sh
específico? ¿De sh
alguna manera corre antes bash
?
sh
es un subconjunto de bash
. /etc/profile
se ejecuta para sh
, bash
y todos los demás shells compatibles con Bourne.
/etc/bashrc
en la Mac, no /etc/bash.bashrc
. También parece ejecutarse /bin/sh
también.
/etc/profile
Es lo global bash_profile
. No hay ningún archivo específico para bash, bash solo lee el archivo estándar leído por todos los shell de estilo Bourne. Ahí es donde puede establecer variables de entorno de todo el sistema.
Consulte ¿Hay un archivo equivalente ".bashrc" leído por todos los shells? para obtener una descripción general genérica de los archivos de inicio comunes de bash.
Esto no se carga /etc/profile
, por lo que no /etc/profile.d/
se carga nada (a diferencia de los shells de inicio de sesión, vea el final).
El archivo global para esto es / etc / bashrc o /etc/bash.bashrc (dependiendo del -DSYS_BASHRC=
indicador establecido en el momento de la compilación):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
Por lo general, es una buena idea dejar este archivo tal como está (tanto como sea posible) para evitar conflictos. La estrategia que uso es similar a la que usan los shells de inicio de sesión (/ etc / profile).
Mi estrategia es agregar un cargador al archivo anterior:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
Ahora puedo agregar fácilmente n personalizaciones al archivo de shell global interactivo (bash) colocando nuevos archivos .sh en el directorio /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Puedes hacer esto con esta frase:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Si, después de leer esto, no te convence, hazlo para convencerte:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Abra un nuevo emulador de terminal y busque alguna palabra común en su directorio de usuario como "the" usando grep
grep -r 'the'
Nada debe ser coloreado. Haga lo mismo en una consola virtual haciendo CTRLALTF1 (recuerde que su servidor X probablemente se esté ejecutando en CTRLALTF7 para que pueda volver a cambiar. Si lo olvida, simplemente reinicie su administrador de escritorio, por ejemplo)
grep -r 'the'
producirá resultados coloreados como se desee.
Nada debe ser coloreado. Haga lo mismo en una consola virtual haciendo CTRLALTF1(recuerde que su servidor X probablemente se esté ejecutando CTRLALTF7para que pueda volver a cambiar. Si lo olvida, simplemente reinicie su administrador de escritorio, por ejemplo)
grep -r 'the'
producirá resultados coloreados como se desee.
Un shell de inicio de sesión es lo que obtiene cuando inicia una máquina o cambia consolas virtuales a CTRLALTF1través de FNthla consola virtual.
Se carga un Shell de inicio de sesión /etc/profile
mientras se cargan los /etc/profile.d/*.sh
archivos.
/etc/bash.bashrc
desde un shell no interactivo./etc/profile
puede leerse mediante un shell no interactivo. ¿Ve la diferencia entre Shell de inicio de sesión y Shell sin inicio de sesión?