12
12

More than 5 years have passed since last update.

【個人メモ】shellで連続した数列を得てxargsでコマンドを実行して回って行きたい

Posted at

何がやりたいのか

そう、結論からいうと大量のサーバに対してプロビジョニングをかけたい。
で、サーバの名前の付け方が以下の感じだったとする

> webfront-01
> webfront-02
> webfront-03
...
> webfront-99

こいつらに対して、ssh uname -aを実行したい場合はどうするべきか、
というのでチョコっとしたシェルコマンド(ワンライナ)を残す。
xargsを組み合わせれば良い。

利用するコマンドのバージョン

GNU xargsとBSD xargsでオプション違ってて困った。
とりあえずGNU xargsを基準とする。

xargsは4.4.2
bashはは4.3.11である。

xargsについて

> xargs -P4 -d " " -I {} ssh webfront-{} uname -a
  • 並列度 4
  • デリミタ空白
  • 引数に取った値を {} に代入

という意味だ。なんてことはないが...

echo "01 02 03 04..." をつかう

> echo "01 02 03 04 ... 99" | xargs -P4 -d " " -I {} ssh webfront-{} uname -a

欠点 "01 02 03" とか 書くのめんどくさい

seqを使う

seqというコマンドがあるので、それがいいのかなと思って試してみた。

> seq -f "%02g" -s " " 1 99 | xargs -P4 -I{} -d " " ssh webfront-{} uname -a

欠点 seqに渡すオプションが複雑、長い。だるい。

echo {0..n}を使う

> echo {0..9}{0..9} | xargs -P4 -I{} -d " " ssh webfront-{} uname -a

echo {0..9}{0..9}で、00から99までの値を吐き出してくれる。便利だ。

> echo {0..9}{0..9}
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

echo {0..2}{0..9}とすれば、00から29までの値を吐き出してくれる

> echo {0..2}{0..9}
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

で、

最終的にこれらをjenkinsに入れて、日々のインフラがやってる作業を
見える化していく...

12
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12