Linuxのxargsには--no-run-if-empty付けとけ
知らなかったというか面倒で放置してた。
cronで定期実行するスクリプトの中に
find PATH CONDITIONS | xargs COMMAND
みたいなのがあったとして、これが時々エラー吐く、みたいなことがあったんですわ。あー xargs の呼び出すコマンド(例えば rm )に入力がないときにエラー出るんかー、変なのーって思いながら、ちょこちょこそれを忘れては引っかかり、をくり返していたんです。
なんでか今日分かりました。BSD の xargs を使った場合はそういうエラー出ないのです。だからすぐ忘れる。
GNU のバカーと思ったりしたのですが、man の恐ろしい量のオプションを読んでいたら
--no-run-if-empty
なんて文字が! なんてこった。というわけで実際のスクリプトの一部はこんな感じにしてみた。
BSD のクセに gnu findutils 使ってるとか cygwin 使ってるやつのことなんか知らない。
[2011-11-09 追記] 最近の BSD xargs には -r というオプションがあって、これが findutils の xargs の -r と同じ動作をするそうです。残念ながら OSX 10.6 の xargs には存在しなかったので普段使いにはできないのですが、サーバ周りでは共通のオプションにできるかも。
zsh の alias というブコメががあるんですけど、cron で zsh 使わないので、それは今回のケースにおいては解法としてニーズに合ってないっす1。
そもそも手作業のときは一度 find でリストだけ出すってのが習慣になってるので –no-run-if-empty もまったく必要ないんですよね。 ↩