linux中,解决使用sudo启动go程序时,自定义path路径不生效的问题

问题

当我们在非 root用户下,需要使用 root 权限的时候,通常在前面加 sudo 就可以了

但是,今天遇到了一个小问题,就是我明明已经配置了 gobin 目录在 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 .
posted @ 2024-08-28 11:39  厚礼蝎  阅读(33)  评论(0编辑  收藏  举报