Tmux se-shell condição sempre falsa

1

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?

    
por villapx 30.01.2017 / 20:28

1 resposta

3

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

Conforme declarado aqui :

note that tmux uses /bin/sh -c to execute the shell command we specify. Thus, the command must be POSIX compliant, so tests of the form [[ are not guaranteed to be portable. Modern Ubuntu and Debian systems, for example, symlink /bin/sh to dash.

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

    
por 22.06.2017 / 00:52

Tags