从 Bash 脚本生成新的终结者选项卡

Ben*_*son 11 bash scripts 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>" &
Run Code Online (Sandbox Code Playgroud)

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

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

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

ter*_*don 10

首先,打开一个终结器实例,根据需要将其拆分为 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
Run Code Online (Sandbox Code Playgroud)

现在,修改您的 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
Run Code Online (Sandbox Code Playgroud)

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

重要:如果命令是运行然后退出的东西(而不是像top运行直到你告诉它停止的东西),你需要COMMAN; bash作为命令来启动一个新的shell。否则,命令将运行,shell 将立即退出。这就是为什么我; bash在除了topy 脚本之外的每个命令之后都有。


Ser*_*nyy 5

选择:

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

至于终结者本身,它似乎允许通过--new-tab选项为已经存在的窗口生成新选项卡,但我看不到通过--layout选项以外的单个命令生成多选项卡窗口的选项。当然,您可以自动化它,因为布局都在~/.config/terminator/config文件中,因此您可以写出自定义配置文件。如果我不会忘记,我会尝试写一个,但我认为gnome-terminal方法要简单得多,而且正是您想要的。

原答案

终结者有一个layout首选项,您可以将其与特定数量的选项卡、拆分一起使用,并为其分配特定的颜色配置文件。您要做的是打开 window ,添加所需的选项卡数量,然后右键单击,转到 Preferences , layouts 选项卡,然后单击添加按钮

在此处输入图片说明

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