web-dev-qa-db-ja.com

複数のセッションを定義したtmux設定ファイルをリロードする方法は?

tmuxで2つの別々のセッションを使用しており、/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つのウィンドウがあり、そのうちの1つは2つのペインに分割されています。設定ファイルをリロードすると、他のセッションから2つのウィンドウが追加され、両方が既存のウィンドウに追加されました。さらに、以前のウィンドウには1つのペインが追加されました。余分な2つのペインは明確で、実行されたコマンド(htop)はありません。

接続されたセッションにのみ適用されるように構成ファイルをリロードする方法はありますか?または、セッションを使用しているときに設定ファイルをリロードすることを忘れなければならず、新しい設定を適用するには、tmux kill-serverを使用してセッションを新たに開始する必要がありますか?

9

ラッパーを構築する

カスタムセッションをセットアップするためのラッパースクリプトの形であなたのニーズに最もよく応えると思います。 これに対する答え のようなもの。

このように見えますが、特定のニーズに合わせて変更する必要があります。

#!/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はローカルであり、個人のニーズに固有であるため、カスタマイズを追加することをお勧めします。

5
scicalculator

ラッパースクリプトを使用する必要はありません。source-fileコマンドを使用して実行できます。

.tmux.confを2つに分割しましたが、ソースは次のとおりです。

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 Roptions.confのみをソースでき、すべてが再ロードされますが、新しいペインは作成されません。
1つの小さな欠点は、ウィンドウレイアウトを変更する場合は、終了して新しいセッションを開始する必要があることです。

1
kissgyorgy

このスクリプト を作成しました。 tmuxinator、Rubyなど)は必要ありません。これは、構成可能な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
0
sensorario