2014-11-04 82 views
1

以下期待腳本將刪除的文件/ var/tmp目錄/文件遠程機器如何捕捉期望從腳本

上,但標準誤差之前的預期腳本做SSH遠程機器上,

我把2>/tmp/errors爲了從SSH

趕上錯誤,但我注意到,儘管SSH遠程發送錯誤,我沒有看到/tmp/errors文件

錯誤,但是當我tryed手冊

ssh [email protected]$machine 

然後SSH失敗的WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

但從指望我不能趕上這個錯誤在/tmp/erros

請指教什麼是錯的?爲什麼2>/tmp/errors沒有捕獲錯誤?

expect_test=`cat << EOF 
set timeout 50 
spawn ssh [email protected]$machine 2>/tmp/errors 
     expect { 
       ")?" { send "yes\r" ; exp_continue } 

       word: { sleep 1 ; send $PASSORD\r} 
       } 
expect > {send "sleep 1\r"} 
expect > {send "rm -f /var/tmp/file\r"} 
expect > {send exit\r} 
expect eof 
EOF` 


expect -c "$expect_remove_file" 
+0

喜伊坦你怎麼樣 - THX的更新 – maihabunash 2014-11-04 13:57:13

+1

我不知道,隨便,如果你能在'使用重定向產卵「命令。如果你可以,至少,你可能需要引用它的tcl。這就是說,如果期望沒有讀取標準錯誤(並且我不記得如果是的話),你可以直接在'expect -c'執行,直到得到你想要的。 – 2014-11-04 14:00:04

+0

以超級用戶身份複製:http://superuser.com/q/835794/4714 – 2014-11-04 16:15:24

回答

1

spawn不理解I/O重定向。更換

spawn ssh [email protected]$machine 2>/tmp/errors 

與任何

spawn ssh [email protected]$machine -E /tmp/errors 
# -E log_file tells ssh where to write the error log instead of stderr 

spawn sh -c "ssh [email protected]$machine 2>/tmp/errors"