我需要设置 6 个变量,供 Linux 中的多个服务和应用程序使用。到目前为止,我一直在使用环境变量,但发现在多个用户中修改这些变量非常复杂。同时我希望所有用户都能够修改这些全局使用的变量。
到目前为止,我的解决方案是使用 SQLite,但当我想在服务守护进程中设置变量时,似乎有点混乱。
所以问题是,使用可由任何用户更改的全局环境变量是否可能甚至现实,或者我应该考虑使用 SQLite 等数据库解决方案吗?
例如,如果我有一个变量IP_RECIPIENT
,则系统中的所有用户都必须访问和设置该变量。如果更改,所有用户都应该能够读取更改,换句话说,即使更改也必须是全局的,而不仅仅是本地的。
另外,在 Arch Linux ARM 中使用全局环境变量的最佳实践是什么。
答案1
一个简单的解决方案可能是将这些变量设置在一个文件中,使该文件可全局写入并从/etc/bash.bashrc
.这样,这些变量将可供所有用户使用,源文件中的任何更改都将在重新启动后保留,并且也可供任何启动的新 shell 使用。请注意,任何打开的 shell 的值都不会更新。
使用变量定义创建文件并使其可读
printf "%s=%s\n%s=%s\n" "var1='foo'" "var2='bar'" | sudo tee /etc/variables sudo chmod a+w /etc/variables
这将创建一个名为
/etc/variables
以下内容的文件:var1='foo' var2='bar'
编辑
/etc/bash.bashrc
以使其成为该文件的来源sudo printf "\n## Source global variables\n. /etc/variables\n" | sudo tee -a /etc/bash.bashrc
现在,该文件中的任何更改都将反映在任何新的交互式非登录 shell 中。
如果你需要立即继承它,即使是打开的 shell,你可以使用 bash 的PROMPT_COMMAND
变量:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each
primary prompt.
编辑/etc/profile
并添加此行:
PROMPT_COMMAND='. /etc/variables'
完成此操作后,/etc/variables
文件中的任何更改都将立即可供所有 shell 使用,因为将在显示每个提示之前获取该文件。请注意,这仅在您的用户重新登录后才会生效,因为他们需要/etc/profile
再次阅读。