존재하지 않는 경우 새 tmux 세션을 만드는 방법


144

tmux session이름이 지정된 tmux 세션이 존재하는 경우 주어진 이름으로 새 세션을 만들고 싶지 않은 경우 연결하는 방법을 알아 내려고합니다 .

현재, 나는 내가 tmux찾고있는 것을 부분적으로 달성 할 수 있는 몇 가지 명령을 알고 있지만, 내가 찾고있는 것을 얻기 위해 함께 결합하는 방법은 명확하지 않습니다.

  • tmux attach 자동으로 기존 세션에 연결되지만 세션이 없으면 오류가 발생합니다
  • tmux new 새 세션을 만듭니다.하지만 매번 그렇게하기 때문에 세션에 그대로 둘 수 없습니다. .tmux.conf
  • tmux has-session 세션이 존재하는지 테스트하지만 다른 명령과 함께 세션을 연결하는 방법을 모르겠습니다

따라서 tmux 스크립트를 작성하여 세션에 로그인해야 할 때마다 수동으로 스크립트를 작성하지 않고 자동으로 수행되도록하고 싶습니다.

새로운 tmux 세션을 만들거나 (지정된 세션 이름이 존재하지 않는 경우) 세션 이름 (존재하는 경우)에 연결하도록 자동 스크립트를 작성하려면 어떻게해야합니까?


15
@kzh : 나는 정력처럼 프로그래밍 도구의 문제로 볼
rampion


9
한편, 내 man tmux말 : "-A 플래그는 세션 이름이 이미 존재하는 경우 새 세션이 연결 세션처럼 동작하게합니다"
Petr Viktorin

1
이 문제를 신고하는 사람들은 중재자조차 60 일이 지난 질문을 다른 사이트로 마이그레이션 할 수 없습니다. 이 시스템 제한의 이유는 여기 에 설명되어 있습니다 .
Brad Larson

1
@BradLarson, 현재이 작업을 수행하는 가장 좋은 / 간단한 옵션은 아래로 댓글에 대답합니다 : stackoverflow.com/questions/3432536/… . 여기에 오는 대부분의 사용자는 이것을 찾을 수 없습니다. 투표 수로 볼 수 있듯이 이것은 매우 중요한 질문입니다. 이 질문을 열어서 답변으로 추가하여 새로운 사람들이 찾을 수 있습니까?
alpha_989

답변:


89

또는 추가 할 수 있습니다

new-session

당신을에 .tmux.conf- 즉, 서버 시작에 기본 세션을 생성합니다.

그런 다음 tmux attach현재 세션 (서버 실행 중)에 연결하거나 새 세션을 작성 (서버 시작, 구성 파일 읽기, new-session명령 실행)하여 연결합니다.


3
이것이 새 세션을 만들 때 기본 경로는 tmux가 호출 된 경로가 아닌 내 홈 디렉토리입니다.
Richard Hansen

2
@AB : 어떤 대답을 하시겠습니까?
Jürgen A. Erhard 2016 년

@RichardHansen의 문제를 해결하는 방법이 있습니까? 현재 경로에서 호출하는 것이 가장 의미가있는 것으로 보이며,이를 new-session파괴하면 실제 문제인 것 같습니다.
Lee Olayvar

2
이렇게하면 tmux 설정을 다시로드하지 못하게됩니다 ( source-file ~/.tmux.conf)
Sebastian Blask

11
@SebastianBlask 세션 이름을 지정 -A하는 new-session경우이 옵션을 사용할 수 있습니다 . new-session -A -s mysessionconfig reloading으로 훌륭하게 재생됩니다.
jkoelker

163

나는 그것을 알아 냈습니다 ( 그리고 그것을 지적했습니다 ).

tmux attach || tmux new

28
이 답변은 세션 이름을 지정할 수 있기 때문에 나에게 더 효과적입니다 tmux attach-session -t my-session || tmux new-session -s my-session. 유일한 문제는 이것이 원자가 아니라는 것입니다. tmux에는 실제로 create-or-attach 명령이 있어야합니다.
앤드류

5
나는 떠들썩한 파티에서 다음 별칭이 -alias tm='tmux attach || tmux new'
azat

10
약간의 조정으로 인해 이름이 지정된 세션에서 작동합니다 tmux attach -t some_name || tmux new -s some_name. some_name을 $ 1로 변경하여 shebang을 추가하고 저장하십시오.
Cheezmeister

