Я пытаюсь установить TERM
переменную окружения для сессий tmux в my .tmux.conf
на основе значения TERM
inhered от родительской оболочки (которой является bash). Обратите внимание, что у меня есть следующая строка в my, .tmux.conf
так что она TERM
фактически наследуется:
set -g update-environment '...some variables... TERM'
По сути, TERM
это xterm-256color
родительская оболочка, и я это обнаруживаю и устанавливаю default-terminal
опцию следующим образом:
if "[[ ${TERM} =~ 256color ]]" 'set -g default-terminal screen-256color'
Эта строка работает в tmux 1.9a на моем рабочем ПК (RHEL 6.6) и правильно устанавливается TERM
в screen-256color
, но на других ПК (включая компьютер Ubuntu на работе, на котором запущен tmux 1.8, и мой домашний компьютер Ubuntu, на котором запущен tmux 2.1) команда «condition» всегда возвращает false и поэтому TERM
все еще находится screen
внутри нового сеанса tmux.
Я также пробовал сделать if 'true' 'set -g default-terminal screen-256color'
, и это тоже не сработало! ( TERM
все еще находится screen
внутри новой сессии tmux).
Может ли кто-нибудь помочь мне разобраться, что я делаю не так? И, возможно, дать какую-то информацию о том, почему на одной машине это работает, а на двух других нет?
ОБНОВЛЯТЬ:
После запуска tmux
с включенной крайней детализацией ( tmux -vvvvvvvvvv
) я, кажется, вижу проблему.
Просматривая tmux
файл журнала сервера (tmux-server-xxxx.log), я вижу следующие строки журнала в следующем порядке (с другими строками между ними, которые я пропустил):
run job 0x55fbca2e7240: [[ xterm-256color =~ 256color ]], pid 4955
cmdq 0x55fbca2dc250: new-session (client 7)
session 0 created
job died 0x55fbca2e7240: [[ xterm-256color =~ 256color ]], pid 4955
Похоже, что создается новый сеанс.докоманда оболочки завершается, и поэтому параметр сеанса не будет установлен до более позднего времени... но этоявляетсяустанавливается.
Чтобы подтвердить это, если я отсоединю этот сеанс, отредактирую, .tmux.conf
чтобы закомментировать строку, которая проверяет $TERM
/sets default-terminal
, а затем создам новый сеанс, этот новый сеанс будет иметь TERM = screen-256color
.
На компьютере RHEL, где команда работает как положено, эти строки журнала появляются в другом порядке:
run job 0x1e82ce0: [[ xterm-256color =~ 256color ]], pid 17656
job died 0x1e82ce0: [[ xterm-256color =~ 256color ]], pid 17656
cmdq 0x1e66850: new-session (client 7)
session 0 created
...что ожидаемо. И TERM
установлено соответствующим образом на screen-256color
.
Я не указываю -b
опцию для if-shell
команды, поэтому не уверен, почему моя команда выполняется в фоновом режиме на этих двух машинах Ubuntu. Интересно, возможно ли это состояние гонки в tmux?
решение1
Вероятно, у меня есть ответ на ваши вопросы, заданные до обновления.
Как указаноздесь:
обратите внимание, что tmux использует /bin/sh -c для выполнения указанной нами команды оболочки. Таким образом, команда должна быть совместима с POSIX, поэтому тесты формы [[ не гарантируют переносимость. Современные системы Ubuntu и Debian, например, создают символическую ссылку /bin/sh на dash.
В моем случае было именно так. Все заработало после того, как я заменил "ваш" метод на следующий:
if-shell "echo $TERM | grep 256color" 'set -g default-terminal screen-256color'