La condición Tmux if-shell siempre es falsa

La condición Tmux if-shell siempre es falsa

Estoy intentando configurar mi TERMvariable de entorno para sesiones tmux en mi .tmux.confbase en el valor TERMheredado del shell principal (que es bash). Tenga en cuenta que tengo la siguiente línea en mi .tmux.confmodo que TERMen realidad se hereda:

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

Básicamente, TERMestá xterm-256coloren el shell principal, lo detecto y configuro la default-terminalopción usando lo siguiente:

if "[[ ${TERM} =~ 256color ]]" 'set -g default-terminal screen-256color'

Esa línea funciona en tmux 1.9a en mi PC de trabajo (RHEL 6.6) y se configura correctamente TERMen screen-256color, pero en otras PC (incluida una PC con Ubuntu en el trabajo que ejecuta tmux 1.8 y mi PC con Ubuntu en casa que ejecuta tmux 2.1), el comando 'condición' siempre parece devolver falso y, por lo tanto, TERMtodavía está screendentro de la nueva sesión de tmux.

¡También intenté hacer if 'true' 'set -g default-terminal screen-256color'y tampoco funcionó! ( TERMtodavía está screendentro de la nueva sesión tmux).

¿Alguien podría ayudarme a descubrir qué estoy haciendo mal? ¿Y tal vez ofrecer alguna información sobre por qué funciona en una máquina pero no en las otras dos?


ACTUALIZAR:

Después de ejecutar tmuxcon la verbosidad extrema activada ( tmux -vvvvvvvvvv), creo que veo el problema.

Al mirar el tmuxarchivo de registro del servidor (tmux-server-xxxx.log), veo las siguientes líneas de registro, en este orden (con otras líneas entre ellas, que omití):

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

Entonces parece que se está creando la nueva sesión.antesel comando de shell sale, por lo que la opción de sesión no se configura hasta más tarde... peroessiendo fijado.

Para confirmar esto, si separo esta sesión, edito .tmux.confpara comentar la línea que marca $TERM/sets default-terminaly luego creo una nueva sesión, esa nueva sesión tiene TERM = screen-256color.

En la computadora RHEL donde el comando funciona como se esperaba, estas líneas de registro aparecen en un orden 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

...lo cual es lo esperado. Y TERMestá configurado apropiadamente en screen-256color.

No estoy especificando la -bopción para el if-shellcomando, por lo que no estoy seguro de por qué mi comando parece ejecutarse en segundo plano en estas dos máquinas Ubuntu. Me pregunto si esta es una posible condición de carrera en tmux.

Respuesta1

Probablemente tenga una respuesta a sus preguntas previas a la actualización.

Como se dijoaquí:

tenga en cuenta que tmux usa /bin/sh -c para ejecutar el comando de shell que especificamos. Por lo tanto, el comando debe ser compatible con POSIX, por lo que no se garantiza que las pruebas del formato [[ sean portátiles. Sistemas Ubuntu y Debian modernos, por ejemplo, enlace simbólico /bin/sh al guión.

Esa fue la cuestión en mi caso. Todo funciona después de que reemplacé "tu" método con lo siguiente: if-shell "echo $TERM | grep 256color" 'set -g default-terminal screen-256color'

información relacionada