Условие if-shell Tmux всегда ложно

Условие if-shell Tmux всегда ложно

Я пытаюсь установить TERMпеременную окружения для сессий tmux в my .tmux.confна основе значения TERMinhered от родительской оболочки (которой является 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'

Связанный контент