Tmux-스크립트에서 창에있는 각 창의 창 번호를 가져 옵니까?


12

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에서

물론 이것을 스크립트 할 수는 있지만 입력 동기화를 시작 하기 전에는 잘 작동합니다 . 입력 동기화를 시작한 후이 작업을 수행하려는 경우가 있습니다.

답변:


12

tmux (v1.5부터)는 분할 창에 대해 실행되는 프로세스 환경에서 TMUX_PANE를 제공합니다. 각각의 새 분할 창은 서버 고유 값을 얻습니다. 따라서 환경에서 TMUX_PANE을 사용할 수 있다고 가정하면 원하는대로해야합니다.

tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'

${…:?}Bourne 유사 쉘 의 구문은 누락되거나 비어있는 매개 변수의 확장을 방지합니다. 이 경우 빈 확장은 "현재 활성 창"을 사용하는 기본값으로 대체됩니다. 일반적으로 "항상 그런 것은 아니지만"이 창과 같습니다 (명령의 tty가 아닌 경우에는 다를 수 있음) 것을 TMUX은 시작, 예를 때문에 사용하는 스크립트 또는 기대 ) 등등.


단! 완전히 해냈습니다 ... 대단히 감사합니다!
브래드 파크

"$ {TMUX_PANE :?}"구문은 생선 껍질에서 작동하지 않습니다
CodyChan

2

당신은 모든 창 인덱스뿐만 아니라 창에 대한 많은 다른 정보를 얻을 수 있습니다

tmux list-panes -a

tmux(1)얻을 수 있고 작업 할 수있는 정보 목록을 얻으려면 형식을 참조하십시오 .


1
피드백 주셔서 감사합니다-그러나 이것은 어느 창이 어느 것인지 알려줍니다-이미 0-3의 창이 창에 있다는 것을 알 수 있습니다. 창을 활성화 하지 않고get_pane_number 실제로 올바른 # 반환 하는 bash 스크립트를 작성할 수 있기를 원합니다 .
브래드 파크

2

제안 된 두 가지 솔루션을 구축 하면서이 기능이 저에게 효과적이라는 것을 알았습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.