Linux

將 bash 循環輸出重定向到變數特定文件

  • December 25, 2015

這對我來說可能很明顯,但我已經被困了一段時間。

我正在嘗試編寫一個非常簡單的 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 等不是一個選擇,因為這是一個非常受限的環境。出於同樣的原因,使用 multi-shell 或 tmux 也不是一種選擇(我一次只能從我的主機登錄到一個系統)。

所以,如果有人能準確地告訴我我是如何搞砸的,那將不勝感激!

代替

ssh user@$REMOTE_SERVER 'show_stat_from_shell_command'

經過

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

以防止 ssh 從 stdin ( $SERVER_LIST) 讀取。或者使用ssh’s 選項-n


-n: 從 /dev/null 重定向標準輸入(實際上,阻止從標準輸入讀取)。

這個特定問題還有另一種解決方案。它被稱為parallell ssh,pssh它完全符合您的要求 - 它基於列表連接到機器,執行命令,並且可以將輸出保存在日誌文件或基於主機名的文件中。

該項目位於http://code.google.com/p/parallel-ssh/

引用自:https://unix.stackexchange.com/questions/251469