
Я пишу скрипт. Я действительно хочу это знать. Надеюсь, исполняемый файл tmux сможет мне это сказать.
я нахожу
tmux rename <newname>
можно переименовать текущую сессию. Но я не могу найти команду, чтобы получить ее собственное имя.
решение1
Сtmux1.2 (и более поздних версиях) можно использовать опцию -p
для display-message
вывода сообщения на стандартный вывод (вместо отображения его подключенному клиенту):
tmux display-message -p '#S'
#S
форматируется как имя сеанса (см. описание параметра status-left
на странице руководства).
решение2
Я удивлен, что после почти 5 лет никто не указал, что ни один из этих ответов не является адекватным. Хотя оба ответа работают нормально, пока текущий TTY подключен к единственному сеансу tmux на хосте, оба эти ответа не работают, если:
- текущий сеанс терминала не является частью сеанса tmux, или
- есть несколько подключенных сессий 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}'
Пользовательский формат немного проще для анализа, чем формат по умолчанию.