Предположим, следующий сценарий. У меня есть машины с именами от host1 до host4 к которым я хочу подключиться на одной панели каждая.

Я равномерно разделил окно Tmux на четыре панели, чтобы каждая из них могла разместить SSH-соединение с этими хостами.

Все хорошо, когда уже подключены и синхронизированы панели. Я могу выдавать команды, которые выполняются на всех хостах одновременно.

Однако теперь я подумал, что было бы неплохо иметь возможность подключиться к каждому хосту, выполнив точно такую же команду. Таким образом, я мог включить синхронизацию между панелями еще до подключения к этим хостам.

Увы, я не могу придумать метод, который работает. Что я попробовал, так это:

ssh root@host$(tmux run "echo '#{pane_index}'")

Идея заключается в том, что это должно разрешиться в ssh root@host1 через ssh root@host4 зависимости от области, в которой запускается команда.

К сожалению, результат был довольно неожиданным. Несмотря на то, что команда была выполнена (когда панель 1 была активной), все соединения были установлены с host1 . Очевидно, что переменная pane_index ссылается на текущую активную панель, а не на панель, в которой выполняется команда.

Как я могу добиться соединения с host1 через host4 используя индекс панели (или что-то еще), выполняя точно такую же команду в каждой панели, вместо того, чтобы вводить отдельные команды?

Примечание: все индексы начинаются с 1, но, конечно, это можно сделать, даже если это не так, например, с помощью $((...)) в Bash.

1 ответ1

0

Вы можете использовать переменную $TMUX_PANE которую tmux помещает в среду команды каждой панели. Например, если вы даете команду

tmux send-keys  'echo host${TMUX_PANE#%}' Enter

вы увидите на каждой панели host0 или host1 и так далее. Так что замените echo командой ssh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .