如何从新贵工作的文件中加载环境变量?

Gus*_*uss 3 upstart environment-variables

我正在为使用环境变量配置的服务编写新贵工作,其中很多(> 20)。

到目前为止,处理这种情况的方式通常是从使用 Ruby 的 Dotenv gem 加载配置文件的 Ruby 启动器运行它。我想用一个简单的 upstart 文件替换启动器(以减少我需要维护的自定义代码量),但我遇到了如何设置服务所需的所有环境变量的问题。

我最初的看法是:

script
   . /etc/default/service-conf
   /usr/local/bin/service
end script
Run Code Online (Sandbox Code Playgroud)

但只是获取文件并不会导出变量,而且我不想export在脚本中添加很多命令,主要是因为它将完全无法维护且无法读取。

Gus*_*uss 7

有几种方法可以解决导出源文件中定义的变量的问题,包括各种技巧(例如,这个答案中记录的奇怪的export $(cat file | xargs)技巧),但最简单的方法是启用“标记变量以供导出”标志在获取环境文件之前,您的 shell。

这是此功能的 bash 文档 - 在-a.

虽然scriptupstart 中的标签不使用 Bash 作为 shell - 它使用 Ubuntu 中默认的 POSIX shell 实现,称为dash,它也支持此功能,称为allexport. 所以新贵脚本部分应该是:

script
  set -a
  . /etc/default/service-conf
  /usr/local/bin/service
end script
Run Code Online (Sandbox Code Playgroud)