为什么将 $0 设置为 -bash?

为什么将 $0 设置为 -bash?

第一个登录进程名称似乎设置为-bash,但如果我进行子shell,那么它就变成了bash。例如:

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

-bash导致某些脚本失败,例如. /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

有谁知道为什么$0设置为-bash

答案1

echo $0如果命令的输出是,-bash则意味着它 bash是作为登录 shell 调用的。man bash第 126 行某处显示:

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

查看更多信息:登录 Shell 和非登录 Shell 之间的区别

因此你的 shell 仍然存在/bin/bash(可以使用echo $SHELL命令进行检查),我建议你使用正常情况下会给出错误的命令:

exec /usr/share/debconf/frontend bash

相关内容