如何通知start-stop-daemon将$ HOME和$ USER更新为–chuid参数

我试图运行一个使用$ HOME$ USER环境variables的服务。 我可以把它们设置成服务本身,但这只是一个临时的解决办法。

比方说,我有一个脚本test.sh与以下内容:

 echo $USER 

我用start-stop-daemon运行它来查看我的结果:

 $ start-stop-daemon --start --exec `pwd`/test.sh --user guest --group guest --chuid -guest root 

似乎不更新环境,也许应该被报告为一个错误?

我发现了一个令人讨厌的hacky解决scheme,它只对我的这个简单的用例起作用(原因不明):

 $ start-stop-daemon --exec /usr/bin/sudo --start -- -u guest -i 'echo $USER' guest 

我确定有人偶然发现了这一点,我对清洁解决scheme感兴趣。

 $ start-stop-daemon --version start-stop-daemon 1.13.11+gentoo 

这可能是预期的行为。 手册页面显示了start-stop-daemon--env选项:

  -e|--env env-name Set an environment variable whose name and value is env-name before starting executable. Example: -e HOME="/home/user" exports an environment variable whose name is HOME with value "/home/user". Note, only one --env option is suppoted, use /usr/bin/env if you need more. 

在这个例子中,作者使用了$HOME ,我认为它通常不会设置它。 我没有看到任何其他更新你开始的过程的环境的选项。

尝试像这样运行start-stop-daemon

 USER=guest HOME=~guest start-stop-daemon --start --exec /path/to/prog ... 

另一种select是在sudo下运行脚本:

 start-stop-daemon --start --exec /usr/bin/sudo -- -H -u guest /path/to/prog 

sudo会自动设置$USER ,而-H选项会告诉它设置$HOME 。 我用自己的test.sh运行这两个,打印这些variables的值,并根据需要更新它们。 我偏向于第一个,因为它不会增加另一个节目,但这只是我。

对于脚本而言,shell可能与运行start-stop-daemon的环境不同。 尝试使用shebang行在脚本中指定shell:

 #!/bin/bash 

在我的系统上, sh是Dash,它不会设置$USER但会从父级环境inheritance它。