동기화된 창이 있는 창에서 각 창의 색인을 얻는 방법은 무엇입니까?

동기화된 창이 있는 창에서 각 창의 색인을 얻는 방법은 무엇입니까?

다음 시나리오를 가정해 보겠습니다. 하나의 창에 각각 연결하려는 이름이 host1지정된 컴퓨터가 있습니다 .host4

Tmux 창을 4개의 창으로 균등하게 분할하여 각 창에서 해당 호스트에 대한 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. $(foo)작업 하려면 foo원하는 정보를 표준 출력으로 인쇄해야 합니다. tmux run …이런 짓은 안 하네; 그것디스플레이복사 모드의 결과입니다. 당신은 원한다 tmux display -p ….

  2. tmux display -p '#{pane_index}'창별로 명령 창을 호출할 때 유용한 숫자를 제공할 수 있지만 동기화된 창에서는 출력이 동일합니다. 이는 창을 지정하지 않으면( 사용하여 -t) 현재 활성 창이 가정되기 때문입니다. 창별로 창을 호출하면 적절한 창이 활성화될 때마다. 동기화된 창에서 호출하면 정확히 하나의 창이 활성화되고 해당 인덱스가 모든 명령에 의해 반환됩니다.

  3. 명령이 실행되는 창을 안정적으로 식별하려면 $TMUX_PANE환경 변수를 사용하세요. 귀하의 경우에는 이 작업을 직접 수행할 수 없습니다.

    # flawed
    ssh root@host"${TMUX_PANE#%}"
    

    문제 는 가 아니라 $TMUX_PANE에 해당합니다 . 창 ID는 전체 tmux 서버에서 고유합니다. 생성된 처음 4개의 창에 대해 , , 을 얻게 됩니다 . 이전에 다른 창이 생성된 경우 문제의 창에 , , , 가 표시될 수도 있습니다.#{pane_id}#{pane_index}%0%1%2%3%7%8%13%14

    올바른 방법은 $TMUX_PANE창을 지정하고 #{pane_index}원하는 번호를 검색하는 데 사용하는 것입니다.

해결책:

ssh root@host"$(tmux display -p -t "$TMUX_PANE" '#{pane_index}')"

host0.. 을 생성 하지만 ..을 ( host3를) 얻으려면 어떻게 해야 하는지 아시는 것 같습니다 host1. host4나는 솔루션을 난독화하지 않기로 결정했습니다 $((…)).

답변2

$TMUX_PANEtmux가 각 창의 명령 환경에 배치하는 변수를 사용할 수 있습니다 . 예를 들어 명령을 내리면

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

host0각 창에 , 또는 host1등이 표시됩니다 . 따라서 echo를 ssh 명령으로 바꾸십시오.

관련 정보