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から標準入力をリダイレクトします(実際には標準入力から読み取ることを防ぎます)。

おすすめ記事