linux中,解决使用sudo启动go程序时,自定义path路径不生效的问题
问题
当我们在非 root用户下,需要使用 root 权限的时候,通常在前面加 sudo 就可以了
但是,今天遇到了一个小问题,就是我明明已经配置了 go 的 bin 目录在 PATH 变量中,还是配置在 /etc/profile 中,在 root 用户下,是可以执行 go 命令的
按理说,用 sudo go 应该也是没问题的
但是,我发现,当我执行 sudo go 的时候,会提示未找到go命令,这就离谱了
那是什么问题呢
原来在执行 sudo 命令的时候,是不加载 /etc/profile 以及各个用户的 ~/.profile 文件的,所以自然也就不会有修改后的 PATH 路径了
解决办法
方法1. 修改 /etc/sudoers 文件
这种方式的优点就是,修改后,原来怎么使用sudo,现在还怎么使用
缺点就是,会污染其他环境,当然,我上面这种场景,就不存在污染的问题,因为本身就配置在全局的配置文件 /etc/profile 中。
$ visudo
# 只要将自己希望添加的路径,加到这个变量的后面就好了
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/go/bin:/usr/local/go/go/bin"
方法2. 加参数 -i
优点就是,只影响当前环境
使用 -i 选项,这将启动一个新的shell并加载 /etc/profile 以及用户的 ~/.bashrc 和 ~/.bash_profile 文件
所以缺点是,会重新开一个shell,有些情境下并不想这样,而且总要加 -i,会略显麻烦
sudo -i go run .
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/18384329

浙公网安备 33010602011771号