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 --login
se 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?
No se pasan argumentos. El terminal ejecuta login -pfq $USER $PROGRAM
, que a su vez ejecuta el programa especificado. login
señ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 -l
opción para iniciar sesión le dice que no ejecute el comando como shell de inicio de sesión, mientras que la -l
opción exec
le 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 login
tambié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 exec
no lo hace. Esto permite que la Terminal abra shells en el mismo directorio actual que la pestaña actual, sin login
volver a configurarlo en el directorio de inicio.
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_profile
que 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:
wilson
/opt/local/bin/bash
, ¿cómologin -pfq $USER $PROGRAM
cambia? Solo para que entienda tu primer párrafo, ¿quieres decir que Terminal se ejecutalogin -pfq cwilson /opt/local/bin/-bash
?Laca
login -pfq cwilson /opt/local/bin/bash
. Luego, el inicio de sesión ejecuta bash, pero-bash
pasaargv[0]
.