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--login
option.
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
.