Estoy intentando configurar mi TERM
variable de entorno para sesiones tmux en mi .tmux.conf
base en el valor TERM
heredado del shell principal (que es bash). Tenga en cuenta que tengo la siguiente línea en mi .tmux.conf
modo que TERM
en realidad se hereda:
set -g update-environment '...some variables... TERM'
Básicamente, TERM
está xterm-256color
en el shell principal, lo detecto y configuro la default-terminal
opció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 TERM
en 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, TERM
todavía está screen
dentro de la nueva sesión de tmux.
¡También intenté hacer if 'true' 'set -g default-terminal screen-256color'
y tampoco funcionó! ( TERM
todavía está screen
dentro 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 tmux
con la verbosidad extrema activada ( tmux -vvvvvvvvvv
), creo que veo el problema.
Al mirar el tmux
archivo 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.conf
para comentar la línea que marca $TERM
/sets default-terminal
y 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 TERM
está configurado apropiadamente en screen-256color
.
No estoy especificando la -b
opción para el if-shell
comando, 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'