2013-12-21 51 views
0

我想寫一個bash腳本,使用期望scp文件到遠程系統。該預期塊我到目前爲止是這樣包括期望的條件語句

expect -c " 
    set timeout -1 
    spawn scp $file [email protected]:$file 
    expect "\Are you sure you want to continue connection (yes/no)\" 
    send -- \"$password\r\" 
    expect eof 
    " 

的問題是,這種處理在該主機不是已知的主體的情況下,並問我是否要繼續連接。我想爲主機已知的情況添加一個選項,它只需要密碼。

另一個問題是我想處理用戶輸入的密碼不正確的事件。在這種情況下,我想讓用戶重新輸入密碼。

什麼是使用bash實現這一目標的最佳方法?

非常感謝提前!

+0

如果提示'...(是/否)',你不想回應'是'嗎?祝你好運。 – shellter

回答

0

主機不是已知的主機並問我是否要繼續連接

用途:scp -o "StrictHostKeyChecking no" <...>

事件中,用戶輸入的密碼不正確

如果您的腳本被認爲是互動的,爲什麼您使用expectscp可以自行詢問並重新詢問密碼。

0

像這樣:

expect -c " 
    set timeout -1 
    spawn scp $file [email protected]:$file 
    expect 
     {Are you sure you want to continue connection (yes/no)} { 
      send \"yes\r\" 
      exp_continue 
     } 
     {Password: } { 
      send -- \"$password\r\" 
     } 
    } 
    expect eof 
" 

exp_continue命令返回到含有期望命令,使其他的模式必須匹配的變化。