
このコマンドがあります:
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
?何もない入力がない場合はどうなりますか?
答え1
探している-r
オプションは非標準オプションですが、システムに実装されている可能性があります (xargs
マニュアルを確認してください)。
GNUxargs
マニュアルより:
-r
、--no-run-if-empty
標準入力に空白以外の文字が含まれていない場合は、コマンドを実行しません。通常、入力がない場合でもコマンドは 1 回実行されます。このオプションは GNU 拡張機能です。
OpenBSD システムのマニュアルより:
-r
引数がない場合はコマンドを実行しないでください。通常、引数がない場合でもコマンドは少なくとも 1 回は実行されます。
FreeBSD と macOS では、これがデフォルトの動作です。FreeBSD には-r
GNU との互換性のためのオプションがありますxargs
が、macOS にはありません。
xargs
AIX と Solaris にはオプションがなく-r
、AIX でのデフォルトの動作は不明です (AIX システムにアクセスできません)。Solaris では、デフォルトでユーティリティが少なくとも 1 回実行されます。
-r
フラグのないシステムxargs
(Solarisのようにユーティリティを少なくとも1回実行することがデフォルトの動作であるシステム)での1つの移植可能な回避策は、
something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh
(またはそれに似たもの。末尾がsh
必須であることに注意してください) はutility
で実行するユーティリティでありxargs
、 はsomething
いくつかの引数を生成します。
短いシェル スクリプトは、[ "$#" -gt 0 ] && utility "$@"
引数が与えられたかどうかをテストし、与えられた場合はその引数を使用してユーティリティを実行します。