将 bin 目录添加到我的路径中,无法使用“sudo 命令”执行其中的命令

将 bin 目录添加到我的路径中,无法使用“sudo 命令”执行其中的命令

bin在我的主文件夹中创建了一个目录,用于放置所有脚本。然后在我的 .bashrc 中添加了以下内容:

export PATH=$PATH:/home/myusername/bin

这样我就可以从任何地方访问我放在其中的文件。但有些脚本需要以 root 身份执行。所以我想,我可以将我的 .bashrc 符号链接为 root,(如 /root/.bashrc 指向 /home/myusername/.bashrc,不知道这是否明智),所以当我需要以 root 身份运行脚本时我只能这样做:

sudo program_that_requires_root

但后来我得到:

sudo: program_that_requires_root: command not found

如果我以 root 身份登录并执行该程序,它就可以正常工作。那么完成我想要的事情的正确方法是什么?

答案1

您必须确保 sudoers 文件中存在这两行。

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$

请参阅这些 URL 了解更多详细信息:

答案2

sudo在大多数配置中,将环境变量重置PATH为内置或管理员提供的默认值。所以你不能只输入sudo myscript

您可以编写一个包装函数:

sudo () {
  local cmd
  case $1 in
    -*) :;; # there are options, change nothing
    */*) :;; # explicit path, change nothing
    *) # a command name, look it up in our $PATH
      cmd=$(type -p -- "$1")
      if [[ -n $cmd ]]; then shift; set -- "$c" "$@"; fi;;
  esac
  command sudo "$@"
}

(这适用于 bash;更改type -Ptype -pksh 或 zsh。)

答案3

默认情况下 sudo 会重置环境。您是否尝试过将路径添加到root的.bashrc?或者使用 -E 调用 sudo (仅当设置了 sudoers 中的 setenv 或相应命令设置了 SETENV 标记时才有效)。

相关内容