Как открыть терминал, разделить на 9 терминалов и переключаться между ними одним скриптом?

17

Я хотел бы открыть терминал, разделить его, скажем, на 9 частей (3х3) и выполнить некоторый скрипт bash. Но для каждой терминальной части свой скрипт.

Это можно сделать с помощью Perl, Python или даже Bash?

Как я могу переключаться между этими маленькими терминалами, не используя сочетания клавиш?

О, кстати, я использую terminator. И если есть какой-то другой эмулятор терминала, который обеспечивает такую ​​функциональность, что это?

jirislav
источник
terminatorэто не оболочка Называется два разных эмулятора терминалаterminator (я полагаю, что только один из них может разделить экран).
Стефан Шазелас
Ах, спасибо .. тогда я хотел бы знать, как разделить terminatorс помощью сценария? :) А переключаться между этими частями?
Юрислав
1
Я никогда не использовал его и не имею времени исследовать его сейчас, но я думаю (хотя и не уверен), что byobu может помочь вам, если вы используете терминалы в удаленной системе - см. Help.ubuntu. com / community / Byobu . Byobu работает на многих дистрибутивах * nix
Клайв ван Хилтен
1
Как @ClivevanHilten упомянул и ответил здесь, это можно сделать с помощью дружественного Byobu (который по умолчанию находится поверх tmux).
Пабло А

Ответы:

35

Чтобы заняться плагиатом , вы можете настроить профиль с желаемыми настройками (инструкции адаптированы отсюда ):

  1. Запустите terminatorи настройте макет, который вы хотите. Вы можете использовать Ctrl+ Shift+ Eдля разделения окон по вертикали и Ctrl+ Shift+ O(это O, как в oodles, а не ноль), чтобы разделить по горизонтали. Для этого примера я создал макет с 6 панелями:

    введите описание изображения здесь

  2. Щелкните правой кнопкой мыши по terminatorокну и выберите «Настройки». Когда окно настроек открыто, перейдите в «Макеты» и нажмите «Добавить»:

    введите описание изображения здесь

  3. Это заполнит список макетов новым макетом:

    введите описание изображения здесь

  4. Найдите каждый из терминалов, которые вы создали в макете, и нажмите на них, затем справа введите команду, которую вы хотите запустить в них при запуске:

    введите описание изображения здесь

    ВАЖНО: Обратите внимание, что за командой следует ; bash. Если вы этого не сделаете, терминалы не будут доступны, так как они будут выполнять команду, которую вы даете, и выходить. Вам нужно запускать оболочку после каждой команды, чтобы иметь возможность использовать терминалы.

    После того, как вы установили все команды, нажмите «Закрыть» и затем выйдите terminator.

  5. Откройте terminatorфайл конфигурации ~/.config/terminator/configи удалите раздел под макетами для конфигурации по умолчанию. Затем измените имя макета, который вы создали, по умолчанию. Это должно выглядеть примерно так:

    [global_config]
    [keybindings]
    [profiles]
      [[default]]
    [layouts]
      [[default]]
        [[[child0]]]
          position = 446:100
          type = Window
          order = 0
          parent = ""
          size = 885, 550
        [[[child1]]]
          position = 444
          type = HPaned
          order = 0
          parent = child0
        [[[child2]]]
          position = 275
          type = VPaned
          order = 0
          parent = child1
        [[[child5]]]
          position = 219
          type = HPaned
          order = 1
          parent = child1
        [[[child6]]]
          position = 275
          type = VPaned
          order = 0
          parent = child5
        [[[child9]]]
          position = 275
          type = VPaned
          order = 1
          parent = child5
        [[[terminal11]]]
          profile = default
          command = 'df -h; bash'
          type = Terminal
          order = 1
          parent = child9
        [[[terminal10]]]
          profile = default
          command = 'export foo="bar" && cd /var/www/; bash'
          type = Terminal
          order = 0
          parent = child9
        [[[terminal3]]]
          profile = default
          command = 'ssh -Yp 24222 cchapple@139.124.66.43'
          type = Terminal
          order = 0
          parent = child2
        [[[terminal4]]]
          profile = default
          command = 'top; bash'
          type = Terminal
          order = 1
          parent = child2
        [[[terminal7]]]
          profile = default
          command = 'cd /etc; bash'
          type = Terminal
          order = 0
          parent = child6
        [[[terminal8]]]
          profile = default
          command = 'cd ~/dev; bash'
          type = Terminal
          order = 1
          parent = child6
    [plugins]

