xargsで入力が空のときに何も実行しない2019年12月31日 19時56分

xargsコマンドで入力が空のときは何も実行しないようにしたいのですが、BSD版(macOSなど)とGNU版(Linuxなど)などで挙動が異なります。BSD版は最初からそのような挙動なのに対し、GNU版では--no-run-if-emptyオプションをつけないとそのような挙動になりません。両者で挙動を合わせるために、シェルスクリプトで以下のように書けます。

NO_RUN_IF_EMPTY=$(: | xargs echo '--no-run-if-empty')
command1 | xargs $NO_RUN_IF_EMPTY command2

コロン(:)は何もしないコマンドであり、パイプでつながれたxargsの入力も空となります。なので、BSD版ではechoコマンドが実行されずNO_RUN_IF_EMPTY変数の値が空文字列となり、一方GNU版ではechoコマンドが実行されNO_RUN_IF_EMPTY変数の値に文字列'--no-run-if-empty'が入ります。

参考: GNU版, BSD版 xargsの挙動の違い - syohex’s diary

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
「ハイパーテキストマークアップ言語」をアルファベット4文字でいうと?

コメント:

トラックバック

このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2019/12/31/9196277/tb