1
我有一個簡單的BASH腳本,我用它發送一個.esh
腳本到遠程主機。例如,我知道用戶名和密碼是主機,所以我的腳本執行以下操作:Telnet /發送/期望 - 從遠程主機自動拉日誌
expect login:
send root\n
expect Password:
send abc123\n
expect "# "
所以,這將自動登錄我到遠程主機的用戶root
與密碼abc123
。
我現在試圖發送一個bash風格的單行for循環,從一些日誌文件拉動主機上的一些指標,即:
send 'for i in /var/log/example/*.txt; do echo $i; cat $i | grep error ; done \n'
然而,這種失敗:
# can't read "i": no such variable
while executing
send 'for i in /var/log/example/*.txt; do echo $i; cat $i | grep error ; done \n'
我讀過一些類似的帖子,但我還沒有發現任何類似的情況。一旦我想出瞭如何實現這一點,我可能會包含更多的命令行命令來優化日誌文件的輸出(即:更多bash臨時變量,通過awk
管道輸出等)。
任何人都可以幫我解決這個問題嗎?
謝謝。
編輯:按照所提供的答案,我改變了我的腳本爲以下,和它的工作就像一個魅力:
expect login:
send root\n
expect Password:
send abc123\n
expect "# "
send { for i in /var/log/example/*.txt; do echo $i; cat $i | grep error ; done }
send "\n"
send exit
此登錄到遠程主機,打印出一些有價值的指標到控制檯,然後退出telnet。我現在可以在本地主機上使用bash腳本,通過包含主機名/ IP列表的文本文件循環訪問多個遠程主機。
謝謝!
從技術上講,你應該用'\ r'而不是'\ n'發送 - '\ r'是回車,即.e. 「打入」 –