当puppet exec作为用户时,我怎样才能为该用户设置环境?

我注意到,当我在exec上使用user选项时,它不占用指定用户的环境。

 $ sudo -i puppet apply -e "exec { '/usr/bin/env': logoutput => true, user => nobody}" notice: /Stage[main]//Exec[/usr/bin/env]/returns: SHELL=/bin/bash notice: /Stage[main]//Exec[/usr/bin/env]/returns: USER=root notice: /Stage[main]//Exec[/usr/bin/env]/returns: USERNAME=root notice: /Stage[main]//Exec[/usr/bin/env]/returns: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games notice: /Stage[main]//Exec[/usr/bin/env]/returns: MAIL=/var/mail/root notice: /Stage[main]//Exec[/usr/bin/env]/returns: PWD=/root notice: /Stage[main]//Exec[/usr/bin/env]/returns: HOME=/root notice: /Stage[main]//Exec[/usr/bin/env]/returns: LOGNAME=root notice: /Stage[main]//Exec[/usr/bin/env]/returns: executed successfully 

所以当命令以nobody身份运行时, USERHOME等没有按预期设置。 有没有什么办法可以让exec来模拟一个loginshell,这样的环境是按预期设置?

没有办法让exec来模拟一个loginshell。 你总是可以使用su - (如womble所build议的)来生成一个loginshell,但是如果你想要的只是使用Puppet 控制的环境variables,那就使用参数environment

当然,通过su -运行命令su -而不是在清单中指定用户。