2012-10-11 42 views
0

我有以下expect命令,我在我的bash腳本中使用以設置無密碼的ssh連接。預計在bash表達式中出錯

VAR=$(expect -c ' 
    spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP "' 
    expect "*?assword:*" 
    send "'"$REMOTE_HOST_PASSWD"'\r"; 
    expect { 
    "Permission denied, please try again." { 
     exit '"$WRONG_PASSWORD"' 
    } 
} 
') 

我期待密碼字符串爲「assword:」以發送password.But無論我寫的期望阻止它works.if我寫

expect "xxxx" 
expect "yyyy" 

它也適用,所以我認爲它沒有進入該塊?什麼是解決方案

回答

1

它可能是在進行匹配之前,它達到蒸汽結束或超時發生。即使沒有找到匹配,期望也會返回並且執行將繼續,併發送密碼。

從期望手冊,COMMAND下,我們有一個解釋expect命令部分:

VAR=$(expect -c ' 
    spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP "' 
    expect "*?assword:*" { 
     send "'"$REMOTE_HOST_PASSWD"'\r" 
    } 
    expect { 
    "Permission denied, please try again." { 
     exit '"$WRONG_PASSWORD"' 
    } 
} 
') 

waits until one of the patterns matches the output of a spawned process, a 
specified time period has passed, or an end-of-file is seen. 

爲了解決這個問題,你應該想到的身體將發送碼希望這有助於=)