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