如何在转到expect中的下一个流程之前完成一个流程?

如何在转到expect中的下一个流程之前完成一个流程?,expect,Expect,我想写一个简短的代码,每次都用不同的值执行一个程序——这也是我经常想要的。这个程序是一个.cxx宏,我通过shell/ubuntu终端中的ROOT调用它 实际代码: #!/usr/bin/expect exp_internal 0 spawn root -l send ".L AnaProto_mainz.cxx+\r" send "AnaProto_mainz(\"rough_cooled_3.root\", \"Complete_Matrix_0.0.root\",25,0,0.0)\r

我想写一个简短的代码,每次都用不同的值执行一个程序——这也是我经常想要的。这个程序是一个.cxx宏,我通过shell/ubuntu终端中的ROOT调用它

实际代码:

#!/usr/bin/expect
exp_internal 0

spawn root -l

send ".L AnaProto_mainz.cxx+\r"
send "AnaProto_mainz(\"rough_cooled_3.root\", \"Complete_Matrix_0.0.root\",25,0,0.0)\r"
expect eof
send "AnaProto_mainz(\"rough_cooled_3.root\", \"Complete_Matrix_0.5.root\",25,0,0.5)\r"
expect eof
send "AnaProto_mainz(\"rough_cooled_3.root\", \"Complete_Matrix_1.0.root\",25,0,1.0)\r" 
(...)

interact
问题在于
expect
直接调用每一行,而不必等待前一行完成或完成任务。然后我意识到这在某种程度上是可以的,因为所有进程都是并行执行的,但由于RAM过载,3-5个并行进程根崩溃

所以我需要脚本在执行下一个进程之前结束一个进程。
我该怎么做?显然,Eof不起作用,而catch wait result也不起作用。还是我用错了?我要找的命令是什么?

我以某种方式让它工作起来:
expect{timeout{puts“\r”puts”~Shell:等待完成当前进程“complete\u Matrix\ux”。~“puts”\r“exp\u continue”}“…dary!Legendary!”)interact
但我现在遇到了以下问题:“/usr/bin/root.exe”中的**错误:free():无效的下一个大小(fast):0x000000000767bc00***我再次没有可用内存。也修复了该问题。我现在关闭expect,然后它继续下一个根进程。如果关闭expect或root,可能并不重要。它现在正在工作,所以我不介意两者中哪一个更好:)请将您的解决方案作为答案(而不是评论)发布,并接受它。可能与我的解决方案有重复之处:
expect{timeout{puts{r“puts”\r“puts”~Shell:正在等待完成当前进程“complete\u Matrix\ux”。~“puts”\r“exp\u continue}“…dary!Legendary!”}interact
但我现在遇到了以下问题:“/usr/bin/root.exe”中的**错误:free():无效的下一个大小(快速):0x000000000767bc00***我再次没有可用内存。也修复了这个问题。我现在关闭expect,然后它继续下一个根进程。如果关闭expect或root,可能并不重要。它现在正在运行,所以我不介意两者中哪一个更好:)请将您的解决方案作为答案(而不是评论)发布,并接受它。可能是的副本