¿Qué opciones pasa Terminal a bash en el inicio?

En las preferencias de la Terminal, puedo configurar la Terminal para "Abrir shells con:" -> "Comando (ruta completa):" /opt/local/bin/bash.

¿Qué opciones pasa el terminal al invocar este comando? La terminal parece ejecutar cada shell como un shell de inicio de sesión, por lo que supongo que --loginse está pasando.

¿Hay alguna documentación de Apple que brinde una descripción general de lo que se ejecuta exactamente cuando abre una ventana de terminal?

Respuestas (2)

No se pasan argumentos. El terminal ejecuta login -pfq $USER $PROGRAM, que a su vez ejecuta el programa especificado. loginseñala al programa que es un shell de inicio de sesión anteponiendo a -( argv[0]el nombre del programa).

Para el shell predeterminado, Terminal en realidad hace algo diferente. Invoca login -pfl $USER /bin/bash -c exec -la bash /bin/bash, donde la -lopción para iniciar sesión le dice que no ejecute el comando como shell de inicio de sesión, mientras que la -lopción execle dice que ejecute su argumento como shell de inicio de sesión (agregando el guión). La razón mientras se hace esto es que logintambién establece el directorio actual en el directorio de inicio del usuario cuando ejecuta un programa como shell de inicio de sesión, mientras que execno lo hace. Esto permite que la Terminal abra shells en el mismo directorio actual que la pestaña actual, sin loginvolver a configurarlo en el directorio de inicio.

Cuando cambio las preferencias del terminal a /opt/local/bin/bash, ¿cómo login -pfq $USER $PROGRAMcambia? Solo para que entienda tu primer párrafo, ¿quieres decir que Terminal se ejecuta login -pfq cwilson /opt/local/bin/-bash?
No, la terminal funciona login -pfq cwilson /opt/local/bin/bash. Luego, el inicio de sesión ejecuta bash, pero -bashpasa argv[0].

El comando:

/opt/local/bin/bash

esencialmente le indica a Terminal.app que cargue un shell bash interactivo (la ruta para su ejemplo es probablemente la versión de macports). Inicialmente, cuando abre Terminal, inicia una sesión de shell de inicio de sesión (en bash). Los shells de inicio de sesión pueden leer archivos como ~/.profile, ~/.bash_profileque configuran variables de entorno para su sesión, por lo que lo que se ejecuta es principalmente indicativo de lo que está configurado dentro de esos archivos.

En general, de forma predeterminada, al abrir un shell bash desde la Terminal, se ejecutarían estas cosas:

Procesos

bash
login

Abrir archivos y puertos

/bin/bash
/usr/lib/dyld
/private/var/db/dyld/dyld_shared_cache_x86_64
/dev/ttys000 

Más información:

Sitio web oficial de la fiesta

Página man de Apple: bash(1)