tmux가 연결되어 있는지 확인하는 방법은 무엇입니까?

tmux가 연결되어 있는지 확인하는 방법은 무엇입니까?

나는 tmux 세션에서 Irssi를 실행하고 있으며 누군가가 나에게 비공개 메시지를 보내거나 내가 tmux 세션에 연결되어 있지 않을 때 나를 언급할 때 나에게 이메일을 보내도록 Irssi 스크립트(확장)를 작성하고 있습니다.

이것에 대한 모든 것은 매우 간단합니다. 한 가지가 빠졌습니다. tmux 세션이 연결되어 있는지 감지하는 방법은 무엇입니까?

나는 지금까지 이 작업을 해왔고 주로 이것이 올바른/최선의 방법인지, 아니면 다르게 해야 하는지 확인하기 위해 여기에 왔습니다. 어떤 제안이라도 감사하겠습니다!

# Get the current session_name value from tmux
$ tmux display -p '#{session_name}'
2

# Running list-clients while I'm attached yields the following,
# from both the same window as well as another window:
$ tmux list-clients -t 2
(null): 2 [180x42 (null)] 

# As well, running list-clients while detached yields no output:
$ tmux list-clients -t 2
$ 

대체로 나는생각하다이것이 이 문제를 해결하는 올바른 방법이지만, 이 문제를 확인하는 방법에 대한 더 나은 방법이나 제안이 있으면 언제든지 환영합니다.

답변1

좋습니다. 필요한 부분은 이미 확보한 것 같습니다. 하지만 이를 결합하여 응집력 있는 전체로 만들겠습니다.

환경 TMUX변수는 현재 프로세스가 tmux에서 실행 중인지 여부를 알려줍니다.

<~> $ echo $TMUX
/private/var/folders/1s/ff98nkc90mv7pfglffklcv8w0000gn/T/tmux-501/default,27570,8

마지막 값(8)은 세션 ID(세션 이름일 수도 있고 아닐 수도 있음)입니다. 위의 예에서 세션 ID는 8이지만 "8"이라는 세션이 없습니다.

<~> $ tmux ls
0: 1 windows (created Sat Nov 23 21:17:45 2013) [80x23]
1: 1 windows (created Sat Nov 23 21:17:45 2013) [120x34]
bar: 2 windows (created Tue Nov 26 03:05:03 2013) [120x34] (attached)
blech: 1 windows (created Tue Nov 26 03:12:46 2013) [120x34] (attached)

그러나 -F 형식 문자열을 사용하여 tmux에서 이 정보를 얻을 수 있습니다.

<~> $ tmux ls -F "#{session_name}: (#{session_id})"
0: ($0)
1: ($1)
bar: ($5)
blech: ($8)

그런 다음 이 정보를 사용하여 첨부되었는지 확인할 수 있습니다.

<~> $ tmux ls -F "#{session_id}: #{?session_attached,attached,not attached}"
$0: not attached
$1: not attached
$5: attached
$8: attached

모든 것을 하나로 합치는 데 도움이 필요하면 알려주십시오.

답변2

의견에 있는 jasonwryan의 제안에 따라 다음 두 명령을 사용하게 되었습니다.

현재 세션 이름을 표시합니다.

우리는 스크립팅 언어를 사용하고 있으므로 반드시 세션 ID를 알 필요는 없습니다.

tmux display -p '#{session_name}'

모든 세션을 이름 및 해당 연결 상태별로 나열합니다.

session_attached는 부울이며 단일 숫자로 표시되므로 대부분의 스크립팅 언어에서 이 출력 형식을 쉽게 구문 분석할 수 있습니다.

# Show the session attached status for each session name. session_attached
# is a single digit, either 0 or 1, making it easy to distinguish 
tmux ls -F '#{session_attached} #{session_name}'

Perl(IRSSI 플러그인)에서 이 출력 형식을 구문 분석하는 것은 다음과 같습니다.

my ($attached, $name) = $line =~ /^(\d) (.+)$/;

관련 정보