tmux new-window --- 세션이 끝날 때까지 기다리시겠습니까?

tmux new-window --- 세션이 끝날 때까지 기다리시겠습니까?

나는 다음을 수행하고 있습니다(이것은 단지 예일 뿐이며 쉼표는 더 복잡합니다).

xterm -fa "Inconsolata" -e tmux new-session -s alpha &
disown %%
tmux new-window -t alpha bash
tmux new-window -t alpha zsh 

...이것을 터미널에 입력하면 완벽하게 작동하여 세 개의 창이 있는 tmux 세션이 있는 xterm이 제공됩니다. 하지만 이것을 스크립트에 넣으면 작동이 중지됩니다.

 no server running on /tmp/tmux-1153/default
 no server running on /tmp/tmux-1153/default

오류가 발생했으며 tmux새 세션에는 창이 하나만 있습니다 alpha.

몇번의 실험 끝에 발견했습니다~ 할 것이다내가 추가하면

sleep 5

(또는 유사한) disowntmux new-window명령 사이. 분명히 xterm은 이 명령을 실행하기 전에 설정을 완료하지 않았기 때문에 tmux new-window지연을 설정하지 않는 한 세션이 생성되기 전에 실행됩니다.

작동하지만 우아하지는 않습니다. tmux대기 세션이 alpha종료되도록 하는 방법이 있습니까 ?

답변1

이 작업은 두 가지 방법으로 수행할 수 있습니다.

  1. sleep방법을 사용하십시오. sleep시간을 너무 짧게 선택해서 가끔 실패한다는 점을 제외하고 는 사용에 아무런 문제가 없다고 생각합니다. 확실히하려면 다음을 사용하십시오.

    while ! tmux has-session; do sleep 1; done
    

    또는

    while ! tmux has-session -t alpha; do sleep 1; done
    
  2. 다음과 같은 것을 사용하십시오xtoolwait백그라운드에서 X 클라이언트(터미널 에뮬레이터)를 시작하고 해당 창을 매핑한 후 반환됩니다.

두 번째 옵션(아마도 가장 좋을 것임)을 선택하는 경우 &터미널을 시작하는 명령 끝에서 를 제거해야 한다는 점을 기억하세요. 그러면 이 옵션 disown도 작업에 불필요해집니다.

명령은 다음과 같습니다.

xtoolwait xterm -fa "Inconsolata" -e tmux new-session -s alpha
tmux new-window -t alpha bash

Unix에 아직 설치되어 있지 않은 경우 xtoolwait패키지로 제공될 수 있습니다(오랜 시간 동안 사용되어 왔습니다).나이). 원하는 패키지 관리자를 사용하여 설치하세요.

편집하다tmux: 댓글을 보면, xtoolwait터미널을 사용하더라도 창 매핑 후 생성까지 시간이 오래 걸리는 것 같습니다. 따라서 이 경우에는 필요한 세션이 존재할 sleep 1때까지 호출을 반복합니다.tmux

관련 정보