前のコマンドに1つ以上の結果がある場合にのみ、パイプラインで次のコマンドを実行する方法は?

前のコマンドに1つ以上の結果がある場合にのみ、パイプラインで次のコマンドを実行する方法は?

だから、次のコマンドがあります。

$(docker container ls -a -q) | docker container stop

すべてのドッカーコンテナを停止し、素晴らしい作品!すべてのコンテナを消去しない限り:

"docker container stop" requires at least 1 argument.
See 'docker container stop --help'.

Usage:  docker container stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

1行のコマンドを使用してこのエラーメッセージが表示されるのを防ぐ方法はありますか?

注:私の元のコマンドは実際にdocker container stop $(docker container ls -a -q)同じエラーメッセージを表示しましたが、あるコマンドを別のコマンドにパイピング/チェーン接続することで、私の問題を説明する方が簡単になると思いました。両方のコマンドに対する答えはうまくいきますが、使用することを好みます。docker container stop $(docker container ls -a -q)

ベストアンサー1

DockerのN-ary停止操作は、コンテナがないと愚かなので、引数を1つdocker stop containerだけ使用する単項操作として扱い、その単項操作に固有の用語のリストを割り当てることができます。もちろん、ロジックでは、次のように空の用語シーケンスを処理できます。

for x in $(docker container ls -a -q); do docker container stop $x; done

結果が生成されない場合、$(docker ...)ループは実行されません。

おすすめ記事