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단일 세션 자체에만 국한되지 않는다는 것입니다. bind-key -n C-c …전체 tmux 서버의 + 동작을 변경합니다 . 귀하의 경우 마지막 작업이 이전 작업을 덮어쓴 다음 모든 세션에서 +를 덮어씁니다.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다른 키 입력을 "전역 SIGINT"로 선택한 다음 실수로 그 중 하나를 사용하십시오.

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

    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이제 환경에 null이 아닌 변수가 있는 모든 세션에서 해당 세션 Ctrlc종료됩니다. 각 세션에서 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 …( 등에 따라 ) tmux가 환경을 관리하는 방법을 명시적으로 읽고 이해 update-environment하지 않더라도 새 세션도 변수를 상속할 수 있습니다 .-e 'TMUX_GLOBAL_SIGINT=1'man 1 tmux

관련 정보