「screen -R」と同等のtmux?


10

tmux attachコマンドは、複数の組合せのように機能screen -rし、screen -x最初のそれが最も最近に添付するtrys - デタッチセッション、および使用できない場合は、それが現在接続されているセッションにアタッチします。の動作をエミュレートしたいscreen -R:最初に切り離されたセッションに接続しようとし、切り離されたセッションがない場合は新しいセッションを開始します。tmuxでこれを実現する最良の方法は何ですか?

回答:


12

IRCのウィザードを調べたところ、この動作をする単一のtmuxコマンドはないと確信しています。幸い、シェルを使用してエミュレートするのはかなり簡単です。

(tmux ls | grep -vq attached && tmux at) || tmux

新しいセッションを開始する場合の「サーバーへの接続に失敗しました:接続が拒否されました」出力をスケルチするための(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
小さな編集

3

それがtmuxマニュアルで言っていることにもかかわらず:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

ドリューの答えは、次のような状況では適切に機能しません。

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux at最後のセッション(#1)に接続します(このセッションはまだどこかに接続されていますが)。これは、いくつかのtmuxセッションを実行し、分離されたものにのみ接続するという全体の考えを台無しにします(mosh + tmux + iterm2を使用して完全なローミング端末を作成するため)。

別のアプローチは、接続されていないセッションを手動で選択することです:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


良いキャッチ!ドキュメントは実際の動作と同期していません。これに関するバグレポートを作成しました。
ドリューフランク

これを修正するパッチが出ているので、次のリリースまでに、宣伝どおりに動作するはずです。
ドリューフランク

パッチは1.8にありますか?
momeara 2013年

2

一度に2つのtmuxセッションしか使用しない傾向があるため、各ターミナルウィンドウでこのようなことを行います。

端末ウィンドウ0:

tmux attach -t 0 || tmux new

端末ウィンドウ1:

tmux attach -t 1 || tmux new

2

これは私にとって最もうまくいきました:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

-tは適切なセッションに接続するために必要です。


1

どうですか

tmux attach || tmux new

または、ファイル~/.tmux.confが存在しない場合は作成して、追加します

new-session

実行時にセッションがない場合に新しいセッションを作成するようにしますtmux attach

tmuxエイリアスを作成すると便利な場合もありますtmux attach


最初の提案は、現在接続されているtmuxセッション(screen -xと同様)にアタッチしますが、これは避けたいものです。2番目の提案はこれと同じ問題を示し、またtmux source-fileコマンドを使用して構成を再ロードすると、「余分な」tmuxセッションを作成するという望ましくない結果をもたらします。
ドリューフランク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.