非常に小さな違いを持つ2つのステートメントを実行します。

非常に小さな違いを持つ2つのステートメントを実行します。

私はしばしば次の文を実行します。

docker stop $(docker ps -aq); docker rm $(docker ps -aq)

これを入力する最短の方法は何ですか?頑張った

docker {stop, rm} $(docker ps -aq)

しかし、これは2つの別々のステートメントには拡張されません。

答え1

最も短い方法は、これら2つのコマンドを実行する関数を作成し、それをシェルの起動ファイルに入れて使用することです。

例えば

dstoprm() {
    docker stop $(docker ps -aq)
    docker rm $(docker ps -aq)
}

(関数名を1文字だけで作成すると、名前が短くなります。)


冗長性を減らすには(ボイラープレートコストで)ループを使用できます。

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)

変数を2回計算しないように変数にキャプチャすると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

関連情報