web-dev-qa-db-ja.com

マルチコマンドで使用するための入力変数を持つxargsループ

さまざまなIPアドレスが記載されたテキストファイルがあります。

それぞれを循環して、コマンドを発行したいと思います。

cat ips.txt | xargs -L 1 `ssh me@__IP__ echo "text" > file; reboot;`

しかし、xargs値を_[〜#〜] ip [〜#〜]_に渡す方法がわかりません。

誰かがこれをどのように達成できるか説明できますか?

5
d-_-b

これにはcatxargsも必要ありません。ループ内の単純なreadで十分です。

while read -r IP;do
    ssh me@$IP echo "text" > file
    reboot
done < ips.txt

今後の参考のために、xargsに必要なことは、-Iオプションを使用して実現できます。-Iの後に名前を指定すると、コマンド自体のその名前のインスタンスは、 xargsがパイプで受け取る引数:

... | xargs -L 1 -I myip ssh me@myip 'echo "text">file;reboot'
9
Joseph R.

GNU Parallelを使用すると、並列に実行できます。

parallel --slf ips.txt --nonall 'echo "text" > file; reboot;'
1
Ole Tange