104 votos

¿Por qué Mac OS X no tiene como fuente ~/.bashrc?

Encontré un montón de gente averiguando por qué instrucción similar a esta :

Put X to your ~/.bashrc and you can do Y

no funcionan.

Siempre resulta que los archivos de inicio de bash de Mac OS X (o el propio Bash de Mac) no se originan en el archivo ~/.bashrc, ya sea en el intérprete de comandos de inicio de sesión, o en un intérprete de comandos generado desde el sistema de ventanas - como la aplicación Terminal en Mac OS X)

¿Por qué es esto, cuando todos los otros sistemas tipo Unix con Bash con los que he trabajado antes han hecho esto?

PS:

He encontrado lo que el propio Bash dice sobre los archivos de inicio (que podría ser útil) :

Cuando Bash es invocado como un shell de inicio de sesión interactivo, o como un no interactivo con la opción --login, primero lee y ejecuta ejecuta los comandos del archivo /etc/profile, si existe. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_login, y ~/.profile, en ese orden, y lee y ejecuta los comandos de el primero que exista y sea legible. La opción --noprofile puede cuando se inicia el shell para inhibir este comportamiento.

Fuente : http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

1 votos

También me he dado cuenta de que ~/.bash_profile se ejecuta pero no ~/.bashrc . Qué raro.

95voto

yoliho Puntos 340

En OSX el terminal por defecto inicia una sesión de inicio de sesión por lo que lee .bash_profile etc. (El proceso de inicio de sesión de la GUI que pide tu nombre y contraseña no utiliza shell scripts y no inicia ningún shell todo se hace desde launchd y el espacio de trabajo)

En otras Unices xterm ejecuta un shell no login por defecto por lo que leen .bashrc como los scripts que te presentan tu contraseña etc en el login llaman a la sesión de login y todos los terminales son subprocesos de este y heredan el entorno del shell.

Del documento de GNU al que se refiere

Invocada como un shell interactivo sin inicio de sesión

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta los comandos de ~/.bashrc, si ese archivo existe. Este puede inhibirse utilizando la opción --norc. La opción --rcfile file forzará a Bash a leer y ejecutar comandos desde el archivo en lugar de ~/.bashrc.

Así, normalmente, su ~/.bash_profile contiene la línea

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

después (o antes) de cualquier inicializaciones específicas del inicio de sesión.

19voto

bash sólo lee .bashrc para sin acceso conchas:

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta los comandos de ~/.bashrc, si ese archivo existe. Esto puede inhibirse utilizando la opción --norc. La opción --rcfile file forzará a bash a leer y ejecutar comandos desde el archivo en lugar de ~/.bashrc.

Al comenzar la Terminal bash como shell de inicio de sesión (ejecutar w para ver que el bash se ejecutan como -bash ), .bashrc nunca se lee automáticamente.

0 votos

Entonces, ¿el punto es que la aplicación Termina en Mac OS X siempre crea una instancia de "inicio de sesión" de bash? ¿Por qué? Si realmente no se inicia la sesión. (Usted ha iniciado la sesión antes de la interfaz gráfica de usuario)

2 votos

Bueno, es la primera vez que se ejecuta el shell como usted, por lo que es un inicio de sesión, en Unices basado en X11 se inicia mediante la ejecución de la cáscara que luego se ejecuta X por lo que no es un inicio de sesión

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X