从 Bash 脚本生成新的 Terminator 标签

从 Bash 脚本生成新的 Terminator 标签

我编写了一个 Bash 脚本,运行四个长时间运行(每个 20-30 分钟)的进程:

terminator -T "<NAME-1>" -e "<COMMAND-1>" &
terminator -T "<NAME-2>" -e "<COMMAND-2>" &
terminator -T "<NAME-3>" -e "<COMMAND-3>" &
terminator -T "<NAME-4>" -e "<COMMAND-4>" &

(其中<COMMAND-X>是事先由几行 Bash 创建的值,包括对 Kubernetes 的调用)。

当我运行脚本时,每个进程都会在一个新的 Terminator 窗口中打开。为了避免每次运行脚本时都会生成四个新窗口,我实际上希望它们都从单个新窗口的不同视图中启动。有什么办法吗?手册

我会接受使用不同终端的解决方案。

答案1

首先,打开一个终结器实例,根据需要将其分成 4 个窗格,然后另存为新布局(确保关闭所有打开的终端窗口,除了使用新配置文件设置的窗口)。对于 4 个窗格中的每一个,添加一个自定义命令,但只需添加文本COMMAND1COMMAND2。将新布局另存为foo(或其他)。此时,您的布局~/.config/terminator/config应该看起来像这样:

[global_config]
  enabled_plugins = LaunchpadCodeURLHandler, APTURLHandler, LaunchpadBugURLHandler
  focus = mouse
  suppress_multiple_term_dialog = True
  title_use_system_font = False
[keybindings]
[layouts]
  [[default]]
    [[[child0]]]
      fullscreen = False
      last_active_term = ad14f6cd-bcc3-4a80-9852-3fe64f7fc2eb
      last_active_window = True
      maximised = False
      order = 0
      parent = ""
      size = 735, 474
      title = sometitle
      type = Window
  [[foo]]
    [[[child0]]]
      fullscreen = False
      last_active_term = 18ebf009-c427-4c2f-8017-78c379a72d31
      last_active_window = True
      maximised = False
      order = 0
      parent = ""
      position = 2730:254
      size = 735, 474
      title = NAME-1
      type = Window
    [[[child1]]]
      order = 0
      parent = child0
      position = 237
      ratio = 0.5
      type = VPaned
    [[[child2]]]
      order = 0
      parent = child1
      position = 368
      ratio = 0.500680272109
      type = HPaned
    [[[child5]]]
      order = 1
      parent = child1
      position = 368
      ratio = 0.500680272109
      type = HPaned
    [[[terminal3]]]
      command = COMMAND1
      order = 0
      parent = child2
      profile = default
      title = NAME-1
      type = Terminal
      uuid = 01e46a5a-0a12-4861-a81e-e376af6041a7
    [[[terminal4]]]
      command = COMMAND2
      order = 1
      parent = child2
      profile = default
      type = Terminal
      uuid = 094d544d-944c-48a7-9960-00370253e799
    [[[terminal6]]]
      command = COMMAND3
      order = 0
      parent = child5
      profile = default
      type = Terminal
      uuid = fe19f601-1963-4af7-8870-f90e289d3d27
    [[[terminal7]]]
      command = COMMAND4
      order = 1
      parent = child5
      profile = default
      type = Terminal
      uuid = 18ebf009-c427-4c2f-8017-78c379a72d31
[plugins]
[profiles]
  [[default]]
    cursor_color = "#aaaaaa"
    font = Monaco 11
    scrollback_infinite = True
    scrollback_lines = 5000
    use_system_font = False

现在,修改你的 bash 脚本以替换COMMANDN你需要运行的实际命令:

#!/bin/bash

## change these to whatever you actually need
command1="echo one; bash"
command2="echo two; bash"
command3="tail -f /var/log/messages; bash"
command4="top"

## Modify terminator's config
sed -i.bak "s#COMMAND1#$command1#; s#COMMAND2#$command2#; s#COMMAND3#$command3#; s#COMMAND4#$command4#;" ~/.config/terminator/config

## Launch a terminator instance using the new layout
terminator -l foo

## Return the original config file
mv ~/.config/terminator/config.bak ~/.config/terminator/config

运行该脚本将打开一个带有 4 个窗格的新终端窗口,每个窗格运行一个命令。

重要的:如果命令是运行后退出的命令(而不是一直top运行直到您告诉它停止的命令),则需要作为命令,以便启动新的 shell。否则,命令将运行,shell 将立即退出。这就是为什么我在每个命令后面COMMAN; bash都有,但y 脚本除外。; bashtop

答案2

选择:

既然您提到您会接受替代解决方案,请考虑使用gnome-terminal。过去我曾为此编写过脚本,允许生成具有多个选项卡的窗口并运行自己的命令。例如,请参见:https://askubuntu.com/a/863179/295286

至于 Terminator 本身,它似乎允许通过--new-tab选项为现有窗口生成新选项卡,但除了通过--layout选项之外,我看不到使用单独命令生成多选项卡窗口的选项。当然,您可以自动执行此操作,因为布局都进入了~/.config/terminator/config文件,所以您可以写出自定义配置文件。如果我不会忘记的话,我会尝试写一个,但我认为gnome-terminal方法要简单得多,而且正是您想要的。

原始答案

Terminator 有一个layout首选项,您可以使用该首选项来设置特定数量的选项卡、拆分,并为它们分配特定的颜色配置文件。您需要做的是打开窗口,添加任意数量的选项卡,然后右键单击,转到首选项、布局选项卡,然后单击添加按钮

在此处输入图片描述

编辑完布局后,保存它。现在您可以调用 useterminator -l <Layout Name>来生成具有该选项卡集的窗口。例如,从我的屏幕截图中您可以看到我有custom布局,所以我会使用terminator -l custom

相关内容