[英]I'm not able to connect sftp using expect script
我無法確定我在哪里做錯了。如果我做錯了,請告訴我。
#!/usr/bin/bash
File_Sftp ()
{
set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"
STATUS=$(
expect << EOF
spawn sftp $user@$host
expect "User Name:"
send "$user\r"
expect "Password:"
send "$password\r"
expect "sftp> "
send "cd in\r"
expect "sftp> "
send "get $1\r"
expect "sftp> "
send "exit\r"
EOF
)
if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
echo "Success";
else
echo "Unsuccessful" ;
fi
}
File_Sftp "/usr/local/bin/xxxxxx.txt"
每當我嘗試執行以上shell腳本時,都會出現以下錯誤:
send: spawn id exp4 not open
while executing
"send "\r""
Unsuccessful
這些bash行不符合您的想法:
set user="xxxx"
set password="xxxxx"
set host="ftp.xxxx.xxxx.com"
它們不是設置變量值,而是將位置參數$1
設置為給定的字符串。 實際變量仍未設置 。
spawn
嘗試啟動sftp $user@$host
失敗(實際上是sftp @
帶有未設置的變量),默認的expect "User Name:"
將在默認的10秒鍾后超時,然后錯誤消息來自send "$user\\r"
(或send "\\r"
帶有未設置變量的send "\\r"
)-沒有與之互動的衍生過程。
如果在測試時使用expect -d <<EOF
則可以看到此信息(打開Expect的詳細調試輸出)
你要
user="xxxx"
password="xxxxx"
host="ftp.xxxx.xxxx.com"
或者,因為這是bash,並且我們想推廣良好的編程習慣(沒有全局變量)
local user="xxxx"
local password="xxxxx"
local host="ftp.xxxx.xxxx.com"
發送“退出”后添加expect eof
要查看在預期輸出中是否出現226
,我將更改
if [ "$(echo $STATUS | grep -c 226)" -ge 1 ]; then
至
if grep -q '\<226\>' <<< "$STATUS" ; then
要么
if [[ $STATUS == *226* ]]; then
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.