답변:
세션 이름은 tmux 변수에 저장되어 터미널#S
에서 액세스 할 수 있습니다.
tmux display-message -p "#S"
에서 사용하고 싶다면 .tmux.conf
간단 #S
합니다. 이 -p
옵션은 stdout에 메시지를 인쇄하고, 그렇지 않으면 메시지가 tmux 상태 행에 표시됩니다 .
세션 내에서 위의 명령을 호출하면 세션 이름이 반환됩니다. 세션 외부에서 호출 된 경우에도 여전히 마지막으로 실행중인 세션의 이름을 반환합니다. 세션 내부에 있는지 여부를 확인 하는 tmux 명령을 찾을 수 없으므로이 문제를 해결해야했습니다.
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
첨부 된 모든 세션을 표시 (attached)
하고 끝에 표시됩니다. sed 를 사용하면 -n
키워드를 찾는 곳을 제외하고 모든 출력 (option )을 억제합니다 (attached)
.이 줄에서 a 뒤에 모든 것을 잘라내어 :
세션 이름을 남겨 둡니다. 이것은 반대로 세션 내외에서 나를 위해 작동합니다 tmux display-message -p "#S"
.
물론이 전혀 없다 경우에만 작동하지 :
않고 (attached)
세션의 이름으로.
Chris Johnsen이 언급 한 것처럼 tmux 세션 내부에 있는지 확인하는 방법 은 환경 변수가 설정되어 있는지 확인하는 것입니다.
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
이 게시물을 사용하여 여기를 살펴보십시오 . tmux
클라이언트 를 구별하는 것은 클라이언트 tty
이지만 세션 이름은 tmux
서버 속성이며 tmux
클라이언트 내부 또는 외부에서 세션 이름을 볼 때와 동일 하다는 것을 이해했습니다 . 다음으로 tmux info | head
클라이언트의 pid와 tty 및 서버의 pid를 표시하는을 사용할 수 있습니다 .
tmux info | grep $$ | grep -q `ps -p $$ -o tty=`
tmux
클라이언트 내부에있는 경우 다음 명령 반환 값은 0이고 클라이언트 외부에 실행중인 경우 0이 아닙니다 tmux
. 스크립트에서 실행하는 경우 tty가 실행중인 스크립트가 아닌 쉘 프로세스와 연관되므로 $$ 대신 ppid를 사용해야합니다.
tmux
TERM 환경 변수를 확인하는 것이 클라이언트 내부 또는 외부에 있는지 쉽게 알 수있는 쉬운 방법 중 하나 입니다. 클라이언트 외부에는 'xterm'이라고 표시되고 내부에는 'screen'이라고 표시됩니다. 그러나 첫 번째 방법이 훨씬 좋습니다.
다음은 펄 스크립트입니다. 그것을 쉘 스크립트 또는 쉘 스크립트 기능으로 만드는 것은 독자에게 맡겨진 연습입니다.
#!/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"
하면 동일한 결과가 인쇄되고 두 명령의 반환 값이 동일합니다.