代码的相关部分是:
#.....some code
send "flag1\r"
exec gnome-terminal -t "tab1" -x bash "$HOME_PATH/scripts/startTask1.tcl"
send "flag2\r"
exec gnome-terminal -t "tab2" -x bash "$HOME_PATH/scripts/startTask2.tcl"
#.....some code
#.....some code
expect "flag for task2 to go"
send "flag3\r"
interact
send "flag4\r"
#.....some code
然后我发现,我可以看到flag1和flag3的打印,窗口" tabl"已打开,但无法触发tab2。
我试图关闭tabl窗口,然后打开tab2。但是,我想要的是保持这两个窗口自动打开。
我的理解是:"互动"给出控制,那么下一个终端应该自动打开,对吗?
我是新生,所以上面的一些话可能不准确。非常感谢您的回复,谢谢。
答案 0 :(得分:0)
我可能会弄错,但我相信名为终结器的程序是唯一同时使用多个shell的选项卡式shell。但是要预先警告,调用的顺序可能看起来是同时进行的,但实际上它们会按顺序进入和退出内存,这些顺序可以按照脚本顺序进行解析,以便在用户空间,内核空间或交换空间中放置内容。 / p>
答案 1 :(得分:0)
您的问题是外部程序正在等待gnome-terminal
进程完成,然后再继续下一步。当从属过程(我猜是猜?)结束时,它会结束。
您可以在&
的末尾添加exec
作为单独的参数来同时运行两者:
exec gnome-terminal -t "tab1" -x bash "$HOME_PATH/scripts/startTask1.tcl" &
但是,您无法通过这种方式轻松地将这两项任务相互协作,因为他们使用的是独立的虚拟终端。事实上,每个gnome-terminal
都有一个虚拟终端,每个expect
都有一个(至少)虚拟终端。
我认为你需要退一步,找出你真正想做的事情。可能有办法实现,但他们可能需要采用与您目前正在使用的方法不同的方法,这看起来注定要失败。