以下の内容はhttps://takuya-1st.hatenablog.jp/entry/2018/11/02/043000より取得しました。


xargsで複数行のコマンドを実行する方法

xargs で複数行のコマンドを実行したい。

出来ない・・・

ls *.txt  | xargs -I@ echo @ ; sleep 1

forループならできるんだけど、for ループだとどうしても不便。

xargs でシェルコマンドを作って渡す.

xargs だと限界があるので、もうシェルの文字列にして渡すしか、他に選択肢がない。

ls *.txt  | xargs -I@  sh -c 'echo @ ; sleep 1'

これなら動くんです。動くんです。

xargs が1つ実行するたびに、 sh -c 'echo @ ' の@ の部分にファイルを文字列として入れて渡してくれる。

bash でもいい

sh だと機能が少ないので、bashにしてやるという手段も取れる。

ls *.txt  | xargs -I@  bash -c 'echo @ ; sleep 1'

条件分岐も

もうここまできたら、なんでもあり。シェルに文字列渡すんでス。ここなら何でもありです。条件の入力だってできちゃう。

ls *.txt  | xargs -I@  bash -c ' [[ @ =~ 2017 ]]  echo @ ; sleep 1'

脱 for文

これで、for がなくても戦える。

なんだけど、ここまでする必要あるかなぁ。コマンドを履歴に残したいとかパラレルに実行したいときには相当便利だけど、コードメンテしにくい。。。両刃の剣か。

参考資料




以上の内容はhttps://takuya-1st.hatenablog.jp/entry/2018/11/02/043000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14