Bashループ出力を変数別ファイルにリダイレクトする

Bashループ出力を変数別ファイルにリダイレクトする

これは私には明らかかもしれませんが、私はしばらくこれに閉じ込められていました。

私はサーバーのリストを取得し、そのリストから特定の情報を取得し、起動コンピュータのホストアドレスに基づいてファイルに出力を保存する非常に単純なbashループを作成しようとしています。

現在のコードは次のとおりです。

#!/bin/bash

SERVER_LIST=/path/to/hosts

while read REMOTE_SERVER
do
    {
    ssh user@$REMOTE_SERVER 'show_stat_from_shell_command' 
} > "$REMOTE_SERVER"
done < $SERVER_LIST

上記の結果は、私のリストの最初のホストの出力ファイルを作成してから終了することです。

より確実な解決策のいくつかを防ぐために、Ansibleなどは非常に限られた環境なので、オプションではありません。同じ理由で複数のシェルまたはtmuxを使用することはオプションではありません(ホストから一度に1つのシステムにのみログインできます)。

だから誰かが私がどのように台無しにされたのかを正確に伝えることができればとても感謝します!

答え1

変える

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command'

渡す

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command' </dev/null

また、sshが$SERVER_LISTstdin()から読み取ることを防ぎます。またはsshオプションを使用してください-n


-n:/dev/nullから標準入力をリダイレクトします(実際には標準入力から読み取ることを防ぎます)。

答え2

この特定の問題に対する別の解決策があります。並列SSHと呼ばれ、pssh必要な操作を正確に実行します。リストに基づいてコンピュータに接続し、コマンドを実行し、出力をログファイルまたはホスト名ベースのファイルに保存できます。

プロジェクトは次の場所にあります。http://code.google.com/p/parallel-ssh/

関連情報