tmux에서 다른 세션을 선택하고 현재 세션을 종료하여 현재 세션을 바꾸는 방법은 무엇입니까?

tmux에서 다른 세션을 선택하고 현재 세션을 종료하여 현재 세션을 바꾸는 방법은 무엇입니까?

choose-session( ) 와 비슷한 Tmux 명령을 원 PREFIX s하지만 다른 세션을 선택하면 현재 세션이 종료됩니다.

이상적으로 이 명령은 현재 세션이 다른 곳에 연결되어 있는 경우 분리하지만 이것이 유일한 연결인 경우 세션을 종료합니다. 이는 다음을 통해 발견할 수 있습니다.tmux display -p '#{session_many_attached}'


하나 있다유제하지만 꽤 오래되었고 반대 방식(쿼리, 종료, 조인)으로 질문을 합니다.

답변1

이 바인딩은 PREFIX C-s세션을 선택하고 해당 세션으로 전환한 다음 이전 세션을 종료합니다.

bind-key C-s \
  if-shell "(($(tmux display -p '#{session_many_attached}') > 0))" \
    choose-session \
    "run-shell \"tmux choose-session \\\"switch-client -t '%%'; kill-session -t '$(tmux display -p '#S')'\\\"\""

나는 쉘 표현식을 사용했습니다(쉘을 사용하지 않는 또 다른 답변이 좋을 것입니다!). 먼저 Tmux를 사용하여 if-shell연결된 클라이언트가 여러 개 있는지 확인합니다. 그렇다면 표준 choose-session명령을 호출합니다.

그러나 이것이 세션에 연결된 유일한 클라이언트인 경우 사용자 정의 명령을 전달하지만 에 전달하는 명령줄을 작성할 수 있도록 choose-session셸에서( 사용하여) 이 작업을 수행합니다 .run-shellchoose-session

명령줄은 다음 두 가지 명령으로 구성됩니다.

  • switch-client -t '%%'이는 choose-session기본적으로 사용됩니다( man tmux설명은 참고자료 참조).
  • kill-session -t '$(tmux display -p '#S')'먼저 서브 쉘을 사용하여 이름을 얻으십시오현재의세션(아직 삭제되지 않음)을 매개변수로 에 전달합니다 kill-session.

최종 명령이 작동하려면 많은 이스케이프가 필요합니다. 여기에는 if-shell쉘 명령 하나와 두 개의 tmux 명령이라는 세 가지 매개변수가 필요합니다. 공백이 포함된 경우에는 따옴표로 묶어야 합니다. 그러므로 세 번째 진술 run-shell...은 매우 나쁩니다!

(tmux 2.3)

관련 정보