Warum ist $ 0 auf -bash gesetzt?

8

Der Name des ersten Anmeldevorgangs scheint festgelegt zu sein -bash, aber wenn ich eine Subshell verwende, wird dies der Fall bash. zum Beispiel:

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

-bash führt dazu, dass einige Skripte fehlschlagen, z . /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

Kennt jemand den Grund warum eingestellt $0ist -bash?

James Shimer
quelle
1
@ RaduRădeanu Nutzlose Verwendung von Katze entdeckt!
gniourf_gniourf

Antworten:

5

Wenn die Ausgabe des echo $0Befehls lautet -bash, bedeutet dies, dass er bashals Anmeldeshell aufgerufen wurde. man bashsagt irgendwo in Zeile 126:

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

Weitere Informationen finden Sie hier: Unterschied zwischen Login-Shell und Nicht-Login-Shell .

Ihre Shell ist also immer noch /bin/bash(dies kann mit dem echo $SHELLBefehl überprüft werden ) und ich empfehle Ihnen, diesen Befehl zu verwenden, der Ihnen wie gewohnt Fehler gibt:

exec /usr/share/debconf/frontend bash
Radu Rădeanu
quelle
Vielen Dank, es scheint, dass die Anmeldung das "-" zum Namen des Anmelde-Shell-Prozesses korrekt hinzufügt. Das beantwortet meine Frage.
James Shimer