使用 $su 时 PATH 出现问题

使用 $su 时 PATH 出现问题

好的,我在 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'

相关内容