Traço (-) na frente do bash

14

Se eu analisar a minha shell bash em um OS X (10.6.4) terminal, como por digitação echo $0, há um traço na frente da minha concha, como este: -bash. O que esse traço significa?

marshall.ward
fonte

Respostas:

14

Isso significa que bashé chamado como um shell de logon.


man bash diz:

Um shell de login é aquele cujo primeiro caractere do argumento zero é a -ou iniciou com a --loginopção

Quando o bash é chamado como um shell de logon interativo ou como um shell não interativo com a --loginopção, ele primeiro lê e executa comandos do arquivo /etc/profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~/.bash_profile, ~/.bash_logine ~/.profile, nessa ordem, e lê e executa os comandos do primeiro que existe e é legível. A --noprofileopção pode ser usada quando o shell é iniciado para inibir esse comportamento.

Quando um shell de login sai, o bash lê e executa comandos do arquivo ~/.bash_logout, se existir.


Você encontrará login -pfem sua pssaída, que inicia um shell de login por padrão.

Tente correr login -pfe login -pflveja a diferença. man logindescreve a diferença:

-lInforma ao programa executado pelo logon que esta não é uma sessão de logon (por convenção, uma sessão de logon é sinalizada para o programa com um hífen como o primeiro caractere argv[0]; essa opção desativa isso) e impede que ele seja chdir(2)acessado no diretório inicial do usuário . O padrão é adicionar o hífen (esta é uma sessão de login).

Daniel Beck
fonte
Grande resposta, obrigado pela explicação e mancita
marshall.ward
1
Estou usando o ubuntu e vejo comportamentos diferentes de echo $0: se eu digitar echo $0o terminal invocado por ctrl + alt + f1, o resultado será -bash; mas se eu digitá-lo em termianl invocado por ctrl + alt + t, result é bash(sem traço inicial). Você poderia explicar o porquê?
Frozen Flame
@ chama congelada Um é um shell de login, o outro não. Observe que os terminais OS X Terminal e Linux têm um comportamento diferente nesse sentido.
Daniel Beck
@DanielBeck isso não prova que o outro não é um shell de login. Quando o bash é iniciado com --loginargumento, ele não altera o seu argv[0], mas age como um shell de login.
Ruslan #
@Ruslan Claro, em teoria, ainda pode ser um shell de login. Mas isso não. (Pelo menos eu estaria extremamente surpreso se fosse.)
Daniel Beck