eof not recognized in Expect Script

那年仲夏 提交于 2019-12-23 05:17:55

问题


i have got some problems in my expect script. I am spawning a scp file upload but the eof is not recognized. The expect rans into the timeout before the script goes on.

What am i doing wrong??

Here is the script

    function ssh_upload_file () {

test_log INFO "Uploading File $3 to Device $2 with a $1 seconds timeout" "ssh_upload_file"
last_log_entry_to_detail

expect <<- DONE
set outfilename "$DETAIL_LOG"
log_file "$DETAIL_LOG";

set timeout $1
set lantime_ip $2

system "touch  ~/.ssh/known_hosts"
system "ssh-keygen -R $2"
spawn /bin/bash
sleep 3
send_user "Uploading File via SSH...\n"
send "scp $2 $3:$4 || echo FWTEST_SSH_RESULT=\$?\n"
expect "assword:" {
        after 1000
        send "$DUT_PWD\r"
        #set timeout 5
        #expect "y/n"
        #send "n\n"
        #set timeout $1
        #expect "#"
        #send "no_shell_timeout\n"
}
expect eof
send_user "Done."
log_file
exit 0
expect eof
DONE
LAST_ERROR=$?
return $LAST_ERROR
}

回答1:


You spawn a bash shell, and send an scp command. When scp completes, you're sitting at a bash prompt. You need to send bash an exit command before you'll see eof.

Alternatively, you're not doing anything in that bash session except capture the output of the scp command which you can do like this:

spawn scp $2 $3:$4
expect "assword:" 
send "$DUT_PWD\r"
expect eof
set info [wait]
puts "FWTEST_SSH_RESULT=[lindex [set info] 3]"

Addressing Donal's comment:

spawn scp $2 $3:$4
expect {
    "assword:" {
        send "$DUT_PWD\r"
        exp_continue
    }
    eof
}
set info [wait]
puts "FWTEST_SSH_RESULT=[lindex [set info] 3]"


来源:https://stackoverflow.com/questions/20330074/eof-not-recognized-in-expect-script

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!