tmux가 창을 수동으로 입력하지 않고 일련의 창을 열도록하려면 어떻게해야합니까?


30

그래서 tmux특정 창에서 특정 명령을 자동으로 표시 하는 프로젝트 특정 세션 을 만들고 싶습니다 . 다음 온라인 자습서tmux사람이 페이지를이 내가 구성 파일 가지고 올 것입니다 :

new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

결과는 ... 아무것도 아닙니다. tmux명령을 실행하지 않고 해당 창에서 단일 창과 단일 창으로 시작합니다.

실제로 특정 명령을 미리 실행하여 일련의 창과 창을 만들 수있는 구성 파일을 만드는 방법은 무엇입니까?

답변:


36

구성 파일이 작동하지만 몇 가지 복잡한 문제가 있습니다.

수명이 짧은 명령

먼저, 시작하는 명령 ( ls의 인스턴스 )이 매우 빠르게 실행을 완료합니다. 명령의 창과 창이 작성되지만 각 명령이 종료 되 자마자 사라집니다.

최종 구성에서 실제로 이러한 "원샷"명령을 사용하는 것이 목표라면 window 옵션 remain-on-exit(및 세션 옵션 set-remain-on-exit을 사용하여 세션에서 작성된 모든 창에 기본값을 제공 해야 함)을 사용해야합니다 . remain-on-exit창이 설정 되면 명령이 종료 될 때 사라지지 않습니다. 아마도 respawn-window키를 키 에 매핑하고 싶을 것입니다 (참고 : respawn-window원래 명령을 다시 생성합니다. respawn-pane또한 tmux 1.5에서 개별 창을 다시 생성 할 수도 있습니다 ).

bind-key R respawn-window

# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on

# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# restore global r-o-e
set -g set-remain-on-exit off

# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit

또는 초기 창을 숫자 0 대신 숫자 1로 사용하지 않으면 전역 값을 변경하지 않아도됩니다.

bind-key R respawn-window

# create a session with a throw-away window
new true

# for future windows, stay open after the command exits
set set-remain-on-exit on

# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# for future windows, revert r-o-e to global value
set -u set-remain-on-exit

ls단순한 자리 표시 자 명령으로 만 사용 하고 실제로 창 / 창에 일부 유형의 대화식 명령을 생성하려는 경우 결국 실행하려는 명령을 생성해야합니다. 의도 한 명령을하는 동안 그것을 사용하는 시동 데 시간이 너무 오래 걸리는 경우 TMUX 테스트, 다음 쉘 또는 다른 간단한 대화식 명령 (예 : 대체 top, sqlite3등).

new-session 기본 명령입니다

둘째, 실행 TMUX을 명령 인수 (예를 들어없이하는 tmux)을 사용하는 것과 같습니다 new-session(즉 명령 tmux과 동일 tmux new-session). 귀하는 .tmux.conf자사의 창 / 창에 대한 세션 (생성 new에 대한 별칭이다 new-session) 다른 세션이 암시 생성되고 new-session시작하여 지정된 명령 TMUX을 명령 인수없이. 기본 상태 표시 줄을 사용하는 경우 [1]"추가"세션에있을 때 상태 표시 줄의 왼쪽에 표시됩니다 (초기 세션 .tmux.conf은 0입니다).

추가 세션을 작성하지 않으려면 tmux attachplain 대신 사용하십시오 tmux. 사용자의 명령 .tmux.conf이 실행되어 세션 0을 만든 다음 클라이언트가 새 세션을 생성하는 대신 해당 세션에 연결합니다.


2
좋아, 나는 아마도 고래 샌드위치만큼 두껍지 만, 지금은 splitw아무것도 가지고 있지 않은 구성 파일을 가지고 있으며 여전히 분할 화면을 얻지 못한다고 말합니다. 현재 세션을 설정할 수 없습니다. 그 new앞에 추가 하면 ... 하나의 창, 하나의 창이 나타납니다. 나는 인생에서 시작할 때 두 개의 창을 얻는 것처럼 보이지 않습니다.
저의 정확한 의견 그냥

1
있는 설정 파일은 new다음 splitw내가 시작할 때 나를 위해 작동 TMUX 를 통해 tmux attach. 기억해야 할 것은 이미 실행중인 서버가없는 경우에만 .tmux.conf(또는 -f옵션으로 지정된 파일 ) 사용한다는 것입니다. 를 통해 서버가 실행 중인지 확인하십시오 tmux ls. 당신은 서버가 이미 실행중인 경우 파일에서 명령을 실행하려면, 다음과 같이 그것을 : tmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach(아무 서버 당신이 없을 때 당신이 이것을 실행하면 .tmux.conf(또는 -f처음으로 다음 실행 파일) source-file파일).
Chris Johnsen

설정 파일은 -f로 지정되고 tmux new -f myconfig있습니다. 해당 구성 파일의 내용에는 뒤에 포함 됩니다 . 명령 행을 시도하기 전에 모든 tmux 프로세스를 종료하고 있습니다 . 두 개의 창이 없습니다. 나는이 시점을 넘어서 무엇을 해야할지 정말로 여기에서 잃어 버렸습니다 (tmux를 포기하는 것 외에도). newsplitwtmux -f myconfig
저의 정확한 의견 그냥

