Estou tentando definir minha variável de ambiente TERM
para sessões tmux no meu .tmux.conf
com base no valor de TERM
herdado do shell pai (que é bash). Observe que tenho a seguinte linha no meu .tmux.conf
, de modo que TERM
seja herdado:
set -g update-environment '...some variables... TERM'
Basicamente, TERM
é xterm-256color
no shell pai, e detecto isso e defino a opção default-terminal
usando o seguinte:
if "[[ ${TERM} =~ 256color ]]" 'set -g default-terminal screen-256color'
Essa linha funciona no tmux 1.9a no meu PC de trabalho (RHEL 6.6) e define corretamente TERM
para screen-256color
, mas em outros PCs (incluindo um Ubuntu PC no trabalho executando o tmux 1.8 e meu home Ubuntu PC rodando tmux 2.1), o comando 'condition' sempre parece estar retornando false, então TERM
ainda é screen
dentro da nova sessão do tmux.
Eu também tentei fazer if 'true' 'set -g default-terminal screen-256color'
, e isso também não funcionou! ( TERM
ainda é screen
dentro da nova sessão do tmux).
Alguém poderia me ajudar a descobrir o que estou fazendo de errado? E talvez oferecer algumas informações sobre por que funciona em uma máquina, mas não nas outras duas?
ATUALIZAÇÃO:
Depois de executar tmux
com extrema verbosidade ativada ( tmux -vvvvvvvvvv
), acho que vejo o problema.
Olhando para o arquivo de log tmux
server (tmux-server-xxxx.log), vejo as seguintes linhas de log, nesta ordem (com outras linhas entre elas, que eu omiti):
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
Portanto, parece que a nova sessão está sendo criada antes do comando shell, e assim a opção de sessão não está sendo definida até mais tarde ... mas é sendo definido.
Para confirmar isso, se eu desanexar esta sessão, edite .tmux.conf
para comentar a linha que verifica $TERM
/ conjuntos default-terminal
, crie uma nova sessão, essa nova sessão tem TERM = screen-256color
.
Ao longo do computador do RHEL, onde o comando está funcionando como esperado, essas linhas de log estão aparecendo em uma ordem diferente:
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
... o que é esperado. E TERM
está definido adequadamente para screen-256color
.
Eu não estou especificando a opção -b
para o comando if-shell
, então não tenho certeza porque meu comando parece estar sendo executado em segundo plano nesses dois maces do Ubuntu. Gostaria de saber se esta é uma possível condição de corrida no tmux?