Есть ли более элегантный способ отключить двух клиентов tmux, которые используют сеанс изнутри tmux?

Это почти вопрос проверки кода , но очень * nixy и больше о конфигурации, чем о коде. В течение многих лет с тех пор, как я переключился на tmux с screen у меня было несколько неприятных проблем, которые я не мог сделать так, как хотел. Поскольку я устанавливаю свою оболочку в exec в сеанс tmux, я наконец решил, что пришло время исправить это.

По умолчанию при подключении двух tmux-клиентов к одному сеансу они блокируются. Переключайте панели в одном и обоих переключателя синхронно. Это отличается от экрана, где поведение по умолчанию было общим набором панелей, но сам клиент был независимым.

То, что я хотел, было способом un-bind двух tmux-клиентов, подключенных к одному сеансу. Это достаточно легко сделать, если вы находитесь за пределами tmux и запускаете нового клиента. Просто запустите новый сеанс со ссылкой на родительский:

 tmux new-session -t original_session -s new_session 

Однако попробуйте сделать это после того, как вы находитесь в клиенте и хотите отключить его от того, что другой клиент использует этот сеанс, и все усложняется. Я пробовал десятки способов и никогда не попадал на тот, который хорошо работал. Самое близкое, что я получил, это использовать bind <key> prompt-command ... для запроса как старых, так и новых имен сеансов. По какой-либо причине tmux не расширяет переменную #{session_name} внутри аргументов для команды new-session или prompt-command . Он используется в аргументах для многих других команд (например, я использую его в run ниже), но без этого расширения эта конкретная задача становится неожиданно сложной. Даже при ручном вводе значений он работал только когда-либо.

Сегодня я, наконец, получил его на работу. Результат, однако, более уродливый, который мне бы понравился. Для выполнения большей части магии требуется функция оболочки. Чтобы скрыть это только к файлу конфигурации без привлечения внешних скриптов (для точечной переносимости), я использую хак. Конфигурация, если вы обрезаете первые два столбца, на самом деле исполняема как сценарий оболочки. Со всем, что связано с функциями, вы можете вызывать только часть скрипта, который вам нужен, от любого связывания ключей. Биты сценария оболочки представляют собой комментарии в конфигурации, в то время как в сценарии оболочки бит конфигурации config отбрасывается с помощью здесь-doc.

Сегодняшнее решение получило что-то вроде этого ( мой полный файл .tmux.conf ):

 # : << ENDOFCONF # Clear the default binding unbind Cc # Pass the name of the current session to a function to clone it bind Cc run "cut -c3- ~/.tmux.conf | sh -s clone #S" # ENDOFCONF # clone () { # orig=${1%-*} # copy="$orig-$(($( tmux list-sessions -F '#S' | sed -nE "/^${orig}-[0-9]+$/{s/[^0-9]//g;p}" | tail -n1 )+1))" # TMUX= tmux new-session -d -t $orig -s $copy # tmux switch-client -t $copy # tmux set -q -t $copy destroy-unattached on # } # $@ 

Имейте в виду, что это работает. Из работающего tmux-клиента Ctrl + B Ctrl + C создает новый сеанс с номером, добавленным к имени текущего, использует текущий в качестве цели для панелей и переключается на него.

Я доволен этим, за исключением нытье, что я только что сделал что-то простое, намного сложнее, чем нужно. Есть ли более простой способ достичь этого?

One Solution collect form web for “Есть ли более элегантный способ отключить двух клиентов tmux, которые используют сеанс изнутри tmux?”

Это то, что я сделал:

 alias ta='export NEW_SESSION=\$(uuidgen) ; tmux new-session -t 0 -s \$NEW_SESSION ; tmux kill-session -t \$NEW_SESSION' 

Это означает создание нового сеанса из сеанса с именем «0» (то, что первый сеанс назван, если вы не укажете), назвал что-то уникальным случайным (используя uuidgen), а затем убить его, когда я отсоединяюсь.

Обратите внимание, что я использую zsh. 'ta' не подходит для 'tmux attach'

  • Убивание сгруппированных сеансов при отсоединении клиента
  • tmux не раскрашивает подсказку PS1
  • TMUX 2.3 копировать в буфер обмена
  • Файл tmux.conf не будет использовать запятую в строках \;
  • Каждый раз, когда я запускаю tmux, запускается новый дочерний процесс ssh-agent (zshell)
  • Как изменить определенные привязки клавиш в Tmux?
  • Граница Tmux разделена на rxvt
  • установка tmux на Ubuntu 8.04
  • Tmux, изменить окно окна с помощью мыши
  • Две команды префикса для tmux?
  • Правильно удалите сокеты, случайно созданные с помощью tmux
  • tmux случайные символы, появляющиеся в терминале
  • Linux и Unix - лучшая ОС в мире.