tmux 세션을 시작하고 모든 하위 항목이 종료되는지 확인하십시오.

tmux 세션을 시작하고 모든 하위 항목이 종료되는지 확인하십시오.

저는 개발을 위해 tmux를 사용합니다. 하나의 작업은 창에서 실행되고 다른 작업은 자체적으로 실행됩니다. 프로젝트 디렉터리의 기본 이름이 tmux 세션 이름이라는 규칙을 설정했습니다.

export SESSION_NAME="my-project-name"
tmux kill-session -t "$SESSION_NAME"
tmux new-session -s "$SESSION_NAME" \
                "api.start --monitored" \; \
                split-window "ui.start --monitored" \; \
                select-layout tiled \; \
                set-option -w remain-on-exit on \; \
                set-option -w mouse on \; \
                set-option -g mouse on \; \
                bind-key -n C-c kill-session -t "$SESSION_NAME"

동일한 규칙으로 다른 프로젝트를 시작하는 경우를 제외하면 모두 제대로 작동하는 것 같습니다. 첫 번째 세션에서 CTRL+c를 누르면 SESSION_NAME이 가장 최근에 생성된 tmux 생성 세션 중 하나라고 생각하는데, 이는 내가 기대했던 것과 다릅니다.

답변1

게시한 스니펫에서 모든 모양은 $SESSION_NAME셸에 의해 확장되고 각각은 tmux확장된 값을 명령줄 인수로 가져옵니다.

(그렇지 않았고 $SESSION_NAME나중에 tmux 내부 또는 tmux 내부 쉘 내부에서 이것을 확장하고 싶었다고 해도 export SESSION_NAME="my-project-name"다음과 같은 이유로 쓸모가 없을 수 있습니다.tmux환경을 구축하는 방법. 옵션 update-environment이나 new-session -e …명령이 유용할 수 있습니다.)

여기 $SESSION_NAME에는 가 포함됩니다 bind-key -n C-c kill-session -t "$SESSION_NAME". 귀하의 tmux실행:

bind-key -n C-c kill-session -t my-project-name

그런 다음 다른 프로젝트의 경우 tmux 명령은 다음과 같습니다.

bind-key -n C-c kill-session -t different-name

중요한 것은 bind-key그 자체가 단일 세션을 대상으로 하지 않는다는 것입니다. 전체 tmux 서버에 대한 + bind-key -n C-c …동작을 변경합니다 . 귀하의 경우 마지막 과제 가 이전 과제를 덮어쓰고 모든 세션에서 +가 됩니다 .Ctrlcbind-keyCtrlckill-session -t different-name

각 세션마다 별도로 key-table기본 키 테이블을 다른 것으로 설정하는 옵션을 사용할 수 있을 것 같습니다 . root각각의 새로운 키 테이블에서 에 대해 다른 바인딩을 설정할 수 있습니다 C-c. 나는 이것을 테스트하지 않았습니다.생각하다가능할 수도 있습니다.

내가 당신이라면 더 간단한 일을 할 것입니다. 나는 이렇게 할 것이다:

tmux bind-key -n C-c kill-session

kill-session-t타겟 없이현재의my-project-name세션이므로 이 바인딩은 이나 different-name다른 세션 에 대해 원하는 작업을 수행해야 합니다 .

솔직히 "다른 세션"은 나에게 너무 많은 것입니다. 나는 Ctrl+가 c내 안의 모든 것을 죽이는 것을 원하지 않습니다 .범용세션. 나는 이것을 해결할 것입니다 :

  • 그대로 두고 C-c다른 키 입력을 "global SIGINT"로 선택한 다음 의도적으로 둘 중 하나를 사용합니다.

  • Ctrl또는 +를 c"글로벌 SIGINT"로 사용해야 하는 세션을 명시적으로 "표시"합니다 . 다음과 같을 수 있습니다.

    tmux new-session -e 'TMUX_GLOBAL_SIGINT=1' \; \
          bind-key -n C-c if-shell '[ -n "$TMUX_GLOBAL_SIGINT" ]' kill-session 'send-keys C-c'
    

    TMUX_GLOBAL_SIGINT이제 환경에 비어 있지 않은 변수가 있는 모든 세션에서 Ctrl+ c는 세션을 종료합니다. TMUX_GLOBAL_SIGINT비어 있거나 설정되지 않은 모든 세션에서는 Ctrl+가 c평소대로 작동합니다.

    노트:

    • 이미 시작된 세션의 경우 tmux set-environment -u TMUX_GLOBAL_SIGINT또는 tmux set-environment TMUX_GLOBAL_SIGINT 1( -t반드시 현재 세션이 아닌 특정 세션을 대상으로 하는 데 사용)를 사용하여 설정을 변경할 수 있습니다.

    • tmux에서 시작된 쉘(또는 다른 프로그램)은 TMUX_GLOBAL_SIGINT. 그런 다음 실행되면 tmux new-session …(등에 따라 update-environment) 새 세션은 명시적이지 않아도 변수를 상속할 수도 있습니다 -e 'TMUX_GLOBAL_SIGINT=1'. man 1 tmuxtmux가 환경을 관리하는 방법을 읽고 알아보세요.

관련 정보