Tmux内にセッションが存在し、セッションが存在するかどうかに応じて、特定のセッションを作成/アタッチまたは切り替えるシェルスクリプトを作成しています。
Tmuxセッション内から新しいtmuxセッションを作成する必要がある場合を除いて、すべてがうまく機能しています。
スクリプトがtmux new-session -s name
を実行すると、次の出力が得られます。
セッションは注意して入れ子にし、強制的に$ TMUXの設定を解除する必要があります
私は実際にセッションをネストしたくありません。私の目標は別の別のセッションを作成し、tmuxセッション内から切り替えますです。
これは可能ですか?
最も簡単な方法(コマンドプレフィックスとしてctrl-b
を使用する場合)は次のとおりです。
ctrl-b :new
新しいセッションを作成するには、
ctrl-b s
セッションをインタラクティブに選択して接続します。
このスクリプトは、セッションが存在するかどうかを確認します。セッションが存在しない場合は、新しいセッションを作成して接続します。セッションが存在する場合、何も起こりません。そのセッションにアタッチします。 `〜/ development 'をプロジェクト名に置き換えてください。
$ touch ~/development && chmod +x ~/development
# ~/development
tmux has-session -t development
if [ $? != 0 ]
then
tmux new-session -s development
fi
tmux attach -t development
2つの切り離されたセッションを作成し、それらをリストし、1つに接続してから、tmuxサイクル内からセッションを実行してみましょう。
tmux new -s name -d
は、新しいデタッチセッションを作成しているため、tmuxの内部から機能します。そうしないと、ネストエラーが発生します。
$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
現在、ターゲットセッションの内部にあるか、よりよく知られていますattached。接続中に新しいセッションを作成しようとすると、ネストエラーが発生します。
$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force
これを解決するために、新しい分離セッションを作成します。例えば。、
$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]
セッションの切り替え(切り替え)
Prefix
(
前のセッションPrefix
)
次のセッション注:Prefix
はデフォルトでCtrl-b
です。 Prefix
をCtrl-a
にバインドでき、Mac OSXではCaps Lockをctrl system preferences > keyboard > modifier keys
に変更できます
デタッチせずにセッションにアタッチしようとすると、エラーが発生します。
$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force
代わりに、コマンドモードPrefix
:
を使用し、attach -t session_name
と入力してEnterキーを押します。
これを使用すると私にとってはうまくいきます:
TMUX= tmux new-session -d -s name
tmux switch-client -t name
TmuxがTMUX=
メッセージをスローしないように、最初の行のsessions should be nested with care, unset $TMUX to force
が必要です。
端末内で起動できるすべてのコマンド(tmux new -s sessionName
など)は、tmux
内からトリガーキー(例:ctrl-b
)を押してから:
を起動し、その後tmux
部分を開始せずにコマンドを起動できます。
その結果、ctrl-b :
に続いてnew -s sessionName
を使用すると、必要な処理が正確に実行され、セッションに名前が付けられます。また、新しいセッションに自動的に切り替わります。
最初にunset TMUX
を試すことができますが、これは私にとってはうまくいきます。
user2354696のアドバイスで、次のキーバインディングを使用して新しいセッションを作成するか、既存のセッションを「複製」します
bind-key N run-Shell 'TMUX = tmux new-session -d \; switch-client -n ' bind-key C run-Shell' TMUX = tmux new-session -t $(tmux display-message -p #S)-s $(tmux display-message -p #S -clone)-d \;スイッチクライアント-n \; display-message "session #S clone" '