如何自动触发多个gnome-terminal窗口并使其保持打开和活动状态?

时间:2016-02-25 09:46:51

标签: bash tabs tcl interactive gnome-terminal

代码的相关部分是:

主要代码

#.....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

startTask1.tcl

#.....some code
expect "flag for task2 to go"
send "flag3\r"
interact
send "flag4\r"

#.....some code
然后我发现,我可以看到flag1和flag3的打印,窗口" tabl"已打开,但无法触发tab2。

我试图关闭tabl窗口,然后打开tab2。但是,我想要的是保持这两个窗口自动打开。

我的理解是:"互动"给出控制,那么下一个终端应该自动打开,对吗?

我是新生,所以上面的一些话可能不准确。非常感谢您的回复,谢谢。

2 个答案:

答案 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都有一个(至少)虚拟终端。

我认为你需要退一步,找出你真正想做的事情。可能有办法实现,但他们可能需要采用与您目前正在使用的方法不同的方法,这看起来注定要失败。