我看到一些奇怪的行为,这让我想知道运行这两个命令中的任何一个时的环境与以su username
用户身份逐个使用并运行命令时的环境有何不同。
su username -c "cd /opt/scripts/ ; ./script.sh"
sudo -u username bash -c "cd /opt/scripts/ ; ./script.sh"
我在 CentOS 6 Linux 服务器上以 root 身份从 init 脚本运行这些命令。
我应该进一步指出问题是运行 java 程序的 script.sh 文件使用具有相对路径(相对于 script.sh 所在位置)的类路径指令(即 ./classes/com:./lib/common )。如果我 su 用户名,然后 cd 到 /opt/scripts 并运行 ./script.sh 它可以工作,但是脚本中的 su 和 sudo 命令似乎都存在找不到类的问题,即使我 cd在运行脚本之前到该目录。为什么会这样呢?和使用su成为用户并逐一运行命令有什么不同?
答案1
尝试比较环境:
$ sudo -s
# diff <(su username -c env) <(sudo -u username bash -c env)
例如, 的环境由中的默认sudo
控制。env_*
/etc/sudoers