Відповіді:
За допомогою tmux 1.2 (і пізніших версій) ви можете використовувати -p
опцію display-message
для виведення повідомлення в stdout (замість того, щоб показувати його приєднаному клієнту):
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)" у відповіді тимчасових людей
| grep "$ (tty)" |
не працюватиме в цьому контексті, як очікувалося. Він оцінює рядок "не tty".
Заміна його змінною вирішує цю проблему.
tty = $ (tty)
...
| grep "$ tty" |
Крім того, коли не існує сеансів tmux, оригінальний код створює
Повідомлення про помилку "немає сервера, що працює на / tmp / tmux-1000 / за замовчуванням" .
Додавання, 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