tmux의 bind-key 를 특정 세션에만 적용할 수 있을까요?


발생하는 문제 및 실행환경

https://rm-rf.work/f/topic/70/tmux와-ssh-로-다수의-서버-모니터링-하기 의 모니터링 스크립트를 사용하다가 q 를 누르면 한번에 세션이 다 종료되면 좋을 것 같아서

tmux bind -n q kill-session -t mon

이라고 했더니.. bind-key 가 모든 세션에 적용되어서 다른 tmux 세션에서 q 를 누르면 모니터링 세션이 종료되네요.

 tmux -f monitor.conf new-session   -s $tname -n $twin -d ssh -t a1 "$com" \;  bind -n q kill-session -t mon

이렇게 해도 마찬가지입니다.

전에 몰랐는데, -f 옵션을 이용해서 다른 conf 파일을 로드해도 이 파일의 내용이 tmux 서버의 전체 세션에 적용되더군요.

bind-key 를 전체 tmux 세션들이 아닌 특정 세션이나 윈도우에 에 한정하는 방법이 있을까요?

서버를 따로 띄우는 수 밖에 없을까요?

  • 2016년 04월 04일에 작성됨

조회수 267


2 답변


설정을 따로가져가는 방법은 아닙니다만,

tmux bind-key -n q command-prompt "kill-session"

세션의 커맨드로 문제를 해결해 보시면 어떨까합니다.

  • 2016년 04월 04일에 작성됨
    그렙에서 웹 프론트 개발을 하고 있습니다.

  • 답변 감사합니다. 특수한 경우(예르 들어 특수키를 쓴다던가)에는 괜찮은 해결책이 될 수 있겠네요. 제 경우에 이 해법의 가장 큰 문제는 다른 tmux 세션에서 더 이상 타이핑을 목적으로 `q` 키를 사용할 수 없다는 것입니다.     paul9   2016.4.4 19:45     

https://rm-rf.work/f/topic/72/tmux의-bind-key-를-특정-세션에만-적용할-수-있을까요/2 의 답변입니다.

완벽한 답은 아니지만, 소켓/서버를 분리해서 비슷한 효과를 낼 수 있습니다.

#!/bin/bash
com=${1:-"htop"}
tname=mon
twin=mon
tnw=$tname:$twin
tsocket="-L tmux_monitor_socket"
TMUX="tmux $tsocket"

$TMUX has-session -t $tname
if [ $? != 0 ]
then
  $TMUX new -s $tname -n $twin -d ssh -t a1 "$com" \; \
    bind -n d detach 
  $TMUX bind-key -n q command-prompt "kill-session"
  $TMUX split-window  -t $tnw.0 -h ssh -t v1 "$com"
  $TMUX split-window  -t $tnw.0 -v ssh -t v2 "$com"
  $TMUX split-window  -t $tnw.1 -v ssh -t vr "$com"
  $TMUX select-pane   -t $tnw.0
fi
$TMUX attach -t $tname

이런 식으로 -L 옵션을 이용해서 소켓을 따로 만들면 소켓이 다른 tmux 세션은 다른 tmux 서버에 속하기 때문에 영향을 주지 않습니다. 단점은 tmux ls 같은 명령도 소켓 별로 따로 작동해서 소켓을 기억해야하고, 불편하다는 점입니다.

하나의 tmux 서버내에서 세션별로 명령/설정을 적용할 방법이 있으면 더 좋겠습니다.

  • 2016년 04월 04일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close