tmuxコマンドを実行して現在のtmuxセッション名を知るにはどうすればいいですか?

tmuxコマンドを実行して現在のtmuxセッション名を知るにはどうすればいいですか?

スクリプトを書いています。本当にこれが知りたいです。tmux 実行ファイルがこれを教えてくれることを願っています。

私は見つけた

tmux rename <newname>

現在のセッションの名前を変更できます。しかし、独自の名前を取得するコマンドが見つかりません。

答え1

tmux1.2 (およびそれ以降) では、接続されたクライアントにメッセージを表示する代わりに、-pのオプションを使用しdisplay-messageてメッセージを stdout に出力できます。

tmux display-message -p '#S'

#Sセッション名としてフォーマットされます (status-leftマニュアル ページのオプションの説明を参照してください)。

答え2

5 年近く経った今でも、これらの回答のどちらも適切ではないと指摘する人がいないことに驚いています。現在の TTY がホスト上の唯一の tmux セッションに接続されている限り、どちらも正常に機能しますが、次の場合には、これらの回答はどちらも役に立ちません。

  1. 現在のターミナルセッションはtmuxセッションの一部ではない、または
  2. 複数のtmuxセッションが接続されている

前者の場合、ここでの回答は両方とも、接続されたセッションの名前を返します (現在の tty がそのセッションによって制御されているかどうかに関係なく)。後者の場合、結果は不確定になるか、複数の回答が返される可能性があります。

適切な質問は、「現在のターミナル セッションが接続されている tmux セッションの名前は何ですか?」です。

彼は答えたそれ質問、実行:

for s in $(tmux list-sessions -F '#{session_name}'); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'

これは、tmux セッションの数 (接続されているかどうかに関係なく) や、現在のターミナル セッションが tmux セッションの一部であるかどうかに関係なく機能します。

答え3

拡張/修正tim-peoples の回答 に従ってdon_crissti のコメント の上なぜgrep -v期待通りに機能しないのでしょうか?

「$(tty)」コマンドtim-peoples の回答

| grep "$(tty)" |

そのコンテキストでは期待どおりに動作しません。文字列「not a tty」として評価されます。

これを変数に置き換えると、この問題は解決します。

端末=$(端末)

...

| grep "$tty" |

また、tmuxセッションが存在しない場合は、元のコードでは

「/tmp/tmux-1000/default でサーバーが実行されていません」エラーメッセージ。

追加する2>/dev/nullと、エラー メッセージを出力せずにコードが実行されます。

変更されたコードは次のようになります。

tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'

答え4

理想的ではありませんが、次のようにして接続されたセッションの名前を抽出できますawk

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

カスタム形式はデフォルト形式よりも解析が少し簡単になります。

関連情報