複数のコンピュータでコマンドを実行し、対応するIPアドレスを印刷します。

複数のコンピュータでコマンドを実行し、対応するIPアドレスを印刷します。

要塞マシンの複数のマシンで同じgrepコマンドを実行しています。 grepの結果に加えて、対応するIPアドレスも印刷したいと思います。

ssh [email protected] sudo grep -A 2 hi /home/abc.txt
ssh [email protected] sudo grep -A 2 hi /home/abc.txt

私は試した:

ssh [email protected] "sudo grep -A 2 hi /home/abc.txt && hostname" 
ssh [email protected] "sudo grep -A 2 hi /home/abc.txt && hostname"

ただし、1.5.3.9最後にはシステムのホスト名が一度だけ印刷されます。

最良のアプローチは何ですか?

答え1

いいですね。すでにIPアドレスがあるので使用できます。

for host in 1.5.4.7 1.5.3.9; do
    ssh core@$host "sudo grep -A 2 hi /home/abc.txt" && \
    printf "%s\n" "$host"
done

hostname質問のサンプルコードのように実行すると出力されます。CPU名、いいえIPアドレスあなたはあなたが欲しいものを言います。

&&区切りコマンドを使用すると、後続コマンドの終了コードが0の場合にのみ後続コマンドが実行されます。grep一致するものがない場合、0 は返されず、2 番目のコマンドは実行されません。

また、特定のユースケースをよく理解していませんが、一般的にホストにデモンストレーションするためにこのようなタスクを実行するのは簡単です。今後代わりにホストで実行される出力後ろにprintfただし、ステートメントを移動する(または必要に応じてステートメントを代わりに使用する)ほど簡単ですecho "$host"

関連情報