入力が提供されない場合は、xargsがユーティリティを実行しないようにしてください。

入力が提供されない場合は、xargsがユーティリティを実行しないようにしてください。

私は次のコマンドを持っています:

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互換性がありますが、xargsmacOSにはありません。

xargsAIXとSolarisにはオプションがなく、-rAIXのデフォルトの動作が何であるかわかりません(AIXシステムにアクセスできません)。デフォルトでは、Solarisはこのユーティリティを少なくとも1回実行します。


-rフラグを持たないシステムxargs(そしてユーティリティを一度実行することはSolarisのような東洋ではデフォルトの動作です)の移植可能な解決策は、次のものを使用することです。

something | xargs sh -c '[ "$#" -gt 0 ] && utility "$@"' sh

(または同様のもの、末尾がsh必要であることに注意してください)utility実行したいユーティリティはどこにあり、いくつかの引数を生成するxargs場所はどこですか?something

ショートシェルスクリプトは[ "$#" -gt 0 ] && utility "$@"引数が提供されているかどうかをテストし、指定された場合はその引数を使用してユーティリティを実行します。

おすすめ記事