这是我第一次做expect脚本。 原则上这是一个简单的脚本
#!/usr/bin/expect
set timeout 200
spawn XXX/bin/PROGRAM
expect "Choose an option ..."
send "1\r"
...
该程序有几个选项,我用它们制作了4个类似的脚本,没有出现问题,此外,在出现问题的选项中,我也导航了一系列子菜单,没有出现问题。
当我生成的程序抛出消息时,问题出现在某个时刻:
nohup: appending output to 'nohup.out'
问题总是发生在程序杀死多个进程的期望发送块中。
当我直接从命令行运行程序时,我没有遇到这个问题,所以我知道问题与spawn创建的进程的输出方向有关,我尝试了几种方法来解决这个问题,但都没有成功.
如何使由expect脚本创建的进程与我的终端中的行为方式相同,并避免重定向到nohup?
非常感谢。
我设法找到解决方案并回答自己。
错误确实出现在脚本为程序创建的过程中,因为正如我所说,它的行为不同(有人评论说这也是发生的情况)。
为了解决这个问题,我只是生成了一个终端,然后从终端启动了程序,所以行为是相同的。
#!/usr/bin/expect
set timeout 200
spawn $env(SHELL)
match_max 100000
send -- "XXX/bin/PROGRAM\r"
expect "Choose an option ..."
send "1\r"
...
如果您遇到类似问题,希望这会有所帮助。