세션이 존재하는 경우 첨부를 사용하여 tmux를 시작하는 방법


답변:


51

대답은 훨씬 간단합니다. 이것을 ~/.tmux.conf파일에 넣으십시오 .

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

실행 tmux attach중이고 세션이 있으면 세션이 이미 연결되어 있는지 여부에 관계없이 해당 세션에 연결됩니다. 세션 이 없으면 세션이 생성됩니다.


11
이것은 간결한 트릭이지만주의 사항이 있습니다. tmux인수없이 호출 되면 새 세션을 만든 다음에서이 줄에 도달하자마자 두 번째 세션을 만듭니다 ~/.tmux.conf. 첫 번째 세션 tmux ls을 만든 후에 실행하면이 문제를 볼 수 있습니다 . 당신이 당신의 파일에 넣고 후 실제로, 당신은 호출 할 수 없습니다 더 이상 인수없이tmux
브루노 Polaco

4
따라서이 alias tmux="tmux attach"문제를 방지하기 위해 별명을 추가해야합니다
rubo77

@ BrunoPolaco : 항상 비어있는 tmux 세션이 항상 실행되는 큰주의 사항은 무엇입니까 (작업 목록에서 깔끔하게 보이지는 않습니다).
rubo77

@ rubo77 자료. 어떤 사람들은 시작할 때 생성되는 몇 가지 기본 도구, 창, 창 등을 가지고 tmux있습니다.
rovr138

129

세션 이름을 지정하면 다음 new-session명령으로 쉽게 수행 할 수 있습니다 .

tmux new-session -A -s main

main필요한 경우 첨부되거나 작성 될 세션 이름은 어디에 있습니까 ?

보낸 사람 man tmux:

-A플래그 만드는 new-session처럼 행동 attach-session하면 세션 이름이 이미 존재; 이 경우에는 다음 -D과 같이 동작 -d합니다 attach-session.

-A옵션은 2013 년 3 월 26 일부터 tmux 버전에1.8 도입되었으며 , 이전 버전의 경우을 사용하십시오 tmux attach || tmux.


10
내장 기능을 사용하고 사람 문서 스 니펫을 제공하는 +1
Ari Patrick

1
내 별칭 목록에서 : alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". 팁 고마워! 매뉴얼 페이지 : openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
Jeroen Wiert Pluimers

tmux: unknown option -- A이것은 최신 버전에서만 사용 가능한 것 같습니다.
xApple

이것이 내가 사용한 방법이지만 더 이상 "tmux detach"를 사용할 수 없습니다. 기존 세션을 저장하고 종료하려면 바로 가기 <ctrl> b-d를 사용해야합니다.
Jess

2
[ -z "$TMUX" ] && exec tmux new -As .이것이 내가 사용하는 것 .bashrc입니다.
Ryenus

30

attach에 오류가 발생하면 새 세션이 시작됩니다.

tmux attach || tmux new

따라서 별칭이 작업을 수행합니다.

tm="tmux attach || tmux new"

당신은 변경하여 짧게 만들 수 있습니다 tmux attach에 대한tmux a
브루노 Polaco

이것이 작동하는 동안 Wesley Baugh의 솔루션은 tmux의 내장 기능을 사용하여 동일한 작업을 수행합니다
Ari Patrick

-A가 소개되기 전에 (이전 v1.6)
Christopher Peterson

3

에 다음을 추가하십시오 .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

내 github 저장소의 ZSH 리소스 파일 에서이 사용을 볼 수 있습니다


2

Wesley Baugh의 답변 (로그인시 .bashrc에서 사용될 때 이중 중첩 세션이었습니다)을 확장하고 sudo -s서버에서 자주 사용하기 때문에 약간의 유연성을 추가하려면 (.bashrc를 다시로드하고 이중 둥지를 올바르게로드 할 것입니다) 내 .bashrc에있는 것 :

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

이것은 tmux 세션을 확인하고 새 세션을 만들거나 이름이 지정된 기존 세션에 연결하기 전에 수퍼 유저가 아닌지 확인합니다 main.


1

Drew Frank 님이 여기에 답변했습니다 : https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

여기에 내가 지금 사용하는 스크립트가 있지만 (tmux의 다른 문제로 인해 화면으로 다시 전환되었지만) /somewhere/on/your/path/ttmux쉘 기능으로 다음과 같습니다.

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

-2옵션은 256 색 단자 지원을 가정 TMUX 수 있도록, 그래서 사람들은 상황에 적절하지 않을 수 있습니다.



1

@SuperMagic 답변을 약간 개선했습니다. 이 블록을 내 상단에 놓았습니다..zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.