여러 세션을 정의한 tmux 구성 파일을 다시로드하는 방법은 무엇입니까?


9

에서 두 개의 분리 된 세션을 사용 tmux하고 있으며 다음과 같은 전체가 있습니다 /etc/tmux.conf.

set -g base-index 1

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

standard다음 명령을 호출하여 세션 을 시작합니다 .

urxvtc -name 'tmux' -e bash -c 'tmux attach-session -t standard'

세션이 없으면 세션을 만들고 세션이 있으면 연결합니다. 보시다시피 두 개의 창이 있는데 그 중 하나는 두 개의 창으로 나뉩니다. 구성 파일을 다시로드 할 때 다른 세션에서 2 개의 추가 창을 얻었으며 둘 다 기존 창에 추가되었습니다. 또한 이전 창에는 추가 창 하나가 추가되었습니다. 두 개의 추가 창은 명확하며 실행 된 명령이 없습니다 (중지).

연결된 세션에만 적용되는 방식으로 구성 파일을 다시로드하는 방법이 있습니까? 또는 세션을 사용할 때 구성 파일을 다시로드하는 것을 잊어야하며 새로운 설정을 적용하려면 tmux kill-server세션을 새로 사용 하고 시작 해야 합니까?

답변:


5

래퍼 만들기

사용자 정의 세션을 설정하기 위해 어떤 형태의 래퍼 스크립트가 귀하의 요구를 가장 잘 충족한다고 생각합니다. 이것에 대한 답변 과 같은 .

다음과 같이 보이지만 특정 요구에 맞게 변경해야합니다.

#!/bin/bash

# test if the session has windows
is_closed(){ 
    sess=$1
    n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
    [[ $n -eq 0 ]]
}

# either create it or attach to it
if is_closed logi ; then
  tmux new -d -s logi -n cmd
  tmux neww -t logi -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
  tmux splitw -t logi:1 -v -p 50
  tmux selectw -t logi:2
  tmux selectp -t logi:1
fi
if is_closed standard ; then
  tmux new -d -s standard -n htop "htop"
  tmux neww -n cmd -t standard
  tmux splitw -t standard:2 -v -p 50
  tmux selectw -t standard:2 
  tmux selectp -t standard:1
fi

구성 파일을 다시로드하려면

tmux를 사용하는 동안 구성 파일을 편집하면 프롬프트가 표시됩니다.

tmux source-file /path/to/conf

또는 키에 바인딩 할 수 있습니다. .tmux.conf

bind r source-file ${HOME}/.tmux.conf \; display-message "source-file reloaded"

홈 디렉토리 구성

마지막으로, /etc/tmux.conf공유 시스템을 사용해야하는 경우 다른 사용자에게는 도움이되지 않기 때문에 중요한 사용자 정의를 추가해서는 안됩니다 . 대신 ~/.tmux.conf로컬 및 개인의 요구에 맞게 사용자 정의를 추가하는 것이 좋습니다 .


스크립트를 실행하는 동안 오류가 발생했습니다 : [[: not found(7 번째 줄)
Mikhail Morfikov

1
@MikhailMorfikov sh가 다른 버전 일 수 있습니다. 맨 위 줄을로 변경해보십시오 #!/bin/bash.
scicalculator

그렇습니다.
Mikhail Morfikov

1

랩퍼 스크립트를 사용할 필요가 없으며 source-file명령 을 사용하여 수행 할 수 있습니다 .

나는 .tmux.conf두 조각으로 나눕니다 .

source-file ~/.config/tmux/options.conf
source-file ~/.config/tmux/session.conf

그런 다음 session.conf분할 창 정의를 포함합니다.

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

그리고 options.conf옵션 만 정의를 포함 :

bind R source-file ~/.config/tmux/options.conf \; display-message "Config reloaded..."
set -g base-index 1

이렇게하면 bind R소스 만 소스 options.conf와 모든 항목을 다시로드 할 수 있지만 새 창이 생성되지는 않습니다.
하나의 작은 단점은 창 레이아웃을 변경하려면 새 세션을 종료하고 시작해야한다는 것입니다.


0

이 스크립트를 만들었습니다 . 그것은 tmuxinator, 루비 등이 필요하지 않습니다. 구성 가능한 bash 스크립트 일뿐입니다.

다음과 같이 mi 구성 파일을 구성합니다.

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

모든 프로젝트를 구성 할 수 있습니다. 나머지는 스크립트에 의해 수행됩니다.

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