Condição if-shell do Tmux sempre falsa

Condição if-shell do Tmux sempre falsa

Estou tentando definir minha TERMvariável de ambiente para sessões tmux com .tmux.confbase no valor TERMherdado do shell pai (que é bash). Observe que tenho a seguinte linha no meu .tmux.confpara que TERMseja herdada:

set -g update-environment '...some variables... TERM'

Basicamente, TERMestá xterm-256colorno shell pai, e eu detecto isso e defino a default-terminalopção 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 configurada corretamente TERMcomo screen-256color, mas em outros PCs (incluindo um PC Ubuntu no trabalho executando o tmux 1.8 e meu PC Ubuntu doméstico executando o tmux 2.1), o comando 'condição' sempre parece estar retornando falso e TERMainda está screendentro da nova sessão do tmux.

Eu também tentei fazer if 'true' 'set -g default-terminal screen-256color', e também não funcionou! ( TERMainda está screendentro 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?


ATUALIZAR:

Depois de executar tmuxcom verbosidade extrema ativada ( tmux -vvvvvvvvvv), acho que entendi o problema.

Olhando para o tmuxarquivo de log do servidor (tmux-server-xxxx.log), vejo as seguintes linhas de log, nesta ordem (com outras linhas entre elas, que 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

Parece que a nova sessão está sendo criadaanteso comando shell sai e, portanto, a opção de sessão não será definida até mais tarde... masésendo definido.

Para confirmar isso, se eu desanexar esta sessão, edite .tmux.confpara comentar a linha que verifica $TERM/sets default-terminale crie uma nova sessão, essa nova sessão possui TERM = screen-256color.

No computador RHEL onde o comando está funcionando conforme o esperado, essas linhas de log aparecem 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

...que é o esperado. E TERMestá definido apropriadamente para screen-256color.

Não estou especificando a -bopção do if-shellcomando, então não sei por que meu comando parece estar sendo executado em segundo plano nessas duas máquinas Ubuntu. Gostaria de saber se esta é uma possível condição de corrida no tmux?

Responder1

Provavelmente tenho uma resposta para suas perguntas pré-atualização.

Como declaradoaqui:

observe que o tmux usa /bin/sh -c para executar o comando shell que especificamos. Portanto, o comando deve ser compatível com POSIX, portanto, os testes no formato [[ não têm garantia de serem portáveis. Sistemas modernos Ubuntu e Debian, por exemplo, link simbólico /bin/sh para dash.

Essa foi a coisa no meu caso. Tudo funciona depois que substituí o método "seu" pelo seguinte: if-shell "echo $TERM | grep 256color" 'set -g default-terminal screen-256color'

informação relacionada