Как узнать имя текущего сеанса tmux, выполнив команду tmux

Как узнать имя текущего сеанса tmux, выполнив команду tmux

Я пишу скрипт. Я действительно хочу это знать. Надеюсь, исполняемый файл tmux сможет мне это сказать.

я нахожу

tmux rename <newname>

можно переименовать текущую сессию. Но я не могу найти команду, чтобы получить ее собственное имя.

решение1

Сtmux1.2 (и более поздних версиях) можно использовать опцию -pдля display-messageвывода сообщения на стандартный вывод (вместо отображения его подключенному клиенту):

tmux display-message -p '#S'

#Sформатируется как имя сеанса (см. описание параметра status-leftна странице руководства).

решение2

Я удивлен, что после почти 5 лет никто не указал, что ни один из этих ответов не является адекватным. Хотя оба ответа работают нормально, пока текущий TTY подключен к единственному сеансу tmux на хосте, оба эти ответа не работают, если:

  1. текущий сеанс терминала не является частью сеанса tmux, или
  2. есть несколько подключенных сессий 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.

решение3

Расширенный/исправленныйответ tim-peoples согласнокомментарий don_crissti наПочему это grep -vне работает так, как ожидалось?.

Команда "$(tty)" вответ tim-peoples

| grep "$(tty)" |

не будет работать в этом контексте, как ожидалось. Он оценивается как строка 'not a 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}'

решение4

Не идеально, но вы можете извлечь имя прикрепленного сеанса с помощью awk:

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

Пользовательский формат немного проще для анализа, чем формат по умолчанию.

Связанный контент