如何告诉 start-stop-daemon 根据 --chuid 参数更新 $HOME 和 $USER

如何告诉 start-stop-daemon 根据 --chuid 参数更新 $HOME 和 $USER

我正在尝试运行一个使用$HOME$用户环境变量。我可以在服务本身中设置它们,但这只是一个临时解决方案。

假设我有一个test.sh包含以下内容的脚本:

echo $USER

然后我运行它来start-stop-daemon查看结果:

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

似乎它没有更新环境,也许应该将其报告为一个错误?

我发现了一个令人讨厌的黑客解决方案,它只在我的这个简单用例上起作用(原因不明):

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

我确信其他人也偶然发现了这一点,我对干净的解决方案很感兴趣。

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

答案1

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

   -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 ...

另一种方法是运行以下脚本sudo

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

sudo将自动设置$USER,选项也会-H告诉它设置$HOME。我用自己的程序运行了这两个程序test.sh,打印了这些变量的值,并且都根据需要更新了它们。我偏爱第一个,因为它不会添加另一个程序,但这只是我的看法。

答案2

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

#!/bin/bash

在我的系统上,shDash 没有设置$USER但会从父级环境中继承它。

相关内容