개발 환경이 되는 짧은 셸 스크립트
tmux를 일주일쯤 쓰면 패턴이 보여. 매일 아침 같은 프로젝트를 열고, 같은 window를 만들고, 같은 명령을 돌리고 있거든. tmux의 명령줄 인터페이스가 이 순서 전체를 셸 스크립트로 자동화할 만큼 충분히 풍부해. 스크립트 하나 돌리면 작업 공간이 통째로 뜨는 거지.
기본 레시피
tmux 명령줄은 new-session, send-keys, split-window 같은 하위 명령을 받아. -d를 주면 붙지 않은 상태로 세션을 만들어서 계속 설정할 수 있고, -t로 세션이나 window나 pane을 지목해. send-keys "cmd" C-m은 문자열에 Enter까지 같이 보내주고.
tmuxinator — 셸 스크립트가 복잡해질 때
배치가 복잡해지면 tmuxinator가 YAML로 쓰는 대안이야. 작업 공간을 선언적으로 적어두고 tmuxinator start project로 띄워. Ruby gem이고, 다른 언어에도 비슷한 게 있어 (Python의 tmuxp). 개인 프로젝트 대부분은 열 줄짜리 셸 스크립트로 충분해.
SSH 너머 tmux 안의 tmux
흔한 상황이야. 로컬에서 tmux를 돌리는데, SSH로 들어간 서버에서도 tmux가 돌고 있어. 그럼 Ctrl-a가 애매해져. 로컬 prefix로 갈까, 리모트 쪽으로 갈까? 깔끔한 해법이 둘 있어.
- 머신마다 다른 prefix를 써. 로컬 tmux는
Ctrl-a, 리모트 tmux는 기본값Ctrl-b. 서로 안 겹쳐. - send-prefix를 걸어둬. 둘 다 같은 prefix를 써야 한다면,
Ctrl-a a가 안쪽에 있는 tmux로 진짜Ctrl-a를 보내도록 설정해. 두 번 눌러서 안쪽이랑 대화하는 거야.
prefix + 명령을 순서대로 치고 있는 자신을 발견하면, 그건 아직 안 쓴 스크립트야. 쓰는 데 몇 분 걸리고, 그 몇 분을 프로젝트가 끝날 때까지 매일 돌려받아.대화형 키에는 전부 짝이 있어
tmux detach-client, tmux switch-client -t name, tmux send-keys -t name 'cmd' Enter — 손으로 누르는 키에는 전부 명령줄로 부를 수 있는 짝이 있어. 자동화는 여기서 출발해.