28

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

я нахожу

tmux rename <newname>

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

5 ответов5

41

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

tmux display-message -p '#S'

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

7

Я удивлен, что спустя почти 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 или нет.

5

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

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

| grep "$(tty)" |

не будет работать в этом контексте, как ожидалось. Он оценивается как строка «не tty».

Замена на переменную решает эту проблему.

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}'
1

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

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

Пользовательский формат немного легче разобрать, чем стандартный.

0
  • Ответ Криса Джонсена возвращает имя сеанса даже при запросе извне.
  • светлая сторона - х и ответ Тима Народов предполагают tty

Вместо этого я обнаружил, что это работает точно для меня:

if [[ -n "$TMUX_PANE" ]]; then
    session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .