tmux 내의 공유 세션에서 두 개의 tmux 클라이언트 연결을 해제하는 더 우아한 방법이 있습니까?

tmux 내의 공유 세션에서 두 개의 tmux 클라이언트 연결을 해제하는 더 우아한 방법이 있습니까?

이것은 거의코드 검토질문이지만 매우 *nixy입니다. 코드보다 구성에 관한 것이 더 많습니다. tmux전환한 이후로 screen수년 동안 내가 원하는 방식으로 작업할 수 없게 만드는 몇 가지 까다로운 문제에 부딪혔습니다. tmux 세션 내에서 실행되도록 쉘을 설정했기 때문에 마침내 이 문제를 해결할 시간이라고 결정했습니다.

기본적으로 두 개의 tmux 클라이언트를 동일한 세션에 연결하면 함께 잠깁니다. 창 중 하나를 전환하면 두 창 모두 동시에 전환됩니다. 이는 기본 동작이 공유 창 세트이지만 클라이언트 자체는 독립적인 화면과 다릅니다.

내가 원하는 것은 두 개의 tmux 클라이언트를 동일한 세션에 바인딩 해제하는 방법입니다. tmux 외부에 있고 새 클라이언트를 시작하면 이 작업을 쉽게 수행할 수 있습니다. 새 세션을 시작하려면 상위 세션을 참조하기만 하면 됩니다.

tmux new-session -t original_session -s new_session

하지만 이것을 시도해 보세요뒤쪽에클라이언트에 있고 세션을 공유하는 다른 클라이언트와의 연결을 해제하려는 경우 상황이 더 복잡해집니다. 수십 가지 방법을 시도했지만 효과가 있는 방법을 찾지 못했습니다. 내가 얻은 가장 가까운 것은 bind <key> prompt-command ...이전 세션 이름과 새 세션 이름에 대한 프롬프트를 사용하는 것입니다.어떤 이유로든 tmux는 #{session_name}a 또는 매개변수 내에서 변수를 확장하지 않습니다.new-sessionprompt-command이는 다른 많은 명령의 인수에서 작동하지만(예: run아래에서 사용하고 있습니다), 이 확장이 없으면 이 특정 작업이 갑자기 복잡해집니다. 값을 수동으로 입력해도 그럭저럭 잘 작동됩니다.

오늘 드디어 출근했어요. 그러나 결과는 내가 원했던 것보다 더 나빴다. 대부분의 작업을 수행하려면 쉘 기능이 필요합니다. 외부 스크립트를 사용하지 않고 구성 파일에 포함시키기 위해(도트 파일 이식성을 위해) 해킹을 사용했습니다. 처음 두 열을 제거하면 이 구성은 실제로 쉘 스크립트로 실행될 수 있습니다. 모든 것을 함수에 캡슐화하면 모든 키 바인딩에서 필요한 스크립트 부분만 호출할 수 있습니다. 쉘 스크립트 비트는 구성의 주석이며, 쉘 스크립트에서 구성 비트는 이 문서에서 삭제됩니다.

오늘의 솔루션이런게 나왔어요(내 완전한 .tmux.conf파일):

# : << ENDOFCONF

# Clear the default binding
unbind C-c
# Pass the name of the current session to a function to clone it
bind C-c run "cut -c3- ~/.tmux.conf | sh -s clone #S"

# ENDOFCONF
# clone () {
#   orig=${1%-*}
#   copy="$orig-$(($( tmux list-sessions -F '#S' | sed -nE "/^${orig}-[0-9]+$/{s/[^0-9]//g;p}" | tail -n1 )+1))"
#   TMUX= tmux new-session -d -t $orig -s $copy
#   tmux switch-client -t $copy
#   tmux set -q -t $copy destroy-unattached on
# }
# $@

이것이 작동한다는 점에 유의하십시오. 실행 중인 tmux 클라이언트에서 ++ Ctrl새 세션을 생성하고 현재 세션 이름에 숫자를 추가하고 현재 세션을 창의 대상으로 사용하고 해당 세션으로 전환합니다.B CtrlC

한 가지 잔소리만 빼고는 괜찮습니다. 필요한 것보다 훨씬 더 복잡한 것을 간단하게 만들었습니다. 이것을 달성하는 더 쉬운 방법이 있습니까?

답변1

이것이 내가 한 일입니다:

alias ta='export NEW_SESSION=\$(uuidgen) ; tmux new-session -t 0 -s \$NEW_SESSION ; tmux kill-session -t \$NEW_SESSION'

이것이 수행하는 작업은 "0"(지정되지 않은 경우 첫 번째 세션의 이름)이라는 세션에서 새 세션을 생성하고 고유한 무작위 이름(uuidgen 사용)을 지정한 다음 분리 시 종료하는 것입니다.

저는 zsh를 사용하고 있습니다. "ta"는 "tmux Attach"의 약어입니다.

관련 정보