bash 前面的破折号 (-)

mar*_*ard 16 bash macos

如果我在 OS X (10.6.4) 终端中检查我的 bash shell,例如键入echo $0,我的 shell 前面会有一个破折号,如下所示:-bash. 这个破折号是什么意思?

Dan*_*eck 16

这意味着它bash被作为登录 shell 调用。


man bash 说:

登录 shell 是参数零的第一个字符是 a-或以--login选项开头的shell 。

当 bash 作为交互式登录 shell 或作为具有--login选项的非交互式 shell 调用时,它首先从文件中读取并执行命令/etc/profile(如果该文件存在)。读取该文件后,它会按该顺序查找~/.bash_profile~/.bash_login、 和~/.profile,并从第一个存在且可读的命令中读取和执行命令。--noprofile当 shell 启动时可以使用该选项来禁止这种行为。

当登录 shell 退出时,bash 从文件中读取并执行命令~/.bash_logout(如果存在)。


您会login -pfps输出中找到,默认情况下会启动登录 shell。

尝试运行login -pflogin -pfl查看差异。man login描述差异:

-l告诉由 login 执行的程序这不是登录会话(按照惯例,登录会话用连字符作为 的第一个字符向程序发出信号argv[0];此选项禁用它),并防止它chdir(2)进入用户的主目录. 默认是添加连字符(这是一个登录会话)。