0
我正在嘗試編寫一個expect
腳本來啓動SSH隧道,等待隧道進程關閉(引發錯誤),然後重新運行tunnel命令。 (值得注意的是,autossh
和其他自動隧道解決方案在這裏不相關,因爲我正在嘗試執行的操作涉及到expect
。)這是包含故障排除消息的完整腳本。期待不會等待產生的進程
#!/usr/bin/expect
set timeout 1
while { $timeout == 1 } {
spawn -noecho ssh -f -N -T -R22224:localhost:22223 [email protected]
send_user "Looking for host"
set timeout 0
wait
set timeout 1
send_user "We've encountered an error. Re-running."
}
send_user "Out of the loop."
的ssh
命令的工作,和expect
man page說wait
應持腳本,直到目前的衍生進程死了,但它不是不和它結束了重新運行循環一大堆倍(逼我pkill
許多sshd
實例在我的遠程計算機上)。我試過wait spawn
,wait spawn_id
,expect {ssh*}
(根據手冊頁,它也應該讓腳本等待),但是沒有任何東西會使腳本暫停。
謝謝,這就是我錯過了。所以我只需要將'expect'命令發送到後臺,一旦我確認它正在做我想做的事情。我可以做到這一點。 很高興知道,就像期待的手冊頁那樣充滿激情,這是我對Linux進程的無知的理解,而不是我誤解導致問題的文檔。 –