Guión (-) delante de bash

14

Si examino mi shell bash en un OS X (10.6.4) de terminal, como por tipificación echo $0, hay un guión delante de mi concha, así: -bash. ¿Qué significa este guión?

marshall.ward
fuente

Respuestas:

14

Significa que bashse invoca como un shell de inicio de sesión.


man bash dice:

Un shell de inicio de sesión es aquel cuyo primer carácter del argumento cero es a -, o uno que comenzó con la --loginopción.

Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la --loginopción, primero lee y ejecuta comandos del archivo /etc/profile, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_loginy ~/.profile, en ese orden, y lee y ejecuta órdenes desde el primero que existe y es legible. La --noprofileopción se puede usar cuando se inicia el shell para inhibir este comportamiento.

Cuando sale un shell de inicio de sesión, bash lee y ejecuta comandos del archivo ~/.bash_logout, si existe.


Encontrará login -pfen su pssalida, que inicia un shell de entrada por defecto.

Intenta correr login -pfy login -pflver la diferencia. man logindescribe la diferencia:

-lIndica al programa ejecutado por inicio de sesión que no se trata de una sesión de inicio de sesión (por convención, una sesión de inicio de sesión se señala al programa con un guión como primer carácter de argv[0]; esta opción desactiva eso) y evita que chdir(2)ingrese al directorio de inicio del usuario . El valor predeterminado es agregar el guión (esta es una sesión de inicio de sesión).

Daniel Beck
fuente
Gran respuesta, gracias por la explicación y mancita
marshall.ward
1
Estoy usando ubuntu, y veo diferentes comportamientos de echo $0: si escribo echo $0en el terminal invocado por ctrl + alt + f1, el resultado es -bash; pero si lo escribo en termianl invocado por ctrl + alt + t, el resultado es bash(sin guión inicial ). ¿Podrías explicar por qué?
Frozen Flame
@ frozen-flame Uno es un shell de inicio de sesión, el otro no. Tenga en cuenta que los terminales OS X y Linux tienen un comportamiento diferente en ese sentido.
Daniel Beck
@DanielBeck no es una prueba de que el otro no sea un shell de inicio de sesión. Cuando bash se inicia con --loginargumento, no cambia su argv[0], pero actúa como un shell de inicio de sesión.
Ruslan
@Ruslan Claro, en teoría aún podría ser un shell de inicio de sesión. Pero no lo es. (Al menos me sorprendería mucho si lo fuera)
Daniel Beck