Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么从.bash_配置文件导出的变量而不是别名在非登录shell中工作?_Linux_Bash_Shell - Fatal编程技术网

Linux 为什么从.bash_配置文件导出的变量而不是别名在非登录shell中工作?

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

我正在使用Fedora20图形桌面。我发现放在.bash_配置文件中的别名没有效果。然后我发现图形终端不是一个登录shell,因此根本不读取bash_概要文件

现在我感到奇怪的是,export命令在.bash\u配置文件中确实有效。
我的.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()
。当然这就是我的意思,但你说得对,我的术语不正确。