1

Я пытаюсь установить переменную окружения TERM для сеансов tmux в моем .tmux.conf на основе значения TERM унаследованного от родительской оболочки (которая является bash). Обратите внимание, что у меня есть следующая строка в моем .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 PC на работе под управлением tmux 1.8 и мой домашний Ubuntu PC под управлением 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 ответ1

3

У меня, вероятно, есть ответ на ваши вопросы перед обновлением.

Как указано здесь:

обратите внимание, что tmux использует /bin /sh -c для выполнения указанной нами команды оболочки. Таким образом, команда должна быть POSIX-совместимой, поэтому тесты вида [[не гарантированно переносимы. Современные системы Ubuntu и Debian, например, symlink /bin /sh to dash.

Это было в моем случае. Все работает после того, как я заменил "ваш" метод следующим:if-shell "echo $TERM | grep 256color" 'set -g default-terminal screen-256color'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .