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?

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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.