为什么导出的变量而非.bash_profile的别名在非登录shell中工作?

时间:2014-05-16 04:43:54

标签: linux bash shell

我正在使用Fedora 20图形桌面。我发现放在.bash_profile中的别名没有效果。然后我发现图形终端不是登录shell,因此根本不读取bash_profile。

现在我很奇怪 export 命令在.bash_profile中有效。
我的.bash_profile如下:

#bash_profile    
export mytest=bash_profileIsRead
alias kk=ls

测试结果:

$ shopt login_shell
login_shell off
$ echo $mytest
bash_profileIsRead
$ kk
bash: kk: command not found...

2 个答案:

答案 0 :(得分:3)

别名不像环境变量那样继承。它们不应放在配置文件中,而应放在.bashrc文件中。

基本上,.profile(或.bash_profile)用于继承的内容(例如env变量),而rc文件用于必须在非登录shell中重新初始化的内容,例如别名。

答案 1 :(得分:3)

这没有什么不寻常或令人惊讶的。

您的.bash_profile每个会话由您的登录shell运行一次。 由会话中稍后运行的其他shell运行。

相比之下,

.bashrc由每个交互式shell实例运行,因此放置在那里的别名和shell函数将在整个会话期间得到尊重。

环境变量只需要设置一次,因为它们是由子进程继承的(每个子进程,而不仅仅是shell!)。别名不是继承的,因此需要在每个shell中设置它们。

有关详情,请参阅the DotFiles page on the wooledge.org wiki(由irc.freenode.org的#bash频道维护)。