sudo -i 行为不符合预期

sudo -i 行为不符合预期

为什么sudo -i命令没有在我的全新 Ubuntu 12.04.1 LTS 上设置 TERM、PATH、HOME、SHELL、LOGNAME、USER 和 USERNAME,如手动的

# sudo -u johnny -i echo $HOME && echo $USER
/root
root

使用-H也不会设置 $HOME。而且我的用户确实存在并且有 home :

# cat /etc/passwd
[..]
johnny:x:1000:1000::/home/johnny:/bin/bash

更新 :为什么我会遇到这个问题?因为我正在尝试为多个 unicorn 应用程序创建一个 ubuntu upstart 作业,并且我正在使用 RVM + Bundle 的用户安装:如果没有正确评估 $HOME,RVM 就找不到 ~/.rvm。

答案1

这不是一个真正的答案,但是你尝试过这个吗:

$ cat /home/foo/test.sh
#!/bin/sh
echo $USER
echo $HOME

$ chmod +x /home/foo/test.sh
$ sudo -u johnny -i "/home/foo/test.sh"
johnny
/home/johnny

运行时:

$ sudo -u johnny -i echo $USER && echo $HOME
root
/root

看起来您$USER正在命令行中被评估,而该命令是以初始用户身份执行的。

答案2

在您的示例中,变量($HOME,, ...)在执行命令$USER之前被解释。sudo

相反,这应该按您预期的方式工作:

sudo -u johnny -i env | grep HOME

相关内容