Как обнаружить, если tmux присоединяется?

Можно окрасить строку состояния из сценария обратной галочки путем печати \005{..r} или подобный (r для красного и т.д. точно так же, как в .screenrc самостоятельно), таким образом, Вы могли или хешировать имя хоста, чтобы прибыть в число или просто иметь набор условных операторов для выбирания цвета. Как пример, вот сценарий, чтобы изменить цвет и распечатать имя хоста для использования в экране:

#!/bin/bash
Red="\005{..r}"
Yellow="\005{..y}"
Green="\005{..g}"
Blue="\005{..b}"
Magenta="\005{..m}"
Cyan="\005{..c}"
White="\005{..w}"

case "$HOSTNAME" in
   lubuntu-eee)
      echo -e "$Magenta$HOSTNAME"
      ;;
   ubuntu-pc)
      echo -e "$Magenta$HOSTNAME"
      ;;
   *)
      echo -e "$Green$HOSTNAME"
esac

Вы затем добавляете запись для этого сценария к .screenrc и ссылка это в hardstatus или подписи как %4':

backtick 4 3600 3600 /usr/local/bin/screen_hostname
caption always "%{.kc}%D %d.%m.%Y %=%{.kg} %4` %{.kc}%0c"

Это предполагает, что имя хоста вряд ли изменится, следовательно тайм-аут и законность 1 часа (3 600 секунд); биты, окружающие вызов к самой обратной галочке просто, помещают дату в начале строки и время после имени хоста.

Можно даже использовать этот механизм для окраски вывода сценария в зависимости от значения уровня заряда батареи, системной нагрузки или температуры, предполагая, что у Вас есть доступ к соответствующим значениям из сценария оболочки.

6
23.11.2013, 21:20
2 ответа

Хорошо, я думаю, что у меня есть части, в которых Вы нуждаетесь, но я оставлю его до Вас для строкового представления их вместе в связное целое.

TMUX переменная среды скажет Вам, если текущий процесс будет работать под tmux или нет:

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

Последнее значение (8) является идентификатором Сессии (который может или не может также быть именем сессии). В примере выше, наш идентификатор сессии равняется 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)

Но мы можем вытащить эту информацию из tmux использование-F строки формата:

<~> $ 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

Сообщите мне, нуждаетесь ли Вы в помощи, соединяя все это.

7
27.01.2020, 20:25
  • 1
    Спасибо Joe. Я на самом деле приехал в очень похожий конечный результат на основе комментариев jasonwryan (прежде чем я видел Ваш ответ), но так как Вы добавили первый комментарий, я принял, что это отмечает его, как разрешено. Я также отправлю то, что я закончил тем, что делал для кого-либо еще как другой ответ, как будто Вы делаете его с помощью кода, существует немного более легкий путь.:) Еще раз спасибо за Ваше время! –  Spikes 07.12.2013, 00:05

На основе совета jasonwryan в комментариях я закончил со следующими двумя командами.

Покажите текущее имя сессии.

Так как мы находимся в языке сценариев, мы должны не обязательно знать идентификатор сессии.

tmux display -p '#{session_name}'

Перечислите все сессии по имени и их соответствующие приложенные состояния.

session_attached является bool и представлен как единственная цифра, помогающая большинству языков сценариев проанализировать этот выходной формат.

# 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) (.+)$/;
2
27.01.2020, 20:25
  • 1
    я думал, что попробовал что-то как tmux-p '# {session_name}' и он не работал на меня, но я предполагаю, что сделал что-то не так. Довольный Вы нашли более легкий путь. –  Joe Casadonte 08.12.2013, 06:00

Теги

Похожие вопросы