为什么 $0 设置为 -bash?

Jam*_*mer 8 command-line bash scripts debconf

第一个登录进程名称似乎设置为-bash,但是如果我使用 subshel​​l 则它变为bash. 例如:

root@nowere:~# echo $0
-bash
root@nowere:~# bash
root@nowere:~# echo $0
bash
Run Code Online (Sandbox Code Playgroud)

-bash 导致某些脚本失败,例如 . /usr/share/debconf/confmodule

root@nowere:~# echo $0
-bash
root@nowere:~# bash
root@nowere:~# echo $0
bash
Run Code Online (Sandbox Code Playgroud)

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

Rad*_*anu 6

如果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.
Run Code Online (Sandbox Code Playgroud)

请参阅此处的更多信息:登录外壳和非登录外壳之间的区别

所以你的 shell 仍然是/bin/bash(这可以用echo $SHELL命令检查),我建议你使用那个命令,它会像往常一样给你错误:

exec /usr/share/debconf/frontend bash
Run Code Online (Sandbox Code Playgroud)