好的,我在 PATH 和在 Ubuntu 下以另一个用户身份运行进程时遇到了一点问题。
首先,我们检查垃圾箱在哪里:
root@host:~# whereis start-stop-daemon
start-stop-daemon: /sbin/start-stop-daemon /usr/share/man/man8/start-stop-daemon.8.gz
好的,/sbin/start-stop-daemon 所以它在/sbin中。然后我们以想要运行应用程序的用户身份检查路径:
root@host:~# su wojtek -c "echo $PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root@host:~# su -l wojtek -c "echo $PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
在两种情况下,PATH 完全相同(即在正常 su 和完整登录下),但是在我们实际想要运行命令时存在区别:
root@host:~# su wojtek -c "start-stop-daemon"
bash: start-stop-daemon: command not found
root@host:~# su -l wojtek -c "start-stop-daemon"
start-stop-daemon: need one of --start or --stop or --status
Try 'start-stop-daemon --help' for more information.
有人能试着解释一下差异来自哪里吗?因为对我来说不应该有任何错误,因为 PATH 没有差异,因此给定用户的 $start-stop-daemon 无论如何都应该有效...
另外 - 如果我切换到不同的用户($su 用户和 $su - 用户),那么在两种情况下都使用 $start-stop-daemon ...
我错过了什么?
答案1
两个语句中的路径似乎相同,因为 $PATH 在传递给苏命令。
尝试使用单引号,我想你会感到惊喜:
su wojtek -c 'echo $PATH'
对比
su -l wojtek -c 'echo $PATH'