나는 다음을 수행하고 있습니다(이것은 단지 예일 뿐이며 쉼표는 더 복잡합니다).
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
(또는 유사한) disown
및 tmux new-window
명령 사이. 분명히 xterm은 이 명령을 실행하기 전에 설정을 완료하지 않았기 때문에 tmux new-window
지연을 설정하지 않는 한 세션이 생성되기 전에 실행됩니다.
작동하지만 우아하지는 않습니다. tmux
대기 세션이 alpha
종료되도록 하는 방법이 있습니까 ?
답변1
이 작업은 두 가지 방법으로 수행할 수 있습니다.
이
sleep
방법을 사용하십시오.sleep
시간을 너무 짧게 선택해서 가끔 실패한다는 점을 제외하고 는 사용에 아무런 문제가 없다고 생각합니다. 확실히하려면 다음을 사용하십시오.while ! tmux has-session; do sleep 1; done
또는
while ! tmux has-session -t alpha; do sleep 1; done
다음과 같은 것을 사용하십시오
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