When exactly does bash prefix error messages with
-bash:and when withbash:
O prefixo, se impresso, é geralmente o nome com o qual o bash foi iniciado, também conhecido como argv[0] ( geralmente disponível em $0 ).
$ bash -c 'type foo; echo $0'
bash: line 0: type: foo: not found
bash
$ ARGV0=bar bash -c 'type foo; echo $0'
bar: line 0: type: foo: not found
bar
$ ARGV0='¯\(°_o)/¯' bash -c 'type foo; echo $0'
¯\(°_o)/¯: line 0: type: foo: not found
¯\(°_o)/¯
(Isso usa a variável especial ARGV0 do zsh para definir argv[0] de um comando para o que quisermos.)
Para iniciar o bash como um shell de login, o que quer que inicie o bash pode prefixar argv[0] com - ou usar a opção -l . Consulte Como invocar o Bash :
A login shell is one whose first character of argument zero is ‘
-’, or one invoked with the--loginoption.
Então, por exemplo,
$ ARGV0=-bash bash -c 'echo -n $0:;shopt -q login_shell && echo login || echo not login'
-bash:login
$ bash -c 'echo -n $0:;shopt -q login_shell && echo login || echo not login'
bash:not login
SSH, sudo (com -i ), o comando TTY login , etc. geralmente usam o método - inicial para iniciar um shell de login. Portanto, se você fez login por meio de qualquer um desses, provavelmente verá -bash (ou -zsh , ou -tcsh , ou qualquer que seja seu login com - na frente). Se você começou o bash através de um emulador de terminal, eles normalmente executam shells que não são de login e você veria bash .
what does the leading hyphen indicate?
Esse provavelmente é um shell de login, que pode ser um ponto útil na depuração. Em particular, PATH é frequentemente definido a partir de arquivos originados por shells de login ( /etc/profile , ~/.profile , ~/.bash_profile , etc. - veja Bash Startup Files para mais). Para um erro de comando não encontrado, isso seria particularmente importante, pois PATH é como os comandos são encontrados. Ele fornece informações úteis sobre quais arquivos devem ser verificados para modificar PATH .