답변:
필요한 프로그램으로 tmux를 시작하는 작은 쉘 스크립트를 작성할 수 있습니다. dev-tmux라는 쉘 스크립트에 다음이 있습니다. 개발 환경 :
#!/bin/sh
tmux new-session -d 'vim'
tmux split-window -v 'ipython'
tmux split-window -h
tmux new-window 'mutt'
tmux -2 attach-session -d
그래서 내가 좋아하는 개발 환경을 시작하고 싶을 때마다
$ dev-tmux
vim
거기는 창의 첫 번째 (그리고 그 당시에 만) 창에서 실행될 명령을 나타냅니다. 대신 세션 이름을 'vim'으로 지정하려면 그렇습니다. 맞습니다 -s
. 플래그 를 사용해야합니다 . 전체 구문 : tmux new-session -d -s SessionName -n WindowName Command
복잡한 창 격자를 만들려고했는데 창을 반복해서 전환하고 분할하는 작업을 처리해야했습니다. 내 학습 내용은 다음과 같습니다.
tmux new-session \;
새로운 세션으로 시작하십시오. 가로 또는 세로로 split-window -h
또는 -v
그 이후에 분할하려면 다음과 같이하십시오.
tmux new-session \; split-window -v \; split-window -h \;
다음과 같이 3 개의 창을 만듭니다.
------------
| |
|----------|
| | |
------------
해당 분할 창에서 명령을 실행하려면 명령을 사용하여 send-keys 'my-command'
명령을 추가하고 C-m
실행하십시오.
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
결과 세션은 다음과 같아야합니다.
------------
| tail |
|----------|
| | top |
------------
지금 어느 정도로 다시 전환하여 다시 왼쪽 하단 패널을 서브 - 분할하려고 last-pane
으로 더 복잡한 창 또는에 select-pane -t 1
여기서 1
순서대로 패널의 번호로 시작하여 생성 0
.
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \; \
select-pane -t 1 \; \
split-window -v \; \
send-keys 'weechat' C-m \;
것을 수행. Basicaly와 주위에 당신의 방법을 알고 split-window
그리고 select-pane
당신이 필요로하는 모든입니다. 또한 -p 75
창의 크기를 split-window
보다 잘 제어 할 수 있도록 만든 창의 크기를 백분율 로 전달하는 것이 편리 합니다.
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v -p 75 \; \
split-window -h -p 30 \; \
send-keys 'top' C-m \; \
select-pane -t 1 \; \
split-window -v \; \
send-keys 'weechat' C-m \;
세션처럼 보이는 결과
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
tmux
미래에 열광 하는 사람들 을 돕는 희망 .
-h -p 30
는 사용 가능한 높이의 30 %로 가로 패널을 만듭니다. -v -p 75
너비가 75 % 인 수직에 대해서도 동일합니다.
\:
? 나는 이것에 관계없이 스크립트가 작동하는 것을 보았습니다.
\;
세미콜론을 bash 대신 tmux로 전달하여 명령을 한 번의 호출로 tmux에 보낼 수 있습니다. stackoverflow.com/questions/20913198/…
다음 .tmux.conf
과 같이 다른 세션을 소싱 할 수 있습니다 .
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
그런 다음 필요에 따라 세션을 포맷하십시오.
#session1
new -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1
selectp -t 0
그러면 2 개의 창이 열리고 두 번째 창은 foo / bar로 이름이 지정되고 foo는 bar 위에서 실행되면서 수직으로 절반 (50 %)으로 분할됩니다. 초점은 창 2 (foo / bar), 상단 창 (foo)에 있습니다.
그런 다음 원하는 tmux 세션 (이 경우 session1)을 PrefixShifts
Prefix Shift S
tmux에 있어야하고 파일을 소싱하면 tmux가 좋아하지 않고 강제로하지 않으면 수행하지 않는 새 세션을 시작하려고 시도합니다.
사용 tmuxinator은 - 당신이 여러 세션이 구성되어 있습니다, 당신은 주어진 시간에 출시 할 하나를 선택할 수 있습니다. 특정 창이나 창에서 명령을 실행하고 창에 제목을 지정할 수 있습니다. 다음은 Django 애플리케이션 개발과 함께 사용 하는 예 입니다.
샘플 구성 파일 :
# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...
project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
- editor:
layout: main-vertical
panes:
- vim
- #empty, will just run plain bash
- top
- shell: git pull
- database: rails db
- server: rails s
- logs: tail -f logs/development.log
- console: rails c
- capistrano:
- server: ssh me@myhost
자세한 설명은 위 링크의 README를 참조하십시오.
@ https://github.com/remiprev/teamocil을 살펴보십시오
YAML을 사용하여 구조를 지정할 수 있습니다
windows:
- name: sample-window
splits:
- cmd: vim
- cmd:
- ipython
width: 50
- cmd:
height: 25
:~$ tmux new-session "tmux source-file ~/session1"
neww
split-window -v 'ipython'
split-window -h
new-window 'mutt'
:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc
:~$ . ~/.bashrc
:~$ tmux_s1
neww
? 나는 그 명령을 어디에서나 찾을 수 없습니다. ~ new-window
당신이 왜 길고 짧은 형식을 모두 사용하는지 이해할 수 는 없지만 명령처럼 보입니다 .
먼저 @jasonwryan 의 접근 방식이 있었지만 2 개 이상의 구성이 있으면 혼란 스러울 수 있습니다.
그래서 별칭 함수를 만들었습니다.
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
에서 ~/.tmux/
나는 많은 용도로 여러 세션이있다. 예를 들어 서로 개발 환경이 다른 회사에서 일합니다. 따라서 위의 별칭 기능을 사용하면 간단히 호출 할 수 있습니다 tmx company1
. 필요한 구성을로드하십시오.
업데이트 :tmux
명령 후 "$ 2"의 목적은 추가 tmux 인수를 전달할 수 있다는 것입니다.
no server running on /tmp/tmux-1000/default
) 함수가 실제로 작동하지 않습니다 . 그렇기 때문에 명령을로 패치해야했습니다 tmux new-session
. 참조 github.com/fatso83/dotfiles/commit/…
"get.all"스크립트에서 매일 아침 호출하여 추적하는 소프트웨어를 새로 고치기 위해 여러 개의 "get.XXX"작업을 실행합니다. 그들 중 일부는 자동 종료입니다. 다른 사람들은 일단 이맥스를 구축하라고 요구하는 것처럼 더 많은 상호 작용이 필요합니다.
#!/bin/sh
tmux att -t get ||
tmux \
new -s get -n capp \; \
send-keys 'get.capp' C-m \; \
neww -n emacs \; \
send-keys 'get.emacs' C-m \; \
neww -n git \; \
send-keys 'get.git' C-m \; \
neww -n mini \; \
send-keys 'get.mini' C-m \; \
neww -n port \; \
send-keys 'get.port' C-m \; \
neww -n rakudo \; \
send-keys 'get.rakudo' C-m \; \
neww -n neil \; \
send-keys 'get.neil && get.neil2 && exit' C-m \; \
neww -n red \; \
send-keys 'get.red && exit' C-m \; \
neww -n cpan \; \
send-keys 'get.cpan && exit' C-m \; \
selectw -t emacs
그리고 이것이 내가하는 방법입니다.
#!/bin/bash
function has-session {
tmux has-session -t name_of_my_session 2>/dev/null
}
if has-session ; then
echo "Session already exists"
else
cd /path/to/my/project
tmux new-session -d -s name_of_my_session 'vim'
tmux split-window -h -p 40 start_web_server
tmux split-window -v
tmux attach-session -d -t name_of_my_session
fi
각 프로젝트마다 하나의 파일이 있습니다. 또한 취미 프로젝트를 위해 일하기 위해 일부를 그룹화 할 수 있습니다.
또한 당신은 그것을 이동할 수 ~/bin
, 폴더에 추가 PATH
주고 tmux_my_awesome_project
이름을. 그런 다음 각 위치에서 실행할 수 있습니다.
bro 시도해보십시오 . 프로젝트 부트 스트 래퍼입니다.
그것은 상호 작용하기 쉬운 API를 제공합니다 tmux
.
다음과 같이 보입니다.
#!/bin/sh
# @ project_name/tasks/init.sh
structure project_name
window editor
run 'vim'
window terminal
run 'echo happy coding ...'
focus editor
connect project_name
프로젝트를 시작하려면 모두 다음 명령을 실행하십시오.
bro start <project_name>
아래의 스크린 캐스트를 확인하면 API를 시작 bro
하고 사용 하는 방법을 보여줍니다 tmux
.
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
이를위한 tmux 플러그인이 있습니다.
tmux-resurrect를 확인하십시오
시스템 재시작 후 tmux 환경을 복원하십시오.
컴퓨터를 다시 시작해야 할 때를 제외하고 Tmux는 훌륭합니다. 실행중인 모든 프로그램, 작업 디렉토리, 창 레이아웃 등이 손실됩니다. 유용한 관리 도구가 있지만 워크 플로가 발전하거나 새 프로젝트를 시작할 때 초기 구성 및 지속적인 업데이트가 필요합니다.
tmux-resurrect는 tmux 환경의 모든 작은 세부 사항을 저장하므로 시스템을 다시 시작한 후 (또는 마음에들 때) 완전히 복원 할 수 있습니다. 구성이 필요하지 않습니다. tmux를 종료하지 않은 것처럼 느껴집니다.
풍모:
- tmux 환경의 지속적인 절약
- 컴퓨터 / 서버가 켜질 때 자동 tmux 시작
- tmux가 시작될 때 자동 복원
이 스크립트를 만들었습니다 . 그것은 tmuxinator, 루비 등이 필요하지 않습니다. 구성 가능한 bash 스크립트 일뿐입니다.
config라는 파일에는 다음과 같은 내용이 포함되어야합니다.
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
bash 코드는 다음과 같아야합니다.
#!/bin/bash
if [ -r config ]; then
echo ""
echo "Loading custom file"
. config
else
. config.dist
fi
tmux start-server
window=0
windownumber=-1
for i in "${combo[@]}"; do
if [ $((window%2)) == 0 ]; then
name=${i}
((windownumber++))
else
command=${i}
fi
if [ ${combo[0]} == "${i}" ]; then
tmux new-session -d -s StarTmux -n "${name}"
else
if [ $((window%2)) == 0 ]; then
tmux new-window -tStarTmux:$windownumber -n "${name}"
fi
fi
if [ $((window%2)) == 1 ]; then
tmux send-keys -tStarTmux:$windownumber "${command}" C-m
fi
((window++))
done
tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux
tmux start_server
서버 자체를 시작하지는 않습니다. github.com/tmux/tmux/issues/182
플러그인 tmux-continuum 은 tmux 세션을 자동 저장하고 다음에 tmux가 시작될 때로드합니다. 여기에서 일부 사용자 정의 스크립트 솔루션보다 설정이 더 쉬워야합니다.
풍모:
- tmux 환경의 지속적인 절약
- 컴퓨터 / 서버가 켜질 때 자동 tmux 시작
- tmux가 시작될 때 자동 복원
요청에 따라 세션을 저장하려면 tmux-resurrect 플러그인을 사용할 수 있습니다 . tmux- continuum 을 실행하려면 tmux-resurrect 도 필요합니다
tmux-resurrect는 tmux 환경의 모든 작은 세부 사항을 저장하므로 시스템을 다시 시작한 후 (또는 마음에들 때) 완전히 복원 할 수 있습니다. 구성이 필요하지 않습니다. tmux를 종료하지 않은 것처럼 느껴집니다.
tmux 후크 를 사용 하여 새 세션이 작성 될 때 명령을 실행할 수 있습니다 . 특히, 이것은 session-created
후크를 사용하여 달성됩니다 .
예를 들어, 오른쪽 아래에서 htop을 실행하여 화면을 세 가지 방법으로 분할하려면 ~/.tmux.conf
파일에 다음 줄을 추가 할 수 있습니다 .
set-hook -g session-created 'split -h ; split -v top'
이 방법의 장점은 원하는 결과를 얻기 위해 특별한 방법 (예 : 쉘 스크립트 또는 별명)으로 tmux를 실행할 필요가 없다는 것입니다. 후크 명령이 후속 첨부 파일이 아닌 처음 세션을 작성할 때만 실행되도록 이 다른 답변tmux new-session -A -s mysession
에서 설명한 것과 이것을 결합 할 수도 있습니다.
이 기능은 2016 년 d15d54c2c 에 의해 추가되었습니다 . 포함 된 첫 번째 릴리스는 2.4입니다.
나는이 페이지의 모든 아이디어를 사용하려고 시도했지만 그중 하나를 좋아하지 않았습니다. 터미널을 열 때 특정 창 세트로 tmux를 시작한 솔루션을 원했습니다. 또한 새로운 터미널 창을 열면 이전 세션에서 tmux 세션을 대신합니다.
위의 솔루션은 종종 여러 tmux 세션을 여는 경향이 있으며 하나만 원합니다. 먼저, 나는 이것을 내 추가했다 ~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
그런 다음에 다음을 추가했습니다 ~/.tmux.conf
.
new -s default -n emacs /usr/local/bin/emacs
neww -n shell /usr/local/bin/bash
neww -n shell /usr/local/bin/bash
selectw -t 1
이제 터미널을 시작하거나 tmux 등을 시작할 때마다 기존의 원하는 설정 (세션 default
)에 다시 연결 하거나 해당 설정으로 새 세션을 만듭니다.
tmux start_server
서버 자체를 시작하지는 않습니다. github.com/tmux/tmux/issues/182
bash --rcfile
특정 devtools 버전이 활성화 된 과학 리눅스에서 멋진 쉘을 얻으 려면이 작업을 수행하기 위해 끔찍한 탈출을해야했습니다 . 누군가가 똑같이하려고하면 여기에 남겨 두십시오.tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"