Окончательный результат заключается в том, что при запуске terminatorон откроется с 6 панелями, каждая из которых запустила или выполняет указанные вами команды:

введите описание изображения здесь

Кроме того, вы можете установить столько разных профилей, сколько пожелаете, и либо запускать терминатор с помощью -pпереключателя, дающего имя профиля, либо вручную переключаться на тот профиль, который вы хотите после запуска.

Тердон
источник
Тердон, спасибо! Это, вероятно, где я научился писать этот файл конфигурации!
dotancohen
@dotancohen рад слышать, что я помогал :)
terdon
1
Whaou! Большое спасибо, "bash" спас мне жизнь!
Этьен
«Вам нужно запускать оболочку после каждой команды, чтобы иметь возможность использовать терминалы». Удивительно - это было совсем не интуитивно, когда я сначала попробовал это. Они должны включать какой-то флажок, чтобы автоматически включить это.
ДТМЛАНД
5

Вы ищете терминальный мультиплексор tmux.

https://github.com/tmux/tmux

Суджит Махарджан
источник
Да, это кажется еще одной возможностью, как выполнить то, что мне нужно. Спасибо :)
jirislav
tmuxотлично!
dotancohen
3

Когда я использовал terminatorэтот файл, это был RC-файл, который я использовал для открытия нескольких терминалов и запуска приложений. Сохраните его .config/terminator/config.

[global_config]
  title_hide_sizetext = True
  enabled_plugins = LaunchpadCodeURLHandler, APTURLHandler, LaunchpadBugURLHandler
[keybindings]
[profiles]
  [[default]]
    font = DejaVu Sans Mono 9
    cursor_blink = False
    scrollback_infinite = True
[layouts]
  [[default]]

    [[[root]]]
      position = -4:0
      type = Window
      order = 0 
      parent = ""
      size = 1072, 1884

    [[[grand]]]
      position = 536 
      type = HPaned
      order = 0 
      parent = root
    [[[left]]]
      position = 942 
      type = VPaned
      order = 0 
      parent = grand
    [[[right]]]
      position = 942 
      type = VPaned
      order = 1 
      parent = grand



    [[[terminal1]]]
      profile = default
      type = Terminal
      order = 0 
      parent = left
      command = "cd ~/code/foo; bash"
    [[[terminal2]]]
      profile = default
      type = Terminal
      order = 1 
      parent = left
      command = "cd ~/bar/baz; bash"



    [[[terminal3]]]
      profile = default
      type = Terminal
      order = 1 
      parent = right
      command = ""
    [[[terminal4]]]
      profile = default
      type = Terminal
      order = 0 
      parent = right
      command = "cmus; bash"



[plugins]

РЕДАКТИРОВАТЬ: Обратите внимание, что эта информация, вероятно, пришла из сообщения Тердона в гораздо более ранней теме. Я использовал эту настройку в течение нескольких месяцев, но пост Тердона здесь выглядит очень знакомым!

dotancohen
источник
Это то, что я искал - как разделить терминал и выполнить определенные сценарии - спасибо! Но я не хотел бы выполнять это каждый раз, как это. Есть ли возможность иметь больше таких конфигов и открывать каждый в зависимости от того, что мне нужно? Допустим, добавив параметр --config2 или --config1?
Юрислав
Вы не добавляете больше файлов конфигурации, вы добавляете разделы в файл конфигурации. Посмотрите пост Тердона, он очень хорошо объясняет, на самом деле я узнал об этом из его поста в предыдущей ветке.
dotancohen
О, я понимаю ... Таким образом, я принял его ответ как наиболее полезный. Но все равно спасибо.
Юрислав
Хороший выбор! Я на самом деле хотел предложить принять его ответ, так как информация пришла от его тяжелой работы!
dotancohen
2

Скрипт-обертка для расщепления эмулятора терминала Terminator https://github.com/AlekseyChudov/terminator-split

Алексей Чудов
источник
2
Вы должны включить соответствующую информацию здесь, как только github исчезнет, ​​ваш ответ потеряет всю свою потенциальную ценность.
Anthon
1
кажется хорошим .. но как мне запустить этот скрипт?
Сачин
1
terminator-splitимеет большой потенциал, но, похоже, нет способа запустить разные команды в разных разделениях, и -mаргумент, показанный в примерах, не указан в сводке об использовании
bitinerant