我有一个程序可以在文件中生成一些临时安全令牌。然后我必须手动从此文件复制令牌并将其粘贴到我的 bash 配置文件中才能继续操作。令牌每 30 分钟过期一次,因此我必须重新生成它们并每 30 分钟执行一次手动更新 bash_profile 的步骤。
我想知道当其他系统文件发生变化时,是否可以以编程方式从 mac 终端更新和重新加载 .bash_profile。
例如,我可以在终端中运行此命令,它会将一行附加到我的 .bash_profile 中:
echo 'export Token=abc' >>~/.bash_profile
我如何更新 Token 的值美国广播公司到坐标在我的终端?
注意:这不是代码/脚本请求,只是寻找一些方向和想法来节省我日常工作流程的时间。
答案1
直接在.bash_profile
(或.bashrc
或任何类似文件)中执行此操作需要管理相关的离开时的部分文件其他零件完好无损。这个问题有一个简单的通用解决方案:
- 不要
.bash_profile
一遍又一遍地改变。 - 创建
~/.my_tokens
您想要更改、附加甚至完全重写的内容。 从 中获取新文件
.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_tokens
mv
在同一个文件系统上,填充数据,最后一步覆盖旧版本:
mv ~/temp_tokens ~/my_tokens
这保证了任何访问~/my_tokens
都可以获得完整的旧版本或新版本。如果您就地更新了文件,则可能会将其读取为不完整或部分更新;您肯定不希望出现这种情况。