执行两条差异很小的语句

执行两条差异很小的语句

我经常运行这些语句:

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

相关内容