저는 개발을 위해 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-key
Ctrlckill-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 tmux
tmux가 환경을 관리하는 방법을 읽고 알아보세요.