我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 -P
为type -p
ksh 或 zsh。)
答案3
默认情况下 sudo 会重置环境。您是否尝试过将路径添加到root的.bashrc?或者使用 -E 调用 sudo (仅当设置了 sudoers 中的 setenv 或相应命令设置了 SETENV 标记时才有效)。