generated at
xargsコマンド
stdinを引数(複数)に変換し、実行する
A | xargs B と書いた時、
A stdout を、
B stdin としてではなく、(これが通常のpipe)
B 引数 として実行したい時に使う
引数とstdinの違いがわかっていないと理解できないmrsekut



xargs [オプション] コマンド [コマンドの引数]



具体例など



複数引数であることがわかり易い例
例えば、以下のような2ファイルがあるとき
a1.txt
hoge1
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





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) とすればいい