我知道我可以设置一个变量,“导出”该变量并在我的 .bash_rc 文件中放置一个别名语句。
所以:
当我设置一个变量时,它只会持续该会话,对其他会话不可见,对吗?
然后当我导出它时,它对其他 shell 会话可见(但这只对其他“新”会话可见吗?
现有会话可以重新加载或通过其他方式获取它吗?)
最关键的是,导出是否会在重启后“保留”?
还是当 .bashrc 文件进入时,变量会“真正”永久设置?
最后,Ubuntu 和 Mac 在这方面有什么已知差异吗?
答案1
你对 的说法是正确的.bashrc
。在初次启动时,操作系统除了在 、 、 等中读取的内容外,对环境变量一无所知。.profilerc
除非.bashrc
放置.inputrc
在export
其中一个文件中,否则 ed 中的任何内容都只会持续当前会话。
如果将值添加到其中一个文件并且希望它立即生效,请运行:
source .bashrc
或者:
. /etc/bashrc
ETC...
编辑(添加来自@ThomasAndrews 的评论):
但是,这只会更改您执行它的当前会话(终端窗口)的环境变量。理解的关键是要意识到环境变量是在子进程启动时从父进程继承到子进程的。
答案2
首先,您需要确定您使用的是什么 shell。请执行以下操作:
$ echo $0
-bash
现在检查你的 shell 的手册页:
$ man bash
<man pages>
向下滚动到刚刚加载的手册页底部,然后查找 FILES 部分。请注意,不同类型的 shell 有不同的初始化文件。文件和位置取决于您使用的 shell。
答案3
您可以将出口声明添加到您的个人资料中(http://www.hot.ee/airm/linux/BLFS6.3/postlfs/profile.html)
就像是:
echo 'export PATH=/usr/local/my/bin:$PATH' >> ~/.profile
答案4
在 *nix 中,环境变量是针对每个进程的。子进程在启动时会继承其父进程的环境变量值。
因此,如果您从 shell 导出一个变量,那么该环境变量只会影响该 shell 进程和从该 shell 启动的任何进程。
这与 Windows 上的环境变量不同,在 Windows 上,从控制面板设置时,环境变量本质上是全局的和永久的。(根据以下评论进行编辑。)
通常,如果您想为可能启动的每个进程设置一个环境变量,则可以将其放在登录脚本中,例如 .bash_profile(如果 bash 是您的 shell)。
(.bashrc 文件会随每个 shell 一起加载,您可能想要也可能不想要 - 如果您手动设置另一个值,然后运行“bash”,您是否希望 .bashrc 覆盖新值?.bash_profile 会随登录一起调用。任何一个都可以是放置环境变量的正确位置。)