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

1

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

¿Qué opciones está pasando el terminal al invocar este comando? Parece que el terminal ejecuta cada shell como un shell de inicio de sesión, ¿así que asumo que se está pasando --login ?

¿Existe alguna documentación de Apple que ofrezca una descripción general de qué se está ejecutando exactamente cuando abre una ventana de terminal?

    
pregunta cdwilson 24.12.2013 - 00:20

2 respuestas

2

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

Para el shell predeterminado, Terminal hace algo diferente. Invoca a login -pfl $USER /bin/bash -c exec -la bash /bin/bash , donde la opción -l para iniciar sesión le dice a no que ejecute el comando como shell de inicio de sesión, mientras que la opción -l a exec le dice que ejecute su argumento como un shell de inicio de sesión (añadiendo el guión). Mientras se hace esto, la razón 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 que login lo vuelva a configurar en el directorio principal.

    
respondido por el LaC 24.12.2013 - 05:39
2

El comando:

/opt/local/bin/bash

esencialmente le indica a Terminal.app que cargue un shell de 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 las variables de entorno para su sesión, por lo que lo que se está ejecutando es principalmente indicativo de lo que está configurado dentro de esos archivos.

En general, de forma predeterminada, al abrir un shell bash desde Terminal, se ejecutarán 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 Bash

     

Página de Apple Man: bash (1)

    
respondido por el l'L'l 24.12.2013 - 02:47

Lea otras preguntas en las etiquetas