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

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

  • В Openbox можно выполнить команду в соответствующем окне или открыть новую, если совпадение не существует?
  • Как выполнить удаленную команду для существующей сессии ssh
  • привязка ключа tmux к содержимому панели панели программы
  • tmux status-bar поврежден после обращения к двоичному файлу, как сбросить?
  • Пусть удаленный сеанс ssh знает о tmux?
  • Запуск существующего сеанса tmux при входе в SSH или создание, если не существует
  • Различные цвета и стили vim в Tmux и Gnome
  • Как предотвратить закрытие терминала при запуске программы с завершением?
  • 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'

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