导出路径的明确且直接的方法

导出路径的明确且直接的方法

假设我想导出一个路径,FOOBAR使更改不仅立即生效且在所有地方都生效,而且永久生效。我的目标是获得一个命令列表,这些命令可以在活动的 shell 会话中手动输入,也可以在 shell 脚本中执行(反过来,脚本可以通过 shell 或 GUI 文件管理器等执行)。

旧流程不需要了解任何变化。

以下是我希望发生的事情FOOBAR

  • 添加新值而不覆盖以前的值。
  • 使更改在当前用户上下文中在整个系统范围内可访问(对于任何程序或 shell 会话,无论它如何启动)。
  • 使更改立即生效(即无需注销等)

我当前的方法是将值作为设置命令导出到.profile.bashrc

echo "export FOOBAR=$FOOBAR:$HOME/example/" >> $HOME/.profile;
echo "export FOOBAR=$FOOBAR:$HOME/example/" >> $HOME/.bashrc;
source $HOME/.profile;

如何才能改进:

  • 它确实有效,但是是否存在会失败的情况以及我该如何避免它们(即,ubuntu 用户是否会进行任何常见的过程或操作等,从而破坏我的导出路径)?
  • 这种方法是否存在安全问题?如何解决?
  • 为了使其尽可能通用(在 ubuntu 家族内),是否还有其他碰撞或负面后果需要我注意?

答案1

  • 应该是~/.profile.bashrc。不能同时是 ,因为/.bashrc是从 加载的~/.profile
  • 非登录 shell 将仅加载~/.bashrc而不会加载/etc/profile~/.bash_profile~/.bash_login因此~/.profile(如果担心这一点则~/.profile不会使用)。
  • 没有 shell 的非登录用户将加载 处设置的配置$BASH_ENV。尚未找到 加载的内容,但~/.bashrc应该是其中之一。

关于你的第一点:

  • 这可能不是一个好主意。而且可能不是它的工作原理。当您重新加载环境变量时,它们将从空开始(假设您的意思是在重新加载它们时它们不应该为空 ;-) )。

关于你的第二点:

  • 如果您希望所有用户都使用/etc/profile/etc/environment/etc/环境是系统范围环境变量的正确位置。此外:这排除了~/.profile

关于你的第三点:

/etc/environment不需要重启。它需要重新登录。并且应该通过重新登录来完成;您可以再次获取它,但这仅适用于您的会话以及获取它之后启动的进程。不适用于已经运行的进程。

尽管如此

. /etc/environment

是一种重新加载所有变量的方法。但同样:这不会重置当前正在运行的进程的变量。只针对当前 shell 和新启动的进程。

关于第4、5、6点:

我唯一能看到的问题是它可能会失控。如果你将它添加到~/.bashrc源变量中 10 次、20 次,你的变量就会被相同的部分淹没。

确实没有,没有。没有安全风险。

相关内容