为什么这会使代码不起作用?

时间:2015-07-04 13:38:37

标签: expect

不确定这是更多的脚本/ unix问题还是编程问题,但我尝试使用unix stackexchange并没有得到任何响应,所以:

以下期望代码似乎有效;也就是说,它似乎输入文字以回答密码提示。但是,该设备实际上并没有安装。

但是,如果我只是将命令输入shell并手动输入密码,设备就会成功安装。

所以我很好奇输入实际上已经结束的地方,因为它似乎永远不会抓住'密码还没有出现错误信息?事实上,两个实例中的输出看起来完全相同,但只有在运行命令并手动输入密码的情况下才能看到我的文件显示在网络上。

以下是代码:

#!/usr/bin/expect
spawn sudo mount.cifs "//WinPC/My Pictures" /home/LinPC/Desktop/Pictures -o user=Me
expect "Password: " {
    set send_slow {1 .1}
    send -s "a_password"
}

更新:获得了我需要的帮助才能使其发挥作用:必须插入'期待eof'发送密码后,它不会过早结束。但是我现在希望将其改为' expect_background'这样我就可以对发出多个mount命令进行相同的触发响应。以下结果提前结束,并且期望eof'最后导致错误:

expect_background "Password:" {
    send "a_password\r"
    expect eof
}
spawn sudo mount.cifs "//WinPC/My Pictures" /home/LinPC/Desktop/Pictures -o user=Me
expect eof

它应该是什么样的?

更新:以下代码块说明了当前的问题:

expect_background "Password: " {
    send "a_password\r"
    expect eof
}
spawn sudo mount.cifs "//WinPC/My Pictures" /home/LinPC/Desktop/Pictures -o user=someone

expect "Password: " {
    send "a_password\r"
    expect eof
}
#The password prompt gets answered by 'expect' but not 'expect_background'.
#If I delete the last 'expect' and insert 'expect eof' it hangs for a short
#while at the password prompt (around 3 seconds) then exits.
#Why?

1 个答案:

答案 0 :(得分:3)

发送密码后再添加一个expect语句。

send -s "a_password\r"
expect eof 

eof会使Expect等到程序结束。