Породите новые вкладки Terminator из сценария Bash

Я записал сценарий 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. Чтобы постараться не иметь четыре новых окна мечут икру каждый раз, когда я запускаю скрипт, я на самом деле хотел бы их всем, запускаются в других взглядах на единственное новое окно. Там какой-либо путь состоит в том, чтобы сделать это? В руководстве нет ничего.

Я принял бы решение, которое использует другой терминал.

7
задан 9 January 2017 в 02:53

2 ответа

Во-первых, откройте экземпляр разделителя, разделите его на 4 области, как желаемый и сохраните как новое расположение (удостоверьтесь, что закрыли все открытые окна терминала кроме того, которое Вы настроили со своим новым профилем). Для каждой из 4 областей добавьте пользовательскую команду, но просто добавьте текст COMMAND1, COMMAND2 и т.д. Сохраните новое расположение как 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

Теперь, измените свой сценарий удара для замены 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 который работает, пока Вы не говорите этому останавливаться), Вам нужно COMMAN; bash как команда так, чтобы была запущена новая оболочка. Иначе команда будет работать, и оболочка сразу выйдет. Вот почему я имею ; bash после каждой команды кроме top в y сценарии.

8
ответ дан 23 November 2019 в 06:20

Альтернатива:

Поскольку вы упомянули, что примете альтернативное решение, рассмотрите возможность использования gnome-terminal. В прошлом я писал для этого сценарии, которые позволяют открывать окно с несколькими вкладками и запускать собственные команды. Посмотрите, например, на это: https://askubuntu.com/a/863179/295286

Что касается самого терминатора, кажется, что он позволяет создавать новые вкладки для уже существующего окна через [ 111], но я не вижу возможности вызывать окно с несколькими вкладками с отдельными командами, кроме как с помощью опции --layout. Конечно, вы можете автоматизировать это, так как все макеты помещаются в файл ~/.config/terminator/config, так что вы можете написать собственный файл конфигурации. Я постараюсь написать один, если не забуду, но я думаю, что gnome-terminal подход гораздо проще и именно то, что вы хотите.

Исходный ответ

Терминатор имеет предпочтение layout, которое можно использовать с определенным количеством вкладок, разделений и назначать им определенные цветовые профили. Что вы хотите сделать, это открыть окно, добавить сколько угодно вкладок, а затем щелкнуть правой кнопкой мыши, перейти на вкладку «Предпочтения», макеты и нажать кнопку добавления

enter image description here

Как только вы закончите редактирование макета, сохраните его. Теперь вы можете вызвать use terminator -l <Layout Name>, чтобы вызвать окно с этим точным набором вкладок. Например, из моего скриншота видно, что у меня есть макет custom, поэтому я бы использовал terminator -l custom

4
ответ дан 23 November 2019 в 06:20

Другие вопросы по тегам:

Похожие вопросы: