私はこのコマンドを持っています:
docker volume ls -qf dangling=true | xargs docker volume rm
私はこれを手に入れます:
"docker volume rm" requires at least 1 argument. See 'docker volume rm --help'. Usage: docker volume rm [OPTIONS] VOLUME [VOLUME...]
xargs
への入力がなかったためだと思います(docker
コマンドによって返された一致するボリュームがなかったため)。入力を受け取らない場合、xargs
にnothingを実行するように指示するにはどうすればよいですか?
-r
オプションを探しています。これは、しばしば実装される非標準オプションです(xargs
マニュアルを確認してください)。
GNU xargs
マニュアルから:
-r
、--no-run-if-empty
標準入力に非ブランクが含まれていない場合は、コマンドを実行しないでください。通常、コマンドは入力がない場合でも1回実行されます。このオプションはGNU拡張です。
OpenBSDシステムのマニュアルから:
-r
引数がない場合は、コマンドを実行しないでください。通常、引数がない場合でも、コマンドは少なくとも1回は実行されます。
FreeBSDとmacOSでは、これがデフォルトの動作です。 AIXおよびSolarisのxargs
には-r
オプションがなく、デフォルトの動作は不明です(AIXまたはSolarisシステムにアクセスできません)。
xargs
に-r
フラグがないシステムでの回避策の1つ(および、ユーティリティを東で1回実行することがデフォルトの動作)は、
something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh
(またはそのようなもの。末尾のsh
が必要であることに注意してください)ここで、utility
はxargs
で実行するユーティリティであり、something
はいくつかの引数を生成します。
短いシェルスクリプト[ "$#" -gt 0 ] && utility "$@"
は、引数が指定されているかどうかをテストし、指定されている場合は、それらの引数を使用してユーティリティを実行します。