tmux 세션 내에서 새 tmux 세션 만들기


105

tmux 내부에 있고 세션이 존재하는지 여부에 따라 주어진 세션을 생성 / 연결하거나 전환하는 셸 스크립트를 작성하고 있습니다.

tmux 세션 내에서 새 tmux 세션을 만들어야하는 경우를 제외하고는 모든 것이 잘 작동합니다.

내 스크립트가 실행되면 tmux new-session -s name다음 출력이 표시됩니다.

세션은 신중하게 중첩되어야합니다. $ TMUX를 설정 해제하여

실제로 세션을 중첩하고 싶지는 않습니다. 제 목표는 다른 별도의 세션만들고 tmux 세션 내에서 세션으로 전환하는 것입니다 .

이게 가능해?


2
이 질문을 찾는 사용자를위한 훌륭한 리소스 : leanpub.com/the-tao-of-tmux/read
0xSheepdog

답변:


142

가장 빠른 방법 ( ctrl-b명령 접두사로 사용한다고 가정 )은 다음과 같습니다.

ctrl-b :new

새 세션을 생성하려면

ctrl-b s

대화식으로 선택하고 세션에 연결합니다.


5
"세션이 강제로 해제 $ TMUX주의 중첩되어야한다"걱정하지 않는 솔루션을위한 한
마르신 Rogacki을

3
그런 다음 세션 이름을 바꿀 수 있습니다.ctrl-b $
nha

21
그리고 Ctrl-b :new -s <name>새 세션에 이름을 부여합니다.
Ain Tohvri 2015

32

스크립트를 만드는 방법

이 스크립트는 세션이 있는지 확인합니다. 세션이 존재하지 않는 경우 새 세션을 생성하고 연결합니다. 세션이 존재하지 않으면 아무 일도 일어나지 않고 해당 세션에 연결됩니다. `~ / development '를 프로젝트 이름으로 자유롭게 바꾸십시오.

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

터미널의 새 세션

두 개의 분리 된 세션을 만들고 나열하고 하나에 연결 한 다음 tmux 내에서 세션을 순환합니다.

tmux new -s name -d새로운 분리 된 세션을 생성하기 때문에 tmux 내부에서 작동합니다. 그렇지 않으면 중첩 오류가 발생합니다.

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

tmux 내에서 새 세션

우리는 이제 대상 세션에 연결 되어 있거나 더 잘 알려져 있습니다. 연결된 동안 새 세션을 만들려고하면 중첩 오류가 발생합니다.

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

이를 해결하기 위해 새로운 분리 세션을 생성합니다. 예 :

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

주기 (전환) 세션

  • Prefix ( 이전 세션
  • Prefix ) 다음 세션

참고 : Prefix 있습니다 Ctrl-b기본적으로. 당신은 바인딩 할 수 있습니다 PrefixCtrl-a당신이 캡은 Ctrl 키를 잠금 변경할 수 있습니다 및 Mac OSX에서system preferences > keyboard > modifier keys

tmux 내부에서 명령 모드를 사용하여 세션에 연결

분리하지 않고 세션에 연결하려고하면 오류가 발생합니다.

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

대신 명령 모드 Prefix :를 사용 attach -t session_name하고 입력 하고 Enter 키를 누르십시오.


매우 완전한 답변을 주셔서 감사합니다. 이것은 한 번에 몇 가지 내 질문에 답했습니다!
mdekkers

24

이것을 사용하면 나를 위해 작동합니다.

TMUX= tmux new-session -d -s name
tmux switch-client -t name

TMUX=TMUX가 포기하지 않도록 첫 번째 행이 필요합니다 sessions should be nested with care, unset $TMUX to force메시지를.


1
첫 줄을 다음과 같이 변경 한 후 스크립트에서 잘 작동합니다.TMUX=`tmux new-session -d -s name`
Michael Robinson

17

터미널에서 실행할 수있는 모든 명령 은 트리거 키 (예 :)를 누른 다음 시작 부분 없이 명령 을 눌러 tmux new -s sessionName내부에서 실행할 수 있습니다 .tmuxctrl-b:tmux

결과적으로 ctrl-b :다음은 new -s sessionName원하는 작업을 정확하게 수행하고 세션에 이름을 부여합니다. 또한 자동으로 새 세션으로 전환됩니다.



7

user2354696의 조언에 따라 다음 키 바인딩을 사용하여 새 세션을 만들거나 기존 세션을 "복제"합니다.

bind-key N run-shell 'TMUX = tmux new-session -d \; 스위치 클라이언트 -n '
bind-key C run-shell 'TMUX = tmux new-session -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \; 스위치 클라이언트 -n \; 디스플레이 메시지 "세션 #S 복제 됨" '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.