gpt4 book ai didi

bash - 使用 sudo 找不到命令,但无需使用 sudo 即可工作

转载 作者:行者123 更新时间:2023-12-04 11:50:45 25 4
gpt4 key购买 nike

我已经安装了一个二进制文件 dep在我的 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结果 command not found ?

最佳答案

默认情况下,sudo不会将用户的原始 PATH 传递给 super 用户进程,它会获取系统上定义的一些默认 PATH。如果您运行“sudo env”以查看 sudo 进程的整个环境,则很容易看到:

$ sudo 环境 |路径
PATH=/sbin:/bin:/usr/sbin:/usr/bin

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

要让您的 PATH 在 sudo 中传递,您可以执行以下操作:
$ sudo PATH=$PATH sh -c env |路径
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/谷歌云 SDK/bin

基本上,我传递给 sudo 运行的命令首先将 PATH 设置为 $PATH(请记住 $PATH 由 shell 扩展,在 sudo 运行之前,我想要的真实路径也是如此!)并运行一个 shell (它将使用这个新的 PAT) 到“env”。如您所见, env 确实找到了正确的路径。你可以用你想运行的任何程序替换“env”。

关于bash - 使用 sudo 找不到命令,但无需使用 sudo 即可工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com