2013-06-26 16 views
1

我想運行通過SSH連接到遠程主機的shell腳本內的expect腳本,目標是做並行的方法是這樣的:並行遠程ssh到同一臺機器

' #bin/bash  
(expect_script_ssh_machine1.tcl parameter1 > file1) &  
(expect_script_ssh_machine1.tcl parameter2 > file2) &  
(expect_script_ssh_machine1.tcl parameter3 > file3) &  
wait 

` 期望腳本是這樣的:

#/bin/expect -f 
spawn ssh [email protected] 
...code... 

預期腳本需要大約30秒來完成任務並打印結果。 這可能嗎?也許它可以與不同的機器一起工作,但使用一臺獨特的機器我不確定該腳本可以在同一時間內連接到一臺獨特的機器。

感謝

+0

你試過了嗎?它工作嗎?你能簡單地用''替換'&'並等待每個任務完成嗎? –

+0

是的,我已經嘗試過,但我只得到最後期望腳本的結果。如果我把';'它可以工作,但它不再是一項平行任務。 – Shannon

+1

你可以在'expect'腳本中重定向'stdout'嗎('expect'有像'-d'這樣的開關,但也有更強大的'tcl'函數來處理輸出)?這項工作是否必須平行進行?當做簡單的任務登錄到一個文件時,我已經使用'pssh'(一個python工具)進行多連接而沒有問題。我認爲'bash','ssh','expect'或'&'在這裏吃着你的輸出,你可能需要直接告訴腳本把'stderr'重定向到'stdout'。 –

回答

1

如果更改腳本的前兩行:

(expect_script_ssh_machine1.tcl parameter1 > file1) & 

到:

(expect_script_ssh_machine1.tcl parameter1 > file1) 2>&1 

幫助?

+0

我會盡力去做你建議的事情,但我想知道你的建議('2&1')是什麼意思。 – Shannon

+1

這意味着重定向'stderr'到'stdout'檢查'bash'或'sh'手冊頁。 –

+0

嗨,謝謝你的解釋。我試圖做你說的話,但是如果我像你說的那樣改變了兩行,那麼這些行不會在後臺執行,因此它們沒有錯誤。所以,我試圖執行此代碼:'(expect_script_ssh_machine1.tcl參數1>文件1 2>&1) (expect_script_ssh_machine1.tcl參數2> file2的2>&1) (expect_script_ssh_machine1.tcl參數3> file3的) 等待'但是我不不會收到任何錯誤... – Shannon