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'
が入ります。
コメント
トラックバック
このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2019/12/31/9196277/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。