연결되지 않은 첫 번째 tmux 세션에 어떻게 연결하거나 연결되지 않은 세션이 없는 경우 새 세션을 생성합니까?

연결되지 않은 첫 번째 tmux 세션에 어떻게 연결하거나 연결되지 않은 세션이 없는 경우 새 세션을 생성합니까?

첫 번째 tmux 세션에 연결하는 방법추가 고객 없음아니면 연결되지 않은 세션이 없으면 새 세션을 만들어 연결하시겠습니까?

(사용 사례는 새 터미널 창이 열릴 때 내 터미널 에뮬레이터가 실행되는 명령입니다. 주변에 분리된 세션이 있는 경우 창이 열릴 때마다 새 세션을 생성하고 싶지 않습니다. 또한 원하지 않습니다. 새 세션을 생성하려면 매번 동일한 이름의 세션에 다시 연결하고 싶습니다. 세션에 이미 창이 연결되어 있으면 연결되지 않은 기존 세션을 재활용하고 세션이 없으면 새 세션을 만들고 싶습니다. 연결되지 않은 세션).

답변1

쉘 스크립트를 사용하지 않고 tmux 자체를 사용하여 이를 수행하는 더 쉬운 방법이 있을 수 있습니다. 하지만 몇 가지 스크립트를 결합하여 작동하게 만들었습니다.

첫 번째 스크립트는 연결되지 않은 첫 번째 세션의 이름을 인쇄합니다. 이것은 ,tmux-first-unattached-session:

#!/usr/bin/env sh
# Print the name of the first tmux session that has no clients attached.
tmux ls -F '#{session_name}|#{?session_attached,attached,not attached}' 2>/dev/null | grep 'not attached$' | tail -n 1 | cut -d '|' -f1

두 번째 스크립트는 연결되지 않은 첫 번째 세션 또는 새 세션에 연결됩니다.

#!/usr/bin/env sh
# Attach to the first tmux session that has no attached clients.
# If there are no unattached sessions, then create a new session.
tmux attach -t `,tmux-first-unattached-session` 2> /dev/null || tmux

답변2

아주 간단한 것이 있습니다.

  1. 연결되지 않은 세션이 있는지 감지하고 연결을 시도합니다.
  2. 그렇지 않으면 클린 세션을 시작하세요.
# Start TMUX first; try to reattach a session
if [[ -z $TMUX ]]; then
  ATTACH_OPT=$(tmux ls | grep -vq attached && echo "attach -d")
  exec eval "tmux $ATTACH_OPT"
fi

답변3

이 문제를 처리하기 위해 스크립트 를 만들었습니다 tmux2.

#!/bin/bash
#
# tmux2 - attach to first unattached session or
#         create new session if none are found
#
N=$(tmux ls | grep -v attached | head -1 | cut -d: -f1)

if [[ ! -z $N ]]
then
    ATTACH_OPTS="attach -t $N"
fi

exec tmux -CC $ATTACH_OPTS

제 경우에는 Mac과의 iterm 연결을 위해 사용합니다. 연결 설정은 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

이제 터미널 세션의 연결이 끊어지면 다시 연결하면 중단했던 부분부터 다시 시작됩니다.

관련 정보