xargsの使い方

投稿者 nanki 2010-01-30 19:28:00 GMT

便利なxargs

UNIX系OSにはxargsというコマンドがあり、

$ cmd arg1
$ cmd arg2
$ cmd arg3
…

という処理を、次のように自動化してくれる。

$ cat args
arg1
arg2
arg3
…

$ cat args | xargs -n 1 cmd 

very venry!

疑惑

便利なxargsではあるが、オプショナルな引数をとるような処理を自動化しようとしたら、なかなか思う通りにいかなかった。
以下、Mac OSX 10.6.2 での話。

調査

$ cat args
arg1 opt
arg2
arg3
$ cat args | xargs ... ruby -e "p ARGV" ...

上のような入力をxargsに渡し、単純にコマンドライン引数をpするRubyプログラムを使って行う。

☷ cat args | xargs -n 2 ruby -e "p ARGV"
["arg1", "opt"]
["arg2", "arg3"]

xargs「神は空白と改行を平等におつくりになられた」

☷ cat args | xargs -I% ruby -e "p ARGV" %
["arg1 opt"]
["arg2"]
["arg3"]

惜しい。空白がエスケープされているので $ cmd "arg1 opt" と同じ。

☷ cat args | xargs -J% ruby -e "p ARGV" % 
["arg1", "opt", "arg2", "arg3"]

それは困ります…。

☷ cat args | xargs -E% ruby -e "p ARGV"
["arg1", "opt", "arg2", "arg3"]

ですよね〜。

☷ cat args | xargs -L 1 -J% ruby -e "p ARGV" %
["arg1", "opt"]
["arg2"]
["arg3"]

これだ!Lは世界を救う!

☷ cat args | xargs -L 1 ruby -e "p ARGV"
["arg1", "opt"]
["arg2"]
["arg3"]

xargs「よくぞたどりついた」

This entry was posted on 2010-01-30 19:28:00 GMT and カテゴリ . You can follow any response to this entry through the Atom feed. or a trackback from your own site.


トラックバック

トラックバックリンク:
http://blog.netswitch.jp/trackbacks?article_id=8657