2018年にもなって xargs でハマった
BSD と GNU 版の挙動の違いにハマった。
以下、ミニマムに試した結果。
環境
BSD xargs: macOS 10.12.6
GNU xargs: ubuntu 18.04 xargs (GNU findutils) 4.7.0-git
同じ
BSD xargs
$ echo "a b c" | xargs -n1 a b c
GNU xargs
$ echo "a b c" | xargs -n1 a b c
異なる
BSD xargs
$ echo "a b c" | xargs -n1 -I {} echo {} a b c
GNU xargs
$ echo "a b c" | xargs -n1 -I {} echo {} a b c
このように異なるおかげで、a, b, c と1つずつ処理しているつもりが、GNU版では一度に処理されてしまって、意図しない動きになっていた。
macOS では動くのに CI で動かない状態だったので、気づくのにすこし時間がかかった。つらい。
man をみたところ、GNU版は、-I
を使うとセパレータが改行になるらしい。ヘー。
面倒くさくなったので、xargs を使わないように改修した。