sudo执行命令时提示"command not found"

场景

当前用户是一个 sudoer,用 sudo 执行了一个命令,比如:sudo java -version,系统提示”command not found”。

原因

系统安装的 sudo 在编译时缺省使用了 —with-secure-path 参数,导致当前用户的 $PATH 环境变量在 sudo 时被覆盖掉了。

解决

方法一:简单的临时解决办法

编辑 ~/.bashrc,添加下面这行:

1
alias sudo="sudo env PATH=$PATH"

这个办法是在执行 sudo 时套用上当前的 $PATH 的值来达到目的。

方法二:另一个临时解决办法

编辑 etc/sudoers,添加下面这行:

1
Defaults secure_path="/bin:/usr/bin:/usr/local/bin:…"

方法三:根本解决办法

重新编译安装 sudo,不带 -–with-secure-path 参数。