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?


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

Dzięki, wygląda na to, że login poprawnie dodaje „-” do nazwy procesu powłoki logowania. To odpowiada na moje pytanie.
James Shimer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.