我意識到類似的問題已經被問過,我看着他們,嘗試運用我所學到的並具有以下腳本:嵌入bash腳本內的期望
#!/bin/bash
if [ `hostname` = 'EXAMPLE' ]
then
/usr/bin/expect << EOD
spawn scp -rp host:~/outfiles/ /home/USERNAME/outfiles/
expect "id_rsa':"
send "PASSWORD\r"
interact
spawn scp -rp host:~/errfiles/ /home/USERNAME/errfiles/
expect "id_rsa':"
send "PASSWORD\r"
interact
expect eof
EOD
echo 'Successful download'
fi
不幸的是,似乎沒有工作和我得到一個錯誤消息:
spawn scp -rp host:~/outfiles/ /home/USERNAME/outfiles/
Enter passphrase for key '/home/USERNAME/.ssh/id_rsa': interact: spawn id exp0 not open
while executing
"interact"
我不知道這是什麼意思,爲什麼它不工作。但是,當我使用非嵌入期望腳本編寫上述代碼時:
#!/usr/bin/expect
spawn scp -rp host:~/outfiles/ /home/USERNAME/outfiles/
expect "id_rsa':"
send "PASSWORD\r"
interact
spawn scp -rp host:~/errfiles/ /home/USERNAME/errfiles/
expect "id_rsa':"
send "PASSWORD\r"
interact
它的工作沒有任何問題。那麼我做錯了什麼?
注意:通常當有人發佈關於使用expect
來使用scp
或ssh
的問題時,給出的答案是使用rsa密鑰。我試過了,不幸的是,在我的一臺電腦上有一些侏儒密鑰環,這意味着我無法從rsa-key中刪除我的密碼,這正是我試圖用if編寫上述腳本的原因聲明。所以請不要告訴我使用rsa密鑰。
如果您希望完全**執行**定界符之間的文本(在解釋之前沒有變量或特殊字符擴展),則必須引用您的here-doc定界符,如下所示: '/ usr/bin/expect <<「EOD」... EOD「。 [這個問題](http://stackoverflow.com/questions/4937792/using-variables-inside-a-bash-heredoc)是相似的,它有相同的問題,但反過來。 – Aserre
我只是試過'/ usr/bin/expect <<「EOD」'但它仍然給出錯誤'spawn scp -rp host:〜/ outfiles // home/USERNAME/outfiles/ 輸入密鑰'/ home /USERNAME/.ssh/id_rsa':interact:spawn id exp0未打開 執行中 「interact」 成功下載 ' –