我正在创建一个简单的自动脚本。这是代码
#!/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
或者我错过了什么?
答案 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
手册页。