从/ etc / environment读取新贵的环境以获得服务


17

/etc/environment新贵服务提供定义的环境变量的最佳方法是什么?

我认为仅.在脚本部分中提供它们是行不通的,因为执行脚本sh需要export在每个定义之前附加一个...

Answers:


16

我终于在#upstartIRC频道上得到了答案。在某个时候,新贵将获得适当的PAM支持,因此可以/etc/environment自行读取。在此之前,诀窍是使用su执行命令。su使用PAM,并将建立适当的环境。例:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script

感谢您发布答案,您在同一问题上为我提供了帮助。
Maxim Veksler 2010年

错误:su: must be run from a terminal
Kuf

3

我倾向于使用 eval $(cat /etc/environment | sed 's/^/export /')

它将每一行放入/etc/environment,加上export并对其进行评估:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script

为什么您使用exec而不是仅将导出直接放在脚本块中?
2015年

1

将此添加到您的脚本:

. /etc/environment
export VAR1 VAR2 VAR3

在其中指定所需变量的位置,以代替“ VAR1”样式的占位符。


2
这样,我必须手动使新贵配置和/ etc / environment保持同步,这(我认为)并不比两次定义变量更好……
Nikratio 2010年

我不会使用/etc/environment定义所有需要的变量。保留为静态文件。在我的系统上,我只能找到一些仍在使用它的脚本。创建一个名为like之类的文件/etc/environment.local,然后将变量放入其中导出,然后获取文件。然后,您只需维护一个文件。
暂停,直到另行通知。

/ etc / environment由pam_env.so(而非任何脚本)读取,因此可用于任何登录。不幸的是,仅由新贵启动的程序无法通过该文件访问该文件。
Nikratio'4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.