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에서
물론 스크립트를 작성할 수도 있지만 괜찮을 것입니다.앞으로나는 동시에 타이핑을 시작했습니다. 때로는 동기화 입력을 시작한 후에도 이 작업을 수행하고 싶을 때가 있습니다.
답변1
멀티플렉서(v1.5부터) 창에 대해 시작된 프로세스의 컨텍스트에서 TMUX_PANE을 제공하세요. 각각의 새 창은 서버 고유 값을 얻습니다. 따라서 귀하의 환경에서 TMUX_PANE을 사용할 수 있다고 가정하면 이는 귀하가 원하는 대로 작동할 것입니다.
tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'
Bourne과 같은 쉘의 구문은 ${…:?}
누락되거나 비어 있는 인수의 확장을 방지합니다. 이 경우 빈 확장은 "현재 활성 창"의 기본 설정을 사용하는 것으로 대체됩니다. 이는 일반적으로(항상은 아니지만) "이 창"과 동일합니다(명령의 tty가 해당 창이 아닌 경우 다를 수 있음)멀티플렉서예를 들어 다음을 사용하여 시작되었습니다.스크립트또는예상되는기다리다).
답변2
모든 창의 색인과 창에 대한 기타 많은 정보를 얻을 수 있습니다.
tmux list-panes -a
tmux(1)
귀하가 얻고 사용할 수 있는 정보 목록의 형식을 참조하십시오 .
답변3
제안된 두 가지 솔루션을 기반으로 이 기능이 나에게 적합한 것을 찾았습니다.
I=$(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}')
또는 index=1로 시작하는 동일한 콘텐츠
I=$(($(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}') + 1))
가장 예쁘지는 않지만 효과가 있고 컴퓨터에 보관했다가 필요할 때마다 .bashrc
사용할 수 있습니다.$I