tmux: 모든 창을 창으로 병합

tmux: 모든 창을 창으로 병합

각 작업에 대해 tmux 창을 시작하는 --tmux를 사용하여 GNU Parallel을 시작합니다.

모든 창을 크기가 잘 분산된 창으로 결합하고 싶습니다(예: 타일 보기: Cb M-5).

나는 이것을 시도한다:

seq 15 | parallel tmux -S /tmp/tmsF8j3K joinp -s {} -t 1

그러나 높이가 균등하게 분배되지 않아 다음과 같은 결과가 발생합니다.

create pane failed: pane too small

joinping 할 때 창에 높이를 균등하게 분배하도록 지시 하거나 모든 창을 창으로 연결한 다음 타일링하도록 지시하는 방법이 있습니까 ? 어쩌면 어떤 용도로 쓰일까요 select-layout tiled?

편집하다

나는 이것을 테스트 프로그램으로 사용합니다.

seq 1000 | parallel --jobs 9 --tmux sleep

목표는 tmux에 연결될 때 멋진 3x3 창에 실행 중인 작업 9개를 표시하는 것입니다. 작업이 종료되면 다음 작업으로 대체되어야 합니다.

나는 시도했다:

while [ -e "$SERVER" ] ; do
    top=$(tmux -S $SERVER new-window -P -n all)
    tmux -S $SERVER list-panes -a | grep -v "^$top" | cut -d':' -f1-2 |
        while read p ; do
          tmux -S $SERVER joinp -s $p -t $top
          tmux -S $SERVER select-layout tiled
        done
    tmux -S $SERVER kill-pane -t $top
    tmux -S $SERVER select-layout tiled
    sleep 1
done

하지만 여전히 다음을 제공합니다.

can't find pane X

그리고 연결할 때 모든 창을 첫 번째 창의 창으로 유지하지 않습니다.

답변1

창을 만든 후 창을 이동하기 위해 별도의 명령(아마도 루프에서)을 실행하는 대신 시작 시 자체 창을 이동하도록 작업 명령을 확장할 수 있습니다.

seq 1000 |
 parallel --jobs 9 --tmux tmux joinp -t :0 \; \
 tmux select-layout -t :0 tiled \; \
 sleep

arranging in: tiled그러면 각 창에 다른 tmux 명령(및 해당 출력)이 표시됩니다. 이를 방지하려면 래퍼 스크립트를 작성할 수 있습니다.

#!/bin/sh

# move into the pane set
tmux joinp -t :0
tmux select-layout -t :0 tiled >/dev/null

# start the real task
sleep "$@"

그런 다음 실행

seq 1000 | parallel --tmux --jobs 9 /path/to/wrapper.sh

답변2

귀하의 select-layout제안은 정확하지만 새 창이 생성될 때마다 호출해야 합니다. 모든 창은 즉시 재구성되므로(내 테스트에서는 95x58 터미널) 다음 분할을 위한 충분한 공간이 있습니다.

can't join a pane to its own window메시지를 방지하려면 추가 창을 만든 다음 모든 기존 창을 해당 창으로 이동하고 마지막에 연결된 창을 종료할 수 있습니다. parallel올바른 도구는 아닙니다. 어떤 창이 실행되고 있는지 쿼리하고 각 창을 루프로 이동하는 것이 더 좋습니다.

top=$(tmux -S $SERVER new-window -P -n all)
tmux -S $SERVER list-panes -a | grep -v "^$top" | grep -o  "%[0-9]\+\>" | 
  while read p ; do 
    tmux -S $SERVER joinp -s $p -t $top
    tmux -S $SERVER select-layout tiled
  done
tmux -S $SERVER kill-pane -t $top
tmux -S $SERVER select-layout tiled 

또는 각 새 창을 1행 높이로 만들고 joinp -l 1터미널 크기에 따라 select-layout마지막 창만 있으면 충분할 수 있습니다.

그러나 parallel기존 tmux창/창은 추적되지 않으며 각 작업은 새 창에서 시작됩니다. 상황에 따라 오래된 것이 사라질 수도 있습니다.종료 시 변경되지 않은 상태로 유지환경. 따라서 일정 시간이 지나면 원래 창(각 작업이 창에 표시됨)에는 실행 중인 작업이 포함되지 않으며 모든 새 작업이 자체 창에 다시 나타납니다. 모든 창(및 이전 창)을 단일 창으로 다시 이동하려면 스크립트를 다시 실행해야 합니다.

관련 정보