Post

๐Ÿงท tmux ์ดˆ๊ธฐ ์…‹์—…์šฉ ์„ธ์…˜/์œˆ๋„์šฐ/ํŒจ๋„ ์Šคํฌ๋ฆฝํŠธ

main/sub ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  main์—์„œ ์ขŒ/์šฐ + ์˜ค๋ฅธ์ชฝ ์ƒ/ํ•˜ ๋ถ„ํ• ์„ ๊ตฌ์„ฑํ•˜๋Š” ์ดˆ๊ธฐ ์…‹์—… ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ก.

๐Ÿงท tmux ์ดˆ๊ธฐ ์…‹์—…์šฉ ์„ธ์…˜/์œˆ๋„์šฐ/ํŒจ๋„ ์Šคํฌ๋ฆฝํŠธ

๐Ÿงท tmux ์ดˆ๊ธฐ ์…‹์—…์šฉ ์„ธ์…˜/์œˆ๋„์šฐ/ํŒจ๋„ ์Šคํฌ๋ฆฝํŠธ

main/sub ์„ธ์…˜์„ ๋‚˜๋ˆ„๊ณ , main์€ 2๊ฐœ window๋กœ ๋ถ„๋ฆฌํ•œ ๋’ค ์ฒซ window์—์„œ ์ขŒ/์šฐ + ์˜ค๋ฅธ์ชฝ ์ƒ/ํ•˜ ๋ถ„ํ• ์„ ๋งŒ๋“œ๋Š” ์ดˆ๊ธฐ ์…‹์—… ๊ธฐ๋ก. ํ•„์š”ํ•  ๋•Œ ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋ฐ”๋กœ ๋„์šฐ๋Š” ๋ชฉ์ .


1. ์Šคํฌ๋ฆฝํŠธ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env bash

set -euo pipefail

MAIN_SESSION="main"
SUB_SESSION="sub"

# ์ด๋ฏธ main ์„ธ์…˜์ด ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋ถ™๊ธฐ
if tmux has-session -t "$MAIN_SESSION" 2>/dev/null; then
  tmux attach -t "$MAIN_SESSION"
  exit 0
fi

# 1) main ์„ธ์…˜ ์ƒ์„ฑ + ์ฒซ ์œˆ๋„์šฐ
tmux new-session -d -s "$MAIN_SESSION" -n "main"

# 2) ์ฒซ ์œˆ๋„์šฐ: ์ขŒ/์šฐ ๋ถ„ํ•  + ์˜ค๋ฅธ์ชฝ ์ƒ/ํ•˜ ๋ถ„ํ•  (์ด 3 panes)
tmux split-window -h -t "$MAIN_SESSION":0
tmux split-window -v -t "$MAIN_SESSION":0.1

# ํ•„์š”ํ•˜๋ฉด ์ปค๋งจ๋“œ ์ž๋™ ์‹คํ–‰
tmux send-keys -t "$MAIN_SESSION":0.0 "cd ~/" C-m
tmux send-keys -t "$MAIN_SESSION":0.1 "cd ~/" C-m
tmux send-keys -t "$MAIN_SESSION":0.2 "cd ~/" C-m

# 3) main ๋‘ ๋ฒˆ์งธ ์œˆ๋„์šฐ
tmux new-window -t "$MAIN_SESSION" -n "secondary"
tmux send-keys -t "$MAIN_SESSION":1 "cd ~/" C-m

# 4) sub ์„ธ์…˜ ์ƒ์„ฑ
tmux new-session -d -s "$SUB_SESSION" -n "sub"
tmux send-keys -t "$SUB_SESSION":0 "cd ~/" C-m

# 5) main ์ฒซ ์œˆ๋„์šฐ๋กœ ์ด๋™ ํ›„ attach
tmux select-window -t "$MAIN_SESSION":0
tmux attach -t "$MAIN_SESSION"

2. ์‹คํ–‰ ๋ฐฉ๋ฒ•

1
2
3
4
5
6
7
8
9
# ํŒŒ์ผ ์ €์žฅ
mkdir -p ~/bin
vi ~/bin/tmux-work.sh

# ์‹คํ–‰ ๊ถŒํ•œ
chmod +x ~/bin/tmux-work.sh

# ์‹คํ–‰
~/bin/tmux-work.sh

3. ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์˜ˆ์‹œ

โ— ์œˆ๋„์šฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ

1
2
3
tmux new-session -d -s "$MAIN_SESSION" -n "editor"
tmux new-window -t "$MAIN_SESSION" -n "api"
tmux new-window -t "$MAIN_SESSION" -n "ops"

โ— ํŒจ๋„ ์ด๋ฆ„(ํƒ€์ดํ‹€) ์ง€์ •

pane ์ž์ฒด์— โ€œ์ด๋ฆ„โ€์„ ๋ถ™์ด๋Š” ๊ฐœ๋…์€ ์—†๊ณ , ๋Œ€์‹  pane title์„ ์„ค์ •ํ•ด์„œ ํ‘œ์‹œํ•œ๋‹ค. ํ‘œ์‹œ ์œ„์น˜๋Š” pane-border-format์œผ๋กœ ์ œ์–ดํ•œ๋‹ค.

1
2
3
4
5
6
7
8
# pane title ์ง€์ •
tmux select-pane -t "$MAIN_SESSION":0.0 -T "editor"
tmux select-pane -t "$MAIN_SESSION":0.1 -T "logs"
tmux select-pane -t "$MAIN_SESSION":0.2 -T "shell"

# ํƒ€์ดํ‹€ ํ‘œ์‹œ(ํ•˜๋‹จ). ํ•„์š”ํ•˜๋ฉด .tmux.conf์— ๋„ฃ์–ด๋„ ๋จ
tmux set -g pane-border-status bottom
tmux set -g pane-border-format " #P: #T "

โ— ํŒจ๋„ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ (์ขŒ์šฐ 2๋ถ„ํ• )

1
tmux split-window -h -t "$MAIN_SESSION":0

โ— ํŠน์ • ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™

1
2
tmux send-keys -t "$MAIN_SESSION":0.0 "cd ~/project" C-m
tmux send-keys -t "$MAIN_SESSION":1 "cd ~/project" C-m

4. ์ฐธ๊ณ 

  • tmux has-session์€ ์„ธ์…˜ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•œ๋‹ค.
  • ๊ธฐ์กด main ์„ธ์…˜์ด ์žˆ์œผ๋ฉด ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์ง€ ์•Š๊ณ  attach๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์„ธ์…˜ ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ”๋‘๋ฉด ์šฉ๋„๋ณ„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด๋‘๊ธฐ ์ข‹๋‹ค.
This post is licensed under CC BY 4.0 by the author.