bash前面的破折号(-)


14

如果我在OS X(10.6.4)终端中检查bash外壳(例如通过键入)echo $0,则外壳前面会出现一个破折号,如下所示:-bash。这个破折号是什么意思?

Answers:


14

这意味着将bash其作为登录外壳程序调用。


man bash 说:

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

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

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


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

尝试运行login -pflogin -pfl看看有什么区别。man login描述区别:

-l告诉登录执行的程序这不是登录会话(按照惯例,登录会话以连字符作为第一个字符argv[0];该选项将其禁用),并阻止该chdir(2)程序进入用户的主目录。默认为添加连字符(这是登录会话)。


很好的答案,感谢您的解释和man引用
marshall.ward,

1
我正在使用ubuntu,并且看到了以下不同的行为echo $0:如果键入echo $0被调用的终端ctrl + alt + f1,则结果为-bash; 但是如果我在调用的termianl中键入它ctrl + alt + t,则结果为bash(无前划线)。你能解释为什么吗?
Frozen Flame》

@ frozen-flame一个是登录外壳,另一个不是。请注意,OS X终端和Linux终端在这方面有不同的行为。
丹尼尔·贝克

@DanielBeck不能证明另一个不是登录shell。使用--login参数启动bash时,它不会更改其argv[0],但会充当登录​​shell。
Ruslan

@Ruslan当然,理论上它仍然可以是登录shell。但事实并非如此。(至少我会非常惊讶,如果它是。)
丹尼尔·贝克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.