![使用 sudo 时,docker 函数不会递归调用自身?](https://linux22.com/image/158690/%E4%BD%BF%E7%94%A8%20sudo%20%E6%97%B6%EF%BC%8Cdocker%20%E5%87%BD%E6%95%B0%E4%B8%8D%E4%BC%9A%E9%80%92%E5%BD%92%E8%B0%83%E7%94%A8%E8%87%AA%E8%BA%AB%EF%BC%9F.png)
我在 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
使用该命令。docker
PATH
你可以通过创建一个指向command
内置函数的包装器脚本(或与您的 docker 函数类似)并将该脚本放入PATH
解决此问题,但是您不应该去做。您应该在sudo
需要时运行 docker 本身。