Ubuntu下sudo ignite scaffold chain提示Go未在PATH中找到求助
解决sudo执行ignite时找不到go命令的问题
问题核心是sudo默认会重置环境变量,它不会继承普通用户配置的PATH,所以即使当前用户能正常调用go,sudo执行时的PATH里没有Go相关路径,就会触发找不到命令的错误。
下面是几种可行的解决办法:
临时快速解决:用
-E参数让sudo保留当前用户环境变量
直接执行以下命令即可:sudo -E ignite scaffold chain github.com/alice/checkers-E参数会让sudo完整继承你当前用户的环境变量,包括已经配置好的Go相关PATH。永久解决:修改sudo的secure_path配置
sudo有个secure_path参数,定义了它执行命令时的默认PATH。你需要把Go的路径添加进去:- 执行
sudo visudo打开sudoers配置文件(必须用visudo,它会自动检查语法,防止配置错误导致sudo失效) - 找到类似如下的行:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - 把Go的可执行文件路径(比如
/usr/local/go/bin)和你的GOPATH的bin目录(比如/home/你的用户名/go/bin,必须写绝对路径,不能用$HOME)添加到后面,用冒号分隔,修改后示例:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/你的用户名/go/bin" - 保存退出(visudo中按
Ctrl+O保存,Ctrl+X退出),之后再用sudo执行ignite就不会再报错。
- 执行
另一种临时方案:手动给sudo指定PATH
先执行which go得到go的绝对路径(比如/usr/local/go/bin/go),然后执行命令时把当前用户的PATH传递给sudo:sudo PATH=$PATH ignite scaffold chain github.com/alice/checkers这种方式仅单次生效,每次执行都需要额外配置PATH,不如前两种方案方便。
内容的提问来源于stack exchange,提问作者Aryaman Sinha
相关产品推荐
相关产品推荐

