xargsコマンド
A | xargs Bと書いた時、
Aのstdoutを、
Bのstdinとしてではなく、(これが通常のpipe)
Bの引数として実行したい時に使う
xargs [オプション] コマンド [コマンドの引数]
具体例など
複数引数であることがわかり易い例
例えば、以下のような2ファイルがあるとき
code:a1.txt
hoge1
code:a2.txt
hoge2
$ ls a*.txt | xargs catと実行すると、
$ cat a1.txt a2.txtのように、catに2引数渡して呼んだのと同じ
a*.txtの数が100個あっても、一気に渡されることになる
この数が多すぎるとエラーになることがある
その場合は、-Lなどを使って分割することができる
options
-L <number>
コマンドに渡す複数引数の上限値を指定する
e.g. $ seq 10 | xargs -L 5 echo
echo 1 2 3 4 5とecho 6 7 8 9 10が2回に分けて実行される
-P <number>
並列実行する数を指定する
-Lと併用する
e.g. $ seq 10 | xargs -L 5 -P 2 echo
echo 1 2 3 4 5とecho 6 7 8 9 10を並列に実行する
-I
左のstdoutに名前をつけて、右の引数の順序を指定できる
参考
ややこしいポイント
型がないmrsekut.icon
e.g. $ ghq list --full-path | fzf | xargs code
ghqをfzfで選んでvscodeで開く
cdなどのbuil-inなコマンドとは組合わられない
processの問題
こういうのは無理
e.g. $ ghq list --full-path | fzf | xrags cd
代わりにcd $(ghq list --full-path | fzf)とすればいい