我经常运行这些语句:
docker stop $(docker ps -aq); docker rm $(docker ps -aq)
输入此内容的最短方法是什么?我试过
docker {stop, rm} $(docker ps -aq)
但这并没有扩展到两个单独的声明。
答案1
最短的方法是创建一个运行这两个命令的函数,将其放入 shell 的启动文件中,然后使用它。
例如
dstoprm() {
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
}
(如果让函数的名称只有一个字母,则名称会更短。)
为了减少重复(以样板为代价),您可以使用循环:
for action in stop rm; do docker $action $(docker ps -aq); done
或者要创建带有大括号扩展的多个命令,您可以这样做,我并不是认真建议任何人使用这个:
eval 'docker '{stop,rm}' $(docker ps -aq);'
答案2
从...开始:
docker stop $(docker ps -aq); docker rm $(docker ps -aq)
如果我们将 捕获到docker ps -aq
一个变量中,以免计算两次怎么办?它预计具有相同的值:所有容器。如果这种情况发生变化,我们将rm
在与我们调用的容器不同的一组容器上运行stop
:
d=$(docker ps -aq); docker stop $d; docker rm $d
我们已经实现了缩短命令序列并确保它在同一组容器上运行。
答案3
使用-f
参数强制删除。
docker rm -f $(docker ps -aq)
这将通过单个命令停止并删除容器。添加-v
还将删除属于容器的匿名卷。
答案4
使用历史扩展:
docker stop $(docker ps -aq)
!:0 rm !:2*
或者
docker stop $(docker ps -aq)
^stop^rm