Ответы:
В tmux 1.2 (и более поздних версиях) вы можете использовать -p
опцию display-message
для вывода сообщения на стандартный вывод (вместо отображения его на подключенном клиенте):
tmux display-message -p '#S'
#S
форматируется как имя сеанса (см. описание status-left
опции на странице руководства).
Я удивлен, что спустя почти 5 лет никто не указал, что ни один из этих ответов не является адекватным. Хотя оба работают нормально, если текущий TTY подключен к единственному сеансу 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 или нет.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
для перечисления панелей каждого сеанса. Не уверен, что нового -a
, так что YMMV.
TMUX
переменной среды перед запуском tmux display-message -p '#S'
для типичной настройки рабочего стола.
Extended / исправленный ответ ТИМ-народов игровая
согласно don_crissti свой комментарий
на Почему это grep -v
не работает , как ожидалось? ,
Команда "$ (tty)" в ответе tim-people
| 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}'
tty
.Вместо этого я обнаружил, что это работает точно для меня:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi