Есть ли простой способ «перезапустить» панель tmux?

48

Предположим, у меня есть tmux(1.7) окно, разделенное следующим образом:

 ________________________
|           1            |
|                        |
|-----------+------------|
|     2     |      3     |
|___________|____________|

Теперь, вертикальные размеры были настроены, так что это ни в коем случае не один из макетов по умолчанию.

Иногда, когда программа застревает или когда вы перезагружаете компьютер, к которому вы подключились ssh, панель «зависает». Т.е. ничто иное, как kill-paneкажется, не работает.

Однако, так как нет простого способа перестроить вышеупомянутую разделенную конфигурацию после того, как панель № 1 была kill-paneсделана, я хотел бы ее «перезапустить».

0xC0000022L
источник

Ответы:

82

Глядя на руководство, команда respawn-paneпоразила меня, но оказалось, что это не сработало. Читая более внимательно, оказалось, что это respawn-pane -kбыл ответ, так как это убило бы работающую команду.

Таким образом, панель можно «перезапустить» и заново создать на месте.

Итак <prefix>+, :а затем введите respawn-pane -kи нажмитеEnter

0xC0000022L
источник
4
Или используйте без, -kесли вы создали панель в remain-on-exitрежиме и убили команду самостоятельно.
Петер
ты был порожден заново, аминь
камбунктив
4

На самом деле, существует способ перестроить макет - он list-windowsдает описание макета для всех окон в сеансе и select-layoutможет переварить анализ строки и соответственно настроить макет (см. select-layoutНа странице руководства tmux(1)).

Что касается вашей проблемы с ssh - серверы ssh должны закрывать соединение, как только система выключается (хотя я видел некоторые дистрибутивы Linux, которые каким-то образом портят правильное поведение, не выключая демон ssh и не запуская сеансы должным образом) - если это так, см. ESCAPE CHARACTERSраздел (и другие места, относящиеся к нему) ssh(1)символ экранирования, за которым следует .(точка), принудительно завершает соединение на стороне клиента. Конечно, это не поможет, если вы просто создали панель для sshзапуска в ней, но если вы столкнетесь с проблемой чаще, возможно, вы захотите запустить оболочку в панели и вызвать из нее ssh.

peterph
источник
Я проголосовал за ваш ответ, потому что он добавляет ценность. Но вот почему escape-символы не обязательно являются хорошей идеей: использовать сеанс ssh для подключения к сеансу tmux, в котором есть открытые соединения ssh. Затем вам внезапно нужно подумать о том, как отправить escape-символ за пределы первого ssh-соединения, чтобы достичь внутреннего (ых). И, кстати, я обычно запускаю ssh из оболочки.
0xC0000022L
1
Практически то же самое, что и при запуске вложенных сеансов tmux. Либо у вас есть разные escape-символы во внешнем и внутреннем сеансе (будь то ssh или tmux one), либо вы просто отправляете escape-символ дважды - что превращает его в одиночный во вложенный сеанс (аппаратное поведение для ssh, настраивается в tmux).
Петер