我使用expect来自动安装一个软件。这是我的脚本中的简化expect代码,但是当我直接将它粘贴到控制台中时,同样的问题也会发生。
expect <<-EOS
#!/usr/bin/expect -f
set timeout -1
#run the command
spawn ./installSoftware.sh
expect "*?Question 1*" { send "N\r" }
expect -ex {Question 2 (default is [RANDOM STRING]):} { send "\r" }
puts "-------------- DONE 1 ---------------"
expect eof
puts "-------------- DONE 2 ---------------"
EOS
installSoftware.sh是一个安装软件包和其他东西的大脚本。2脚本的最后一行有。
echo "----------- Done-----------"
当installSoftware.sh我直接执行www.example.com脚本时,它工作正常,但当我将其与expect脚本一起使用时,它会运行并从最后一行显示“done”回显,但随后它就卡住了。我可以通过HTOP看到脚本的进程仍在运行,installSoftware.sh脚本不退出。
有什么想法如何调试这个吗?这是www.example.com脚本的问题installSoftware.sh还是与expect相关的问题?
我可以告诉你的是,如果我从www.example.com中删除这一行installSoftware.sh,它会像预期的那样退出我的installSoftware.sh,但这是在hugh脚本中间的某个地方。
rpm -Uvh --oldpackage --replacepkgs mysoftware.rpm
1条答案
按热度按时间8cdiaqws1#
我已经发现了这个问题,这个问题是在脚本中的RPM包内部。这个例子复制了相同的问题,并将显示spawn任务将在没有直接指示子进程的情况下停留在最后。
expect.sh
test.sh
sleep.sh