Dlaczego 0 $ jest ustawione na -bash?

8

Wydaje się, że nazwa pierwszego procesu logowania jest ustawiona na -bash, ale jeśli podpiszę, stanie się bash. na przykład:

root@nowere:~# echo $0
-bash
root@nowere:~# bash
root@nowere:~# echo $0
bash

-bash powoduje awarię niektórych skryptów, takich jak . /usr/share/debconf/confmodule

exec /usr/share/debconf/frontend -bash
Can't exec "-bash": No such file or directory at /usr/share/perl/5.14/IPC/Open3.pm line 186.
open2: exec of -bash failed at /usr/share/perl5/Debconf/ConfModule.pm line 59

Czy ktoś wie, dlaczego $0tak się dzieje -bash?

James Shimer
źródło
1
@ RaduRădeanu Zauważono bezużyteczne użycie kota!
gniourf_gniourf

Odpowiedzi:

5

Jeśli wynikiem echo $0polecenia jest -bash, oznacza to, że bashzostał wywołany jako powłoka logowania. man bashmówi gdzieś w linii 126:

A  login shell is one whose first character of argument zero is a -, or 
one started with the --login option.

Zobacz więcej o tutaj: Różnica między Powłoką logowania a Powłoką niezalogowaną .

Więc twoja powłoka jest nadal /bin/bash(można to sprawdzić za pomocą echo $SHELLkomendy) i sugeruję, abyś używał tej komendy, która daje błąd jak zwykle:

exec /usr/share/debconf/frontend bash
Radu Rădeanu
źródło
Dzięki, wygląda na to, że login poprawnie dodaje „-” do nazwy procesu powłoki logowania. To odpowiada na moje pytanie.
James Shimer