【问题标题】:How to trigger multiple gnome-terminal windows automatically and keep them open and active?如何自动触发多个 gnome-terminal 窗口并使它们保持打开和活动状态?
【发布时间】:2016-02-25 09:46:50
【问题描述】:

相关部分代码为:

主要代码

#.....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 被打开。但是,我想要的是让这两个窗口都自动打开。

我的理解是:“交互”给了控制权,那么下一个终端应该会自动打开吧?

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

【问题讨论】:

  • 感谢 Brian 和 Donal,问题已通过更新 Ubuntu 操作系统得到解决。 :)

标签: bash tabs tcl interactive gnome-terminal


【解决方案1】:

您的问题是外部程序在继续下一步之前正在等待gnome-terminal 进程完成。它在从属进程(我猜是吗?)完成时完成。

您可以通过将& 作为单独的参数放在exec 的末尾来同时运行两者:

exec gnome-terminal -t "tab1" -x bash "$HOME_PATH/scripts/startTask1.tcl" &

但是,您将无法通过这种方式轻松地让这两个任务相互协作,因为它们在后台使用单独的虚拟终端。事实上,每个gnome-terminal 将有一个虚拟终端,每个expect 将有一个(至少)另一个。

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

【讨论】:

  • 谢谢Donal,其实在“startTask1.tcl”的代码中“interact”之前有一个“expect”,我已经更新了我的问题以明确。
    >要求对于脚本是: >1.运行task1,等待(按预期)直到在Task1终端打印一些前置条件信息,然后通过“交互”给出控制; >2.运行task2 3.Task1终端中的前置条件信息后,Task1和Task2可以单独运行,它们之间没有任何协作; >我怎样才能做到?
【解决方案2】:

我可能弄错了,但我相信名为 terminator 的程序是唯一同时使用多个 shell 的选项卡式 shell。不过请注意,调用的顺序可能看起来是同时的,但实际上它们将按照可以根据脚本顺序解析的间隔将事物放入用户空间、内核空间或交换空间的顺序进出内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2020-11-27
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多