tmux: объединить все окна как панели

Я запускаю GNU Parallel с —tmux, который запустит окно tmux для каждого задания.

Я хотел бы объединить все окна в виде панелей с размером, красиво распределенным между ними (например, черепичный вид: Cb M-5).

Я пробовал делать:

seq 15 | parallel tmux -S /tmp/tmsF8j3K joinp -s {} -t 1 

Но он не распределяет высоту равномерно, в результате чего:

 create pane failed: pane too small 

Есть ли способ сказать окну равномерно распределить высоту при joinp или способ присоединиться ко всем окнам в виде панелей, а затем их черепицей? Может быть, что-то, использующее select-layout tiled ?

редактировать

Я использую это как тестовую программу:

 seq 1000 | parallel --jobs 9 --tmux sleep 

Цель состоит в том, чтобы 9 рабочих заданий отображались в хорошем окне 3×3 при подключении к tmux. Когда одна работа умирает, ее следует заменить следующей работой.

Я пытался:

 while [ -e "$SERVER" ] ; do top=$(tmux -S $SERVER new-window -P -n all) tmux -S $SERVER list-panes -a | grep -v "^$top" | cut -d':' -f1-2 | while read p ; do tmux -S $SERVER joinp -s $p -t $top tmux -S $SERVER select-layout tiled done tmux -S $SERVER kill-pane -t $top tmux -S $SERVER select-layout tiled sleep 1 done 

Но он все равно дает:

 can't find pane X 

И не прикрепляет все окна как панели в первом окне при прикреплении.

2 Solutions collect form web for “tmux: объединить все окна как панели”

Вместо того, чтобы запускать отдельную команду, возможно в цикле, для перемещения панелей после их создания, вы можете расширить команду задания, чтобы она перемещала свою собственную панель при запуске:

 seq 1000 | parallel --jobs 9 --tmux tmux joinp -t :0 \; \ tmux select-layout -t :0 tiled \; \ sleep 

Это покажет дополнительные команды tmux (а затем их вывод, arranging in: tiled ) в каждой панели. Чтобы этого избежать, вы можете написать сценарий оболочки, например.

 #!/bin/sh # move into the pane set tmux joinp -t :0 tmux select-layout -t :0 tiled >/dev/null # start the real task sleep "$@" 

А затем запустите

 seq 1000 | parallel --tmux --jobs 9 /path/to/wrapper.sh 

Ваше предложение select-layout находится по правильному пути, но его нужно вызвать после создания каждой новой панели. Все панели сразу же реорганизуются, поэтому (в моем тесте – терминал 95×58) достаточно места для следующего разделения.

Чтобы избежать can't join a pane to its own window сообщению, это помогает создать дополнительное окно, а затем переместить все существующие окна в это и закончить дополнительную панель в конце. parallel не является подходящим инструментом для этого – вам будет лучше опросить запущенные окна и перемещать их в цикле:

 top=$(tmux -S $SERVER new-window -P -n all) tmux -S $SERVER list-panes -a | grep -v "^$top" | grep -o "%[0-9]\+\>" | while read p ; do tmux -S $SERVER joinp -s $p -t $top tmux -S $SERVER select-layout tiled done tmux -S $SERVER kill-pane -t $top tmux -S $SERVER select-layout tiled 

В качестве альтернативы вы можете сделать каждую новую высоту линии 1 с помощью joinp -l 1 . В зависимости от размера вашего терминала этого может быть достаточно, чтобы в конце был нужен только один select-layout .

Однако parallel не отслеживает существующие окна / панели tmux и просто запускает каждое задание в новом окне. Старый может исчезнуть, в зависимости от настройки останова на выходе . Поэтому через некоторое время исходное окно (которое показывает каждое задание в панели) не будет содержать заданий, и все новые задания будут снова появляться в их собственных окнах. Вам придется перезапустить скрипт, чтобы снова переместить все окна (и любые старые панели) в одно окно.

  • Как я могу установить оболочку по умолчанию для запуска tmux
  • TMUX Ctrl и Shift Keys
  • «Заменить» оболочку по умолчанию (bash) с помощью tmux
  • Сделайте панель шириной 80 (или около того) шириной
  • Когда tmux входит в режим копирования, существует ли относительный номер строки, как Vim?
  • Имейте tmux, подождите, пока я не задержу SSH, чтобы завершить остальную часть сценария Tmuxinator
  • Почему я не могу найти страницу руководства tmux для join-pane?
  • Запустить R-код из vim-r-plugin в виде отдельного окна вместо внутреннего tmux / screen?
  • Почему операция копирования tmux всегда выводит временную тарабарщину на терминал?
  • Почему tmux открывает новое окно терминала?
  • Гармонический текст в меню tmux
  • Interesting Posts

    Как унаследованная уязвимость файлового дескриптора рассматривается в Unices?

    Загрузка Debian с зашифрованными дисками: RAID не собран

    Повторное кодирование видео с помощью ffmpeg, включая все субтитры, но не все аудио

    Как использовать awk для подсчета общего количества строк ввода в файле?

    Используйте rsync для зеркалирования источника для развертывания веб-сайта, но не для удаления выбранных файлов в месте назначения

    Узнайте, работает ли ОС в виртуальной среде

    Настройка цветов LS с человеко-читаемым скриптом в tcsh

    df -h показывает размер fs меньше размера LV

    Чтобы cd в директорию

    Вариант LILO vga

    Использование Creative Sound Blaster на сервере Ubuntu

    Использование ввода файла как stdin для сценария оболочки не работает

    Как получить текущую пользовательскую среду в pam_script?

    Как удалить упрямый каталог?

    Как я могу добавить пакет сертификатов x509 (ca-bundle.crt) в базу данных NSS (~. / Pki / nssdb)

    Linux и Unix - лучшая ОС в мире.