Linux
將 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 等不是一個選擇,因為這是一個非常受限的環境。出於同樣的原因,使用 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
它完全符合您的要求 - 它基於列表連接到機器,執行命令,並且可以將輸出保存在日誌文件或基於主機名的文件中。