외부 세션에서는 pane_cur="$(tmux display-message -p '#{pane_id}' | cut -c 2 | bc)"
내부 세션의 창을 사용하여 창 전환 동작을 제어합니다. 현재는 내부 세션이 아닌 외부 세션의 포드 ID만 가져오고 있습니다.
외부 창 ID를 기반으로 중첩된 세션을 드릴다운하고 창 ID가 있는 경우 이를 가져오려면 어떻게 해야 합니까?
답변1
예비 설명
이 답변에서는 모든 tmux 세션이 단일 tmux 서버 내에 존재한다고 가정합니다. 외부 및 내부 세션이 서로 다른 tmux 서버(동일하거나 다른 시스템에서 실행)에 속하는 경우 상황은 훨씬 더 복잡하며 이 답변은 적용되지 않습니다.
분석하다
하나의 tmux 세션(예: 외부 세션)에서 다른 tmux 세션(예: 내부 세션)에서 일부 정보를 얻으려면 다른 세션을 대상으로 해야 합니다. 많은 tmux 명령( tmux 포함 display-message
) 에서 -t
대상을 사용하고 지정할 수 있습니다.
내부 세션이 다음 명령이라는 것을 알고 있는 경우 1
:
tmux display-message -t 1: -p '#{pane_id}'
세션 내 현재 창에서 현재 활성화된 창의 ID를 제공합니다.
어떤 번호(또는 세션 이름)를 사용해야 할지 모르는 경우 tmux에 문의해야 합니다. 이것이 "드릴다운"이라는 의미인 것 같습니다.
프로그램
다음을 수행할 수 있습니다.
tmux display-message -p '#{pane_id}'
당신에게 주어진 것으로 가정합니다%5
. 외부 세션의 활성 창입니다.실제로 창의 ID는 필요하지 않습니다. Pod의 프로세스에 대한 tty tmux를 생성해야 합니다. 예를 들어 it을 사용하여
tmux display-message -p '#{pane_tty}'
얻을 수 있습니다/dev/pts/2
.이 창의 내부 세션에 tmux 클라이언트가 연결되어 있다고 가정하면 tty를 사용하여 클라이언트 세션을 찾아야 합니다. 이라고 불리는
tmux list-clients -F '#{client_tty} #{client_session}'
출력은 다음과 같습니다./dev/pts/1 foo /dev/pts/2 1
/dev/pts/2
이제 어떤 세션을 사용해야 하는지 알았습니다1
.이 세션의 활성 창을 식별합니다.
tmux display-message -t 1: -p '#{pane_id}'
더 깊이 드릴링하려면(다른 중첩 세션이 있기 때문에) (2)로 이동하세요. 하지만 이번에는 방금 연구한 창을 대상으로 해야 합니다.
예제 쉘 코드
#!/bin/sh
pane="$(tmux display-message -p '#{pane_id}')" || exit 1
while
tty="$(tmux display-message -t "$pane" -p '#{pane_tty}')"
session="$(
tmux list-clients -F '#{client_tty} #{client_session}' \
| grep "^$tty " | head -n 1 | cut -d ' ' -f 2-
)"
[ -n "$session" ]
do
pane="$(tmux display-message -t "$session:" -p '#{pane_id}')"
done
printf '%s\n' "$pane"
코드는 모든 오류를 처리하려고 시도하지 않습니다. 특히 코드 런타임 창이나 세션이 삭제되면 $session
한 호출의 정보(예:)가 tmux
다음 호출에 사용될 때 유효하지 않을 수 있습니다 tmux
.
코드를 로 저장하고 scrpt
, 실행 가능하게 만들고, watch ./scrpt
가장 바깥쪽 tmux 세션의 셸에서 실행하여 테스트했습니다. 내 테스트에서는 최대 3개의 추가 수준의 중첩된 tmux를 만들었지만 코드는 모든 깊이를 처리하도록 설계되었습니다.
사이드 노트
printf '%s\n' "${pane#%}"
%
그것이 당신이 원하는 것이라면, 앞부분 없이 숫자를 줄 것입니다. 하지만 tmux에서는 pane_id
이것이 유일한 조합 표현 %
이지 pane_index
유일한 조합 표현이 아니라는 점을 기억하세요 %
. 반환 %
에서 해당 숫자를 제거하고 나중에 tmux에서 사용 하면 pane_id
(다시 추가하지 않고 %
) 로 해석될 수 있습니다 pane_index
.