回答:
セッションの名前はtmux変数に保存され、ターミナルで#S
アクセスするには、次のようにします。
tmux display-message -p "#S"
で使用したい場合は.tmux.conf
、単純#S
です。-p
オプションは標準出力にメッセージを出力することに注意してください。そうでない場合、メッセージはtmuxステータス行に表示されます。
上記のコマンドがセッション内で呼び出されると、セッションの名前が返されます。セッションの外部で呼び出された場合、まだ実行中の最後のセッションの名前を返します。セッション内にあるかどうかを確認するtmuxコマンドが見つからなかったため、この回避策を考え出す必要がありました。
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
すべてのセッションが表示さ(attached)
れます。接続されている場合は、最後に表示されます。sedの我々はすべての出力(オプション抑える-n
私たちはキーワードを見つける場合を除く)を(attached)
、この行では、我々は後everyhing切り取られ:
たセッションの名前で私たちを残しています、。これは、セッションとは対照的に、セッションの内外で機能しますtmux display-message -p "#S"
。
もちろん、これはセッションの名前にno :
とno がある場合にのみ機能し(attached)
ます。
Chris Johnsenがコメントしたように、tmuxセッション内にあるかどうかを確認する方法は、環境変数が設定されているかどうかを確認することです。
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
ここを見て、この投稿を使用して、tmux
クライアントを区別する1つのことは彼らのものですtty
が、セッション名はtmux
サーバープロパティであり、tmux
クライアントの内側または外側からセッション名を見ると同じであることを理解しました。次に、tmux info | head
クライアントのpidとtty、およびサーバーのpidを表示するを使用できます。
tmux info | grep $$ | grep -q `ps -p $$ -o tty=`
次のコマンドの戻り値は、tmux
クライアント内にいる場合は0 、tmux
クライアント外で実行している場合はゼロ以外です。スクリプトから実行している場合、ttyは実行中のスクリプトではなくシェルプロセスに関連付けられているため、$$ではなくppidを使用してください。
1つの簡単な方法ですが、tmux
クライアントが内部か外部かを知るのにそれほど堅牢ではありませんが、TERM環境変数を見ることです。クライアントの外部では「xterm」と表示されますが、内部では「screen」と表示されます。しかし、私は最初の方法の方がずっと良いと思います。
perlスクリプトは次のとおりです。シェルスクリプトまたはシェルスクリプト関数にすることは、読者に任された課題です。
#!/opt/local/bin/perl
use strict;
use warnings;
if (exists $ENV{'TMUX'}) {
# session ID is the last element
# /tmp/1s/ffkjhk76sdgn/T/tmux-771/default,16772,8
my($id) = $ENV{'TMUX'};
$id =~ s{^.*,(\d+)$}{$1};
# get session name
my($cmd) = q(tmux ls -F "#{session_name}: #{session_id}");
open(IN, "$cmd |") || die qq([ERROR] Cannot open pipe from "$cmd" - $!\n);
while (<IN>) {
chomp;
if (m{(^.*):\s+\$$id$}) {
print "Session name: <$1>\n";
exit 0;
}
}
print "Unable to determine TMUX session name\n";
exit 1;
}
else {
print "Not in a TMUX session\n";
exit 1;
}
これにより、TMUXセッションで次の出力が生成されます。
<~> $ tmuxsessionname
Session name: <1>
<~> $ tmux rename-session "foobar"
<~> $ tmuxsessionname
Session name: <foobar>
TMUXセッション以外では、次のものが生成されます。
<~> $ tmuxsessionname
Not in a TMUX session
print
シェルスクリプトなどでこれを使用する場合は、ステートメントを捨てて、終了コードを使用することができます。
tmux
セッションがあり、もう一方にはtmux
セッションの外にいます。両方のコマンドを入力するtmux display-message -p "#S"
と、同じ結果が出力され、両方のコマンドの戻り値は同じです。