私は次のコマンドを持っています:
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
標準入力に空白以外の項目がない場合は、コマンドを実行しないでください。通常、コマンドは入力がなくても一度だけ実行されます。このオプションはGNU拡張です。
OpenBSDシステムマニュアルから:
-r
パラメーターなしでこのコマンドを実行しないでください。通常、コマンドは引数なしで複数回実行されます。
FreeBSDとmacOSでは、これがデフォルトの動作です。 FreeBSDには-r
オプションのGNU互換性がありますが、xargs
macOSにはありません。
xargs
AIXとSolarisにはオプションがなく、-r
AIXのデフォルトの動作が何であるかわかりません(AIXシステムにアクセスできません)。デフォルトでは、Solarisはこのユーティリティを少なくとも1回実行します。
-r
フラグを持たないシステムxargs
(そしてユーティリティを一度実行することはSolarisのような東洋ではデフォルトの動作です)の移植可能な解決策は、次のものを使用することです。
something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh
(または同様のもの、末尾がsh
必要であることに注意してください)utility
実行したいユーティリティはどこにあり、いくつかの引数を生成するxargs
場所はどこですか?something
ショートシェルスクリプトは[ "$#" -gt 0 ] && utility "$@"
引数が提供されているかどうかをテストし、指定された場合はその引数を使用してユーティリティを実行します。