O traço principal no nome do processo (em argv[0]
, para ser preciso) é colocado ali pelo processo que chama o shell - login
ou algum equivalente. Ele diz ao programa de shell que ele deve agir como um shell de login (leia .profile
, etc.). O programa shell pode escolher atuar como um shell de login em outras circunstâncias (por exemplo, bash e zsh agem como um shell de login se passarem pela opção de linha de comando -l
).
Para responder às suas perguntas:
- O papel de
-
é dizer ao shell para se comportar como um shell de login. Para o bash, passar--login
na linha de comando é equivalente. - Você pode ver a função de
-
no bash chamado com a opção--login
- ele lê~/.profile
e assim por diante. Você não pode ver-bash
se o bash foi invocado comobash --login
em vez de-bash
porque o bash não foi chamado como-bash
. - Cascas típicas não permitem que você escolha o argumento zeroth, ele deve ser o nome do comando. Com zsh, você pode fazer
ARGV0=-bash bash
e comksh93
,bash
ouzsh
, você pode fazer(exec -a -bash bash)
. Emmksh
ouzsh
, você pode fazerhash -- -bash=/bin/bash; -bash
. Você não pode fazer algo comoln -s /bin/bash ./-bash; ./-bash
, pois todo oargv[0]
deve começar com-
. Você pode fazerPATH=:$PATH; -bash
, mas tem esse efeito colateral desagradável de adicionar""
na frente de$PATH
. - Sim.
Veja também Diferença entre o Login Shell e Shell sem login?