4
@Just : 명령 인수없이 사용하든 사용 -f하지 않든 (새 서버의 경우 구성 파일이 수행하는 것 위에 새 세션을 작성 함)과 동일합니다. 사전 분할 창은 세션 0에서 작성되지만 암시 적 명령은 추가 세션 (세션 1; 상태 표시 줄에서)을 작성하고 첨부합니다 . 사전 분할 창을 숨기고있는 새 세션을 작성하지 않도록 하려면 사용하십시오 . tmuxtmux new-sessionnew-session[1]tmux -f myconfig attach
Chris Johnsen

1
글쎄, 나는 읽는 법을 배우는 것이 결국 나에게 돈을 줄 것이라고 생각한다. :) 노력과 답변에 감사드립니다. 모든 것이 잘 작동합니다. 나는 여기에 명성 "팁 병"이 있었기 때문에 나는 단지 당신에게 받아 들여진 대답 이상을 줄 수 있기를 바랍니다.
저의 정확한 의견 그냥

9

"수동으로 입력"한다는 것이 무슨 의미인지 잘 모르겠지만, 이것이 내가하는 방법입니다. 창 관리자가 시작하는 "자동 시작"스크립트를 작성했습니다. 그것은 포함합니다 :

tmux start-server                                                                                                                                                                                                                                                                                                                                                            
for i in ~/sessions_tmux/*.session; do "$i"; done

각 .session 파일은 다음과 같습니다.

#!/bin/bash

SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
    echo "Already inside a tmux session, do not know what to do"
    exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
    exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter

잠깐만 더있어! konsole과 함께로드하는 .session 파일 수가 계속 증가하고 있습니다.

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs

work_console.tabs는 다음과 같습니다.

.
.
.
title: projectx;;    command: tmux attach -t projectx
title: flaskr;;      command: tmux attach -t flaskr_tutorial
.
.
.

그런 다음 F12를 눌러 곤솔을 시작합니다.


konsole이 깨져서 Terminal으로 전환했는데 잘 작동합니다. tmux-users 메일 링리스트에 더 자세한 게시물이 있습니다.
존 슈미트

1
작은 의견 만 있으면 '! 테스트에서 '-n'과 함께 -z ';)
lilorox

6

3 개의 서버 모니터링 작업 (여기서는 ping localhost)을 시작한다고 가정하면 구성 파일과 저장된 세션을 망칠 필요가 없습니다. 명령 행에서 모두 수행 할 수 있습니다.

tmux new-session 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    select-layout even-vertical

단순성에 감사드립니다-내가 찾던 정확한 예!
dsz

5

teamocil이 tmux 창 / 세션 자동화에 매우 유용하다는 것을 알았 습니다.

Ruby로 작성되었으므로 설치해야합니다.

샘플 구성은 다음과 같습니다.

session:
  name: 'my project'
  windows:
    -name: vim
     root: '~/code/my_project'
     splits:
       - cmd: vim
       - cmd: guard

창과 분할을 배열 할 수 있습니다.


4

teamcoil과 비슷한 또 다른 대안은 tmuxinator 이며, 활발한 개발 중이며 상당히 잘 작동합니다. 또한 놀라운에 (친절 검토의) 권장 TMUX : 생산성 마우스 무료 개발 에서 실용적인 책장 .


그것을 teamocil보다 조금 더 깨끗하다는 것을 알았지 만 (그러나 그럼에도 매우 유사합니다) 지금 사용하고 있습니다. 나는 그것이 작동하는 방식에 매우 만족합니다!
Aktau

4

**

  • 더 나은 세션을 저장하십시오!

** 나 자신과 같은 게으른 관리자의 경우 완벽하게 구축하는 데 시간을 소비하지 않고 tmux 세션을 저장하는 것이 좋습니다. 30 대가 넘는 서버를 관리하고 있으며 구성이 항상 변경되는 tmux 세션은 동적입니다. 내가 최근에 tmux-resurrect를 발견 할 때까지 목에 통증 이있었습니다.이 플러그인은 훌륭합니다. 시도 해봐. 현재 Ubuntu 리포지토리에는 tmux 1.8이 있으며이 플러그인에는 1.9가 필요하므로 수동으로 업그레이드해야합니다

sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install  tmux=2.0-1~ppa1~t

그 후에 당신이 그것을 설치할 수 있습니다

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path

그런 다음 ~ / .tmux.conf의 맨 아래에이 행을 추가하십시오 (~ / .tmux.conf를 사용할 수없는 경우 빈 파일을 작성하십시오)

run-shell ~/clone/path/resurrect.tmux

또한 플러그인이 내가 실행하는 모든 프로그램의 세션을 저장하도록 ~ / .tmux.conf 끝에이 줄을 추가합니다.

set -g @resurrect-processes ':all:'

그런 다음 tmux 환경을 다시로드하십시오.

tmux source-file ~/.tmux.conf

그게 다야! 끝났습니다. 이제 tmux를 정상적으로 실행하고 창 크기를 조정하고 새 창을 만들고 새 세션을 만듭니다 ... 등 도달 한 구성에 만족하면 (여러 창과 여러 세션에서) ctrl + b를 클릭 한 다음 ctrl + s를 클릭하여 세션을 저장하십시오. 결과를 테스트하려면 모든 tmux를 종료하십시오.

killall tmux

그런 다음 tmux를 다시 실행하십시오.

tmux

그런 다음 tmux 내에서 ctrl + b를 클릭 한 다음 ctrl + r (복원)을 클릭하면 모든 창, 창 및 세션이 동일한 지오메트리 및 배열로 복원됩니다. 이것이 도움이되기를 바랍니다.

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