使用 sudo 时,docker 函数不会递归调用自身?

使用 sudo 时,docker 函数不会递归调用自身?

我在 AWS 上的 Ubuntu EC2 实例上,我的 ~/.bashrc 文件中有以下内容:

docker(){
   sudo docker "$@"
}

export -f docker;

因为我信任 docker,所以我基本上使用 sudo 运行所有 docker 命令,这就像我在远程服务器上为 DevOps 体验所做的最好的事情。但是,我不知道它为什么起作用 - 我认为 docker 函数会递归地调用自身,直到某个堆栈爆炸或其他原因。我的猜测是 sudo 只会调用命令而不是 bash 函数?

我尝试这样做,例如:

docker(){
   sudo command docker "$@"
}

export -f docker;

但当我打电话时docker ps我得到了这个:

sudo:命令:找不到命令

有人知道这是怎么回事吗?

答案1

sudo检查PATH(通常是“ secure_path”,甚至不检查您的用户或 root 的完整权限PATH命令因此不适用于内置函数和函数。 是一个内置命令,sudo在您的命令而不是您的函数中command使用该命令。dockerPATH

可以通过创建一个指向command内置函数的包装器脚本(或与您的 docker 函数类似)并将该脚本放入PATH解决此问题,但是您不应该去做。您应该在sudo需要时运行 docker 本身。

相关内容