Linux 为什么从.bash_配置文件导出的变量而不是别名在非登录shell中工作?
我正在使用Fedora20图形桌面。我发现放在.bash_配置文件中的别名没有效果。然后我发现图形终端不是一个登录shell,因此根本不读取bash_概要文件 现在我感到奇怪的是,export命令在.bash\u配置文件中确实有效。Linux 为什么从.bash_配置文件导出的变量而不是别名在非登录shell中工作?,linux,bash,shell,Linux,Bash,Shell,我正在使用Fedora20图形桌面。我发现放在.bash_配置文件中的别名没有效果。然后我发现图形终端不是一个登录shell,因此根本不读取bash_概要文件 现在我感到奇怪的是,export命令在.bash\u配置文件中确实有效。 我的.bash_配置文件如下所示: #bash_profile export mytest=bash_profileIsRead alias kk=ls 测试结果: $ shopt login_shell login_shell off $ echo $m
我的.bash_配置文件如下所示:
#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...
别名不像环境变量那样被继承。它们不应该放在概要文件中,而是放在.bashrc文件中
基本上,.profile(或.bash_profile)用于继承的内容(例如env变量),rc文件用于必须在非登录shell中重新初始化的内容,例如别名。别名不像环境变量那样继承。它们不应该放在概要文件中,而是放在.bashrc文件中
基本上,.profile(或.bash_profile)用于继承的东西(例如env变量),rc文件用于必须在非登录shell中重新初始化的东西,例如别名。这没有什么不寻常或令人惊讶的 您的
.bash\u配置文件
由您的登录shell在每个会话中运行一次。它不是由会话中稍后运行的其他shell运行的
相比之下,.bashrc
由每个交互式shell实例运行,因此在整个会话中,放置在那里的别名和shell函数等内容都会得到尊重
环境变量只需要设置一次,因为它们由子流程(每个子流程,而不仅仅是shell!)继承。别名不是继承的,因此需要在每个shell中设置别名
请参阅(由irc.freenode.org的#bash频道维护)了解更多信息。这没有什么不寻常或令人惊讶的地方 您的
.bash\u配置文件
由您的登录shell在每个会话中运行一次。它不是由会话中稍后运行的其他shell运行的
相比之下,.bashrc
由每个交互式shell实例运行,因此在整个会话中,放置在那里的别名和shell函数等内容都会得到尊重
环境变量只需要设置一次,因为它们由子流程(每个子流程,而不仅仅是shell!)继承。别名不是继承的,因此需要在每个shell中设置别名
请参阅(由irc.freenode.org的#bash频道维护)了解更多信息。作为旁注,您可以只运行“alias”来列出别名。作为旁注,您可以只运行“alias”来列出别名。别名由子shell继承。它们不是由常规子流程继承的,即使这些常规子流程恰好是shell。子shell毕竟是一个由
fork()
创建的shell,没有后续的exec()
。当然这就是我的意思,但你是对的,我的术语不正确。嗯——别名是由子shell继承的。它们不是由常规子流程继承的,即使这些常规子流程恰好是shell。子shell毕竟是一个由fork()
创建的shell,没有后续的exec()
。当然这就是我的意思,但你说得对,我的术语不正确。