Есть ли способ узнать индекс панели конкретной панели в Tmux?
Я знаю, что могу запустить что-то вроде:
tmux display-message -p "#{pane_index}"
но это работает только на активной панели. Я хочу, чтобы он работал для любой панели, на которой он запущен. Обычно, конечно, сложно запустить скрипт на панели, которая не является активной панелью, но вы можете это сделать, если используете :set-window-option synchronize-panes
синхронизацию ввода между всеми панелями.
Как бы я использовал это?
В моей работе мне нужно одновременно подключаться к нескольким одинаковым серверам в балансировщике нагрузки, что я делаю с панелями Tmux. Обычно я включаю функцию синхронизации панелей, чтобы все, что я печатаю, одинаково отправлялось на каждую панель одновременно. Это прекрасно работает.
Я обнаружил, что мне хотелось бы подключаться к серверам и иногда делать что-то уникальное для каждой панели, каждый раз используя один и тот же «индекс панели». Например, я бы запустил такую команду:
ssh NODE_$(get_pane_number)
который при синхронизации и запуске на каждой панели будет запускать следующие команды в окне с 4 панелями:
ssh NODE_0
в панели 0
ssh NODE_1
в панели 1
ssh NODE_2
в панели 2
ssh NODE_3
в панели 3
Конечно, я мог бы написать это, но это хорошо сработало бы, прежде чем я начал синхронизировать входные данные. Иногда я хотел бы сделать это после того, как начал синхронизировать входы.
Вы можете получить весь индекс панели, а также много другой информации о панелях с
См.
tmux(1)
ФОРМАТЫ, чтобы получить список информации, которую вы можете получить и работать с ней.источник
get_pane_number
который на самом деле возвращает правильный # без активной панели.Основываясь на двух предложенных решениях, я обнаружил, что эта функция работает для меня:
или то же самое, начиная с индекса = 1
Это не самый красивый, но он работает, и я могу бросить его в свой
.bashrc
и просто использовать$I
всякий раз, когда мне нужноисточник