我在使用expect时需要使用spawn吗?

时间:2013-12-18 08:21:49

标签: linux expect

我正在创建一个简单的自动脚本。这是代码

#!/bin/sh    
echo "testing expect"    
/usr/bin/expect <<delim  
    expect "password for teamer:"
    send "itsme\r"      
    expect eof
delim    
sudo apt-get update

我指的是他们使用 spawn 的各种文档和博客。所以我有疑问:是否有必要每次都使用spawn?我正在本地计算机上执行更新。

不使用spawn我收到此错误:

send: spawn id exp0 not open while executing

或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

expect expect命令正在观察生成进程的IO通道,等待指定的模式。如果你不给它一些值得观看的东西,它就会坐在那里直到它超时,然后把密码发送给任何东西。

这是你需要做的:

#!/bin/sh    
echo "testing expect"    
/usr/bin/expect <<delim  
    exp_internal 1            ;# remove this when your satisfied it's working
    spawn sudo apt-get update
    expect "password for teamer:"
    send "itsme\r"      
    expect eof
delim

请注意,在带有heredoc分隔符的行上没有任何前导或尾随空格。

如果你不在乎你的密码是纯文本的(你应该),你不需要使用expect:

#!/bin/sh    
echo "itsme" | sudo -S apt-get update

您应该做的是编辑sudoers文件以允许自己sudo apt-get而不必提供密码,然后:

#!/bin/sh    
sudo apt-get update

阅读系统上的sudoers手册页。