设置和读取变量的最佳方式

设置和读取变量的最佳方式

我需要设置 6 个变量,供 Linux 中的多个服务和应用程序使用。到目前为止,我一直在使用环境变量,但发现在多个用户中修改这些变量非常复杂。同时我希望所有用户都能够修改这些全局使用的变量。

到目前为止,我的解决方案是使用 SQLite,但当我想在服务守护进程中设置变量时,似乎有点混乱。

所以问题是,使用可由任何用户更改的全局环境变量是否可能甚至现实,或者我应该考虑使用 SQLite 等数据库解决方案吗?

例如,如果我有一个变量IP_RECIPIENT,则系统中的所有用户都必须访问和设置该变量。如果更改,所有用户都应该能够读取更改,换句话说,即使更改也必须是全局的,而不仅仅是本地的。

另外,在 Arch Linux ARM 中使用全局环境变量的最佳实践是什么。

答案1

一个简单的解决方案可能是将这些变量设置在一个文件中,使该文件可全局写入并从/etc/bash.bashrc.这样,这些变量将可供所有用户使用,源文件中的任何更改都将在重新启动后保留,并且也可供任何启动的新 shell 使用。请注意,任何打开的 shell 的值都不会更新。

  1. 使用变量定义创建文件并使其可读

    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'
    
  2. 编辑/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再次阅读。

相关内容