실행중인 tmux 세션에서 tmux 창으로 명령 실행 또는 전송


60

명명 된 tmux 세션에 첨부 할 쉘 스크립트를 작성하고 해당 세션에서 창 (또는 창)을 선택한 다음 선택한 창 (또는 창)에서 명령을 실행하려고합니다.

bash 스크립트에서 어떻게합니까?

알아

tmux new-window -n:mywindow 'exec something'

새로 만든 창에 명령을 보낼 수 있지만 다음과 같은 것이 필요합니다.

tmux select-window -t:0 'my command'

사용할 수는 send-keys있지만 명령 또는 실행되는 명령 목록이 필요한 것으로 보입니다.

답변:


82

tmux 창은 단일 pty (의사 tty)에 대한 인터페이스입니다. 분리되지 않은 창에는 단일 창이 있습니다. 분할 창에는 여러 개의 창이 있습니다.

tmux 는 초기 명령으로 시작된 분할 창에 추가 프로세스를 추가하는 방법을 제공하지 않습니다. 해당 터미널에 대한 작업 제어 1 을 제공하는 것은 해당 초기 명령 프로세스 (일반적으로 쉘)에 달려 있습니다.

창에서 현재 실행중인 항목을 클로버하려는 경우 respawn-pane -k기존 명령을 종료하고 새 명령 (예 :)으로 바꾸는 데 사용할 수 있습니다 respawn-pane -t sessionname:0.4 -k 'some -new command'.

그러나 현재 창에서 실행중인 항목을 유지하려면 단순히 "입력"하는 더 나은 옵션이 없을 수도 있습니다 send-keys.

다음과 같이 스크립트를 작성해도됩니다 (마지막으로 첨부하십시오.

session=whatever
window=${session}:0
pane=${window}.4
tmux send-keys -t "$pane" C-z 'some -new command' Enter
tmux select-pane -t "$pane"
tmux select-window -t "$window"
tmux attach-session -t "$session"

온, 그 주 send-keys명령, 실제로 문자를 입력해야 E n t e r말해, tmux창에 줄 바꿈 키를 보낼 수 있습니다. 당연히 모든 명령은 Enter키로 끝납니다 .


1 작업 제어는 tty를 제어 터미널로 사용하는 단일 세션의 여러 프로세스 그룹 간의 중재입니다. 즉는는 Ctrl+ Z키 중단하고 jobs, fg그리고 bg쉘 명령.


2
감사합니다! #{session_name}:#{window_index}.#{pane_index}명령 줄을 보낼 창을 빠르게 볼 수 있도록 상태 표시 줄에 넣었습니다 .
유료 괴상

11

C-m대신 사용할 수 있습니다 Enter. 그건 같은거야. 또한, tmux쉽게 사용하여 왼쪽 / 오른쪽 창에 보낼 수 -t right또는 -t left. 다른 창에서 창에 주소를 지정하려면 창 번호와 마침표를 접두사로 지정하십시오 -t 0.right.

이제 간단한 Bash 함수를 작성하여 키 시퀀스를 인수로 가져 와서 대상 창으로 쉽게 보낼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.