为什么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