Итак, один из подходов - создать новое окно и затем присоединить:
tmux -S /tmp/socket new-window -n vi /usr/bin/vi
tmux -S /tmp/socket attach
Таким образом, клиент может создать новое окно, а затем подключиться к нему.
Однако я подозреваю, что сеанс tmux может не делать то, что вы хотите.
Причина, по которой attach
не имеет команды, заключается в том, что сеанс представляет собой представление о том, что в настоящее время отображается на экране, которое совместно используется всеми подключенными клиентами. Так что присоединение с помощью команды немного странно. Все клиенты будут просматривать одно и то же, а вызов нового окна
изменит вид для всех подключенных клиентов.
Если вы хотите предоставить общий доступ к коллекции окон (например, представлениям запущенных программ), но у каждого клиента будет отдельный вид, тогда вам необходимо создать сеансы. Вы можете использовать аргумент -t
для new-session
, чтобы создать сеанс, который использует свои окна совместно с другим сеансом. Очевидно, вы не можете использовать -t
вместе с командой для нового сеанса, что на самом деле является допустимым вариантом использования, поэтому вы в конечном итоге используете флаг -d
, а затем создаете команда. Что еще больше раздражает, может показаться, что в new-window
отсутствует аргумент сеанса, поэтому вместо этого вы полагаетесь на порядок, в котором вызываются вещи!
tmux -S /tmp/socket new-session -s base # run once
# For each client
tmux -S /tmp/socket new-session -t client-view -d
tmux -S /tmp/socket new-window /usr/bin/vi
tmux -S /tmp/socket attach -t client-view
Это все немного путаницы, мне удавалось эффективно использовать такой подход в течение ряда лет. (Каждое из моих окон терминала представляет собой отдельный вид на общий сеанс tmux).
Возможно, вас заинтересует этот сценарий https://github.com/rainerborene/tmx/blob/master/tmx , который объединяет все это в один сценарий оболочки.