Имя сеанса хранится в переменной tmux#S
, для доступа к нему в терминале вы можете сделать
tmux display-message -p "#S"
Если вы хотите использовать его .tmux.conf
, это просто #S
. Обратите внимание, что -p
опция выведет сообщение на стандартный вывод, в противном случае сообщение отобразится в строке состояния tmux .
Если вышеуказанная команда вызывается внутри сеанса, она возвращает имя сеанса. Если он вызывается вне какого-либо сеанса, он все равно возвращает имя последнего все еще работающего сеанса. Я не смог найти команду tmux, чтобы проверить, находится ли она внутри сеанса или нет, поэтому мне пришлось придумать следующую работу:
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
показывает все сеансы, если один присоединен, он показывает (attached)
в конце. С помощью sed мы подавляем все выходные данные (опция -n
), кроме тех случаев, когда мы находим ключевое слово (attached)
, в этой строке мы вырезаем все после a :
, что оставляет нас с именем сеанса. Это работает для меня внутри и вне сеанса, в отличие от tmux display-message -p "#S"
.
Конечно, это работает, только если в названии сессии нет :
и нет (attached)
имени.
Как прокомментировал Крис Джонсен , способ проверить, находится ли кто-то внутри сеанса tmux, состоит в том, чтобы увидеть, установлена ли его переменная окружения:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
сессия, а в другой я внеtmux
сессии. Когда я набираю обе командыtmux display-message -p "#S"
, выводится один и тот же результат, а возвращаемое значение обеих команд одинаковое.