找不到带有sudo的命令,但是没有sudo的命令就起作用

时间:2019-01-03 16:28:33

标签: bash command sudo

我已经在dep的{​​{1}}中安装了二进制文件GOPATH

运行/home/me/go/bin成功执行了二进制文件,但是运行dep会导致sudo dep

sudo: dep: command not found

这里的路径不是问题:

$ dep
Dep is a tool for managing dependencies for Go projects

Usage: "dep [command]"
...

Use "dep help [command]" for more information about a command.

$ sudo dep
sudo: dep: command not found

路径与$ echo $PATH /usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin:/home/me/.local/bin:/home/me/bin:/home/me/.local/bin:/home/me/bin:/home/me/go/bin:/home/me/.local/bin:/home/me/bin:/home/me/go/bin $ sudo echo $PATH /usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin:/home/me/.local/bin:/home/me/bin:/home/me/.local/bin:/home/me/bin:/home/me/go/bin:/home/me/.local/bin:/home/me/bin:/home/me/go/bin me相同,都引用密钥目录superuser

为什么在没有/home/me/go/bin的情况下运行dep却在有sudo的情况下成功运行sudo呢?

1 个答案:

答案 0 :(得分:2)

默认情况下,sudo不会将用户的原始PATH传递给超级用户进程,并且会获得系统上定义的一些默认PATH。很容易看出您是否运行“ sudo env”来查看sudo进程的整个环境:

$ sudo env | grep PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin

您尝试的命令“ sudo echo $ PATH”不检查任何内容,因为外壳程序首先将$ PATH转换为该变量具有的任何值-然后才调用命令(sudo),因此它只打印您的外部环境的价值:-)

要使您的PATH在sudo中传递,您可以执行以下操作:

$ sudo PATH=$PATH sh -c env | grep PATH
PATH=/usr/share/Modules/bin:/usr/lib64/ccache:/home/nyh/gaps:/home/nyh/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/sbin:/sbin:/usr/games:/usr/local/android-sdk-linux/tools:/usr/local/android-sdk-linux/platform-tools:/home/nyh/google-cloud-sdk/bin

基本上,我为sudo运行而传递的命令是通过将PATH设置为$ PATH开始的(记住$ PATH是在sudo运行之前由外壳扩展的,所以我想要的真实路径是!)并运行一个shell(它将使用此新的PAT)来“ env”。如您所见,env确实获得了正确的路径。您可以用任何要运行的程序替换“ env”。