Имя сеанса хранится в переменной 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"
, выводится один и тот же результат, а возвращаемое значение обеих команд одинаковое.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Посмотрите здесь , используя этот пост, я понял, что единственное, что отличает
tmux
клиентов, это ихtty
имена, но имена сессий являютсяtmux
свойством сервера и одинаковы, когда мы смотрим на имя сессии изнутри или снаружиtmux
клиента. Далее мы можем использовать,tmux info | head
который отображает pid и tty клиента и pid сервера.Следующая команда возвращает значение 0, если мы находимся внутри
tmux
клиента, или ненулевое, если мы работаем за пределамиtmux
клиента. Если вы запускаете его из скрипта, убедитесь, что вы используете ppid вместо $$, так как tty связан с процессом оболочки, а не со скриптом, который вы запускаете.Один простой способ, но менее надежный, чтобы узнать, находимся ли мы внутри или снаружи
tmux
клиента, - это посмотреть переменную среды TERM. Похоже, что вне клиента он говорит «xterm», но внутри он говорит «экран». Тем не менее, я нахожу первый способ намного лучше.источник
Вот скрипт на Perl; Создание сценария оболочки или функции сценария оболочки - упражнение, оставленное читателю.
Это производит следующий вывод в сеансе TMUX:
Вне сеанса TMUX он будет производить следующее:
Вы можете отказаться от
print
операторов и просто использовать код завершения, если хотите использовать его в сценарии оболочки или в чем-то другом.источник