回答:
tmuxの 1.2(およびそれ以降)は、使用することができます-p
のオプションをdisplay-message
出力する(代わりに接続されたクライアントにそれを表示する)標準出力へのメッセージを。
tmux display-message -p '#S'
#S
セッション名としてフォーマットされstatus-left
ます(manページのオプションの説明を参照)。
5年近くたっても、これらの答えがどちらも適切ではないと指摘した人は誰もいなかったことに驚いています。現在のTTYがホスト上の唯一の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セッションの一部であるかどうかにかかわらず機能します。
tmux list-panes -a -F '#{pane_tty} #{session_name}'
すべてのセッションのペインをリストするために使用することもできます。どれだけ新しいのかわからない-a
ので、YMMV。
TMUX
を実行tmux display-message -p '#S'
する前に環境変数をチェックすることと組み合わせると正常に機能します。
拡張/修正TIM-人々の答えを
通りdon_crisstiさんのコメント
で、これはなぜされてgrep -v
期待通りに機能していませんか?。
tim-peoplesの回答にある「$(tty)」コマンド
| grep "$(tty)" |
そのコンテキストでは期待どおりに動作しません。文字列「not a tty」に評価されます。
この問題を変数で置き換えることで解決します。
tty = $(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}'