以编程方式更新 bash_profile 导出

以编程方式更新 bash_profile 导出

我有一个程序可以在文件中生成一些临时安全令牌。然后我必须手动从此文件复制令牌并将其粘贴到我的 bash 配置文件中才能继续操作。令牌每 30 分钟过期一次,因此我必须重新生成它们并每 30 分钟执行一次手动更新 bash_profile 的步骤。

我想知道当其他系统文件发生变化时,是否可以以编程方式从 mac 终端更新和重新加载 .bash_profile。

例如,我可以在终端中运行此命令,它会将一行附加到我的 .bash_profile 中:

echo 'export Token=abc' >>~/.bash_profile

我如何更新 Token 的值美国广播公司坐标在我的终端?

注意:这不是代码/脚本请求,只是寻找一些方向和想法来节省我日常工作流程的时间。

答案1

直接在.bash_profile(或.bashrc或任何类似文件)中执行此操作需要管理相关的离开时的部分文件其他零件完好无损。这个问题有一个简单的通用解决方案:

  1. 不要.bash_profile一遍又一遍地改变。
  2. 创建~/.my_tokens您想要更改、附加甚至完全重写的内容。
  3. 从 中获取新文件.bash_profile。这是您在 中直接执行的唯一 (且一次性) 更改.bash_profile

    . ~/.my_tokens
    

现在由你来决定如何管理新文件。如果文件只包含几个标记,最简单的更新方法可能是覆写完全。

如果发生变化,可能只需.my_tokens再次查找来源就足够了,而不需要全部查找.bash_profile

您可以将许多这样的文件收集到一个目录中并将它们全部作为源:

# ~/my_extensions is a directory with no subdirectories
for f in ~/my_extensions/*; do
   . "$f"
done

一般的想法是将“动态”标记与半静态标记分开.bash_profile


在每个现存的每 30 分钟左右进行一次 Bash 会话至少看起来不太雅致。考虑按需读取它们(.bash_profile根本不是通过)。假设foo某个外部命令需要这些标记。创建一个包装函数:

foo() ( . ~/my_tokens; command foo "$@" )

现在如果你调用foo,该函数将加载当前的令牌并调用实际foo实用程序。请注意,整个函数主体都在子 shell 中,因此当前 shell 无法使用这些令牌(除非您单独获取了该文件)。要在当前 shell 中获取令牌,请像这样定义函数:

foo() { . ~/my_tokens; command foo "$@"; }

注意:对于全局令牌,您应该使用任何用户目录之外的某些路径;Linux 示例:/run/foo_tokens


可以使用 来对~/my_tokens(或或任何其他文件)进行原子更新。您可以创建一个临时文件/run/foo_tokensmv在同一个文件系统上,填充数据,最后一步覆盖旧版本:

mv ~/temp_tokens ~/my_tokens

这保证了任何访问~/my_tokens都可以获得完整的旧版本或新版本。如果您就地更新了文件,则可能会将其读取为不完整或部分更新;您肯定不希望出现这种情况。

相关内容