web-dev-qa-db-fra.com

Pourquoi $ 0 est-il défini sur -bash?

Le nom du premier processus de connexion semble être défini sur -bash, mais si je sous-shell, il devient bash. par exemple:

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

-bash provoque l'échec de certains scripts, tels que . /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

Quelqu'un connaît la raison pour laquelle $0 est défini sur -bash?

8
James Shimer

Si le résultat de la commande echo $0 est -bash, cela signifie que bash a été appelé en tant que shell de connexion. man bash dit quelque part à la ligne 126:

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

Plus d'informations ici: Différence entre les shell de connexion et non-login .

Donc, votre shell est toujours /bin/bash (ceci peut être vérifié avec la commande echo $Shell) et je vous suggère d'utiliser cette commande qui vous donnera une erreur normalement:

exec /usr/share/debconf/frontend bash
5
Radu Rădeanu