2017-07-17 58 views
0

有人可以告訴我爲什麼這不起作用嗎?如何使用bash腳本里面的期望

#!/bin/bash 
cd /home 
touch somefile 
/usr/bin/expect<<FILETRANSFER 
spawn scp -r -P remoteServerPort somefile remoteServerIP:/home 
expect "assword:" 
send "MyPassWord\r" 
interact 
FILETRANSFER 
echo "It's done" 

它沒有給出任何錯誤,但文件沒有傳輸到遠程服務器。我嘗試了很多方法仍然找不到任何解決方案。

+0

更好的方法是避免使用'ssh'(也是'scp')鍵入或發送任何密碼。閱讀一些ssh教程並使用公鑰。 –

+0

'/ usr/bin/expect << FILETRANSFER',在這裏你缺少'<<' – Jahid

+0

之前的空格謝謝你的回覆。 @ Basile Starynkevitch由於某些原因,我無法使用公鑰。 @ Jahid增加了空間,但仍然無法使用。 – derp

回答

1

您定義的bash腳本在標準輸入expect上傳遞expect命令。但是,expect命令需要使用-c選項的文件參數或參數。

您有幾個選擇,但要在您的腳本上添加較少的修改,您只需使用流程替換爲expect命令創建here-document(臨時)即可。

#!/bin/bash 

    echo "[DEBUG] INIT BASH" 

    cd /home 
    touch somefile 

    /usr/bin/expect <(cat << EOF 
spawn scp -r -P remoteServerPort somefile remoteServerIP:/home 
expect "Password:" 
send "MyPassWord\r" 
interact 
EOF 
) 

    echo "[DEBUG] END BASH" 
+0

順便說一句,我剛剛檢查,並有一個所有可用的選項在這裏回答:https://stackoverflow.com/questions/41165719/embedding-an-expect-inside-a-bash-script –

+0

不,期望是完全正確地讀取標準輸入中的命令,如問題中發佈的那樣。 –