10
TMUX에 익숙하고 궁금 사람들에게 참고 newnew-session그들은 동의어 등은 다음과 같습니다 attachattach-session.
Esteis

1
tmux new-session -ds default \; split-window -dv 2>/dev/null; tmux attach -t default훨씬 잘 작동 /bin/kill하고 첫 번째 TMux의 경우 두 번째 TMUX를 열지 않습니다 . 유일한 단점은 세션 이름을 지정해야한다는 것입니다.
티노

64

Petr Viktorin , jkoelkerpjincz의 의견에서 지적했듯이 다음 명령을 사용하여 mySession존재 하는 경우 첨부 하고 존재하지 않는 경우 작성할 수 있습니다.

 tmux new -A -s mySession

보낸 사람 man tmux:

new-session[-AdDEP] [-cstart-directory] [-Fformat] [-nwindow-name] [-ssession-name] [-tgroup-name] [-xwidth] [-yheight] [shell-command]

(별칭 : new)

name으로 새 세션을 만듭니다 session-name.

[...]

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

new-session-Atmux-1.8부터 지원 되었습니다 .


1
gnome-terminal명령을 명령으로 사용하려는 경우 -s및 특정 세션 이름을 남기지 말고 gnome-terminal동일한 세션에 연결된 모든 새 세션으로 끝나지 않도록 제안 합니다. prefix + s새 터미널을 연 후 언제든지 기존 세션을 선택할 수 있습니다 .
dragon788

14

1 세션을 사용하기 위해서는 램프의 대답만으로 충분하지만이 스크립트를 사용하면 여러 세션을 설정할 수 있습니다.

SESSIONS="work play"

function has-session {
    tmux has-session -t $1 2>/dev/null
}

function except 
{
    if [ "$?" -eq 1 ] ; then
        $1
    fi
}

# Configure your sessions here
function session-work
{
    tmux new-session -d -s work
    tmux neww -k -t work:1
}

function session-play
{
    tmux new-session -d -s play
    tmux neww -k -t play:1
}

#
#MAIN 
for x in $SESSIONS
do
    echo $x
    has-session $x
    except session-$x
done

노트:

-k  --> new-window will not be created if already exists
-d  --> start session or window, but don't attach to it yet
-s  --> name the session
-t  --> specify a target location in the form session:window.pane 

13

시작할 때 프로젝트 기반 구성을 포함하도록 Alex의 제안을 적용하면서 다음을 사용하기 시작했습니다.

# ~/bin/tmux-myproject shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"

tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
    echo "No Session found.  Creating and configuring."
    pushd $PROJECT_DIR
    tmux new-session -d -s $PROJECT_NAME
    tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
    popd
else
    echo "Session found.  Connecting."
fi
tmux attach-session -t $PROJECT_NAME

어디 tmux-myproject.confTMUX 명령뿐만 아니라 내 편집기를 시작으로, 내 창문과 창을 만들 수 내 시작 시리즈입니다.


8

필요한 경우 별명을 사용하여 새 세션을 작성하고 이미 존재하는 경우 기본 세션에 첨부하십시오.

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

이것을 서버의 .login에 추가했습니다.

내가 이런 식으로하는 이유는 동일한 실제 세션에 연결하고 싶지 않기 때문에 동일한 창 그룹을 사용하는 새 세션을 원하기 때문입니다.

이것은 running과 비슷합니다 screen -xRR.


2
세션에 자주 출입하는 경우에 표시된 것처럼 사용하지 않는 세션이 많이 남습니다 tmux list-sessions.
Anm

네, 가끔씩 청소를 해요. 내가 원하는 기능을 얻는 것은 사소한 단점입니다.
Michael

안녕하세요 @ mateusz-piotrowski-코드 블록으로 코드를 감싸는 편집에 동의하지만 다른 텍스트를 왜 내가 말한 것과 다르게 편집하겠습니까? 여기에 의견을 말해서 죄송하지만 다른 곳에서는 보지 못했습니다.
Michael

난 당신을 화나게하지 않았다. 방금 구성 파일 에서 별칭 실행할 수 없다고 생각 했기 때문에 오타 일 것입니다.
Mateusz Piotrowski

3
tmux new -A -s default새 세션이 존재하지 않거나 자동으로 연결하려면 새 세션을 시작하려면 다음 을 입력 하십시오. 구성 파일을 편집하는 것보다 훨씬 낫다고 생각합니다.
pjincz

1

에서 동일한 작업을 수행하려는 사람들에게 fish:

tmux attach -t mysesh; or tmux new -s mysesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.