tmuxセッションを開始し、すべての子プロセスが終了したことを確認してください。

tmuxセッションを開始し、すべての子プロセスが終了したことを確認してください。

私は開発のためにtmuxを使用しており、ウィンドウで実行されているタスクと独自のウィンドウで実行される他のタスクがあります。プロジェクトディレクトリのデフォルト名がtmuxセッション名であるというルールを設定しました。

export SESSION_NAME="my-project-name"
tmux kill-session -t "$SESSION_NAME"
tmux new-session -s "$SESSION_NAME" \
                "api.start --monitored" \; \
                split-window "ui.start --monitored" \; \
                select-layout tiled \; \
                set-option -w remain-on-exit on \; \
                set-option -w mouse on \; \
                set-option -g mouse on \; \
                bind-key -n C-c kill-session -t "$SESSION_NAME"

同じルールで別のプロジェクトを開始する場合を除いて、すべてがうまくいくようです。最初のセッションでCtrl + cを押すと、SESSION_NAMEは私が望むものではなく、最新のtmux生成セッションの1つだと思います。

ベストアンサー1

公開されたコードスニペットでは、$SESSION_NAMEシェルは各図形を拡張し、各図形は拡張tmux値をコマンドライン引数として使用します。

(そうではなく、$SESSION_NAME後でtmux内またはtmux内のシェル内で拡張したい場合でも、export SESSION_NAME="my-project-name"おそらく無駄です。tmux環境を構築する方法。このupdate-environmentオプションまたはnew-session -e …コマンドが役に立ちます。 )

これは次の実行$SESSION_NAMEに含まれます。bind-key -n C-c kill-session -t "$SESSION_NAME"tmux

bind-key -n C-c kill-session -t my-project-name

その後、他のプロジェクトでは、tmuxコマンドは次のようになります。

bind-key -n C-c kill-session -t different-name

重要なことは、bind-key単一のセッション自体に限定されないことです。bind-key -n C-c …tmuxサーバー全体の+動作を変更します。あなたの場合、最後のタスクは前のタスクを上書きし、すべてのセッションで+を上書きします。Ctrlcbind-keyCtrlckill-session -t different-name

セッションごとにkey-tableプライマリキータブを個別に設定するだけでなく、そのオプションを使用してプライマリキータブを別のものに設定することもできます。rootそれぞれの新しいキータブでC-c以下を設定できます。考えるたぶん可能かもしれません。

私があなたならもっと簡単なことをします。私はそうします:

tmux bind-key -n C-c kill-session

kill-session-t目標なし現在のセッションなので、このバインディングは目的のタスクを実行するか、別のセッションを実行する必要がありmy-project-nameますdifferent-name

正直に言うと、「他の集まり」は私にとってあまりにも多くです。私はCtrl+c私についてのすべてを殺したくありません。汎用セッション。私はこの問題を解決します:

  • これを無視してC-c別のキーストロークを「グローバルSIGINT」として選択し、誤ってそれらの1つを使用してください。

  • または、+を「グローバルSIGINT」としてCtrl使用する必要があるセッションを明示的に「表示」します。c次のように見えます。

    tmux new-session -e 'TMUX_GLOBAL_SIGINT=1' \; \
          bind-key -n C-c if-shell '[ -n "$TMUX_GLOBAL_SIGINT" ]' kill-session 'send-keys C-c'
    

    TMUX_GLOBAL_SIGINTこれで、環境にnull以外の変数があるすべてのセッションでそのセッションがCtrl終了cします。各セッションでTMUX_GLOBAL_SIGINT空白またはCtrl+が設定されていない場合は、c通常どおりに機能します。

    メモ:

    • tmux set-environment -u TMUX_GLOBAL_SIGINT開始セッションの場合、設定を使用または変更できますtmux set-environment TMUX_GLOBAL_SIGINT 1-t現在のセッションである必要はありませんが、特定のセッションをターゲットにするために使用されます)。

    • tmuxで始まるシェル(または他のプログラム)はを継承できますTMUX_GLOBAL_SIGINT。実行されるとtmux new-session …(などによって)、tmuxが環境を管理する方法を明示的に読み、理解していなくてupdate-environmentも、新しいセッションも変数を継承できます。-e 'TMUX_GLOBAL_SIGINT=1'man 1 tmux

おすすめ記事