Ich versuche, meine TERM
Umgebungsvariable für tmux-Sitzungen in meinem basierend auf dem von der übergeordneten Shell (das ist Bash) geerbten .tmux.conf
Wert festzulegen. Beachten Sie, dass ich die folgende Zeile in meinem habe , sodass diese tatsächlich geerbt wird:TERM
.tmux.conf
TERM
set -g update-environment '...some variables... TERM'
Im Grunde genommen TERM
befindet es sich xterm-256color
in der übergeordneten Shell. Ich erkenne das und lege die default-terminal
Option wie folgt fest:
if "[[ ${TERM} =~ 256color ]]" 'set -g default-terminal screen-256color'
Diese Zeile funktioniert in tmux 1.9a auf meinem Arbeits-PC (RHEL 6.6) und setzt ordnungsgemäß TERM
auf screen-256color
, aber auf anderen PCs (einschließlich eines Ubuntu-PCs bei der Arbeit mit tmux 1.8 und meines Ubuntu-PCs zuhause mit tmux 2.1) scheint der Befehl „condition“ immer „false“ zurückzugeben und TERM
befindet sich daher noch screen
innerhalb der neuen tmux-Sitzung.
Ich habe auch versucht if 'true' 'set -g default-terminal screen-256color'
, und das hat auch nicht funktioniert! ( TERM
befindet sich immer noch screen
in der neuen Tmux-Sitzung).
Kann mir jemand helfen, herauszufinden, was ich falsch mache? Und vielleicht Informationen dazu geben, warum es auf einer Maschine funktioniert, auf den anderen beiden aber nicht?
AKTUALISIEREN:
Nachdem ich es tmux
mit aktivierter extremer Ausführlichkeit ( tmux -vvvvvvvvvv
) ausgeführt habe, glaube ich, das Problem zu sehen.
tmux
Wenn ich mir die Serverprotokolldatei (tmux-server-xxxx.log) anschaue , sehe ich die folgenden Protokollzeilen in dieser Reihenfolge (mit anderen Zeilen dazwischen, die ich weggelassen habe):
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
Es scheint also, als würde die neue Sitzung erstelltVorder Shell-Befehl wird beendet, und die Sitzungsoption wird erst später gesetzt...aber esIsteingestellt wird.
Um dies zu bestätigen, trenne ich diese Sitzung, bearbeite sie, um die Zeile, die /sets .tmux.conf
prüft, auszukommentieren und erstelle dann eine neue Sitzung, die über verfügt .$TERM
default-terminal
TERM = screen-256color
Auf dem RHEL-Computer, auf dem der Befehl wie erwartet funktioniert, werden diese Protokollzeilen in einer anderen Reihenfolge angezeigt:
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
...was wie erwartet ist. Und TERM
entsprechend auf eingestellt ist screen-256color
.
Ich gebe die -b
Option für den if-shell
Befehl nicht an, daher bin ich mir nicht sicher, warum mein Befehl auf diesen beiden Ubuntu-Rechnern im Hintergrund ausgeführt zu werden scheint. Ich frage mich, ob dies ein möglicher Race Condition in tmux ist?
Antwort1
Ich habe wahrscheinlich eine Antwort auf Ihre Fragen vor dem Update.
Wie angegebenHier:
Beachten Sie, dass tmux /bin/sh -c verwendet, um den von uns angegebenen Shell-Befehl auszuführen. Der Befehl muss daher POSIX-kompatibel sein, sodass die Portabilität von Tests der Form [[ nicht garantiert ist. Moderne Ubuntu- und Debian-Systeme erstellen beispielsweise einen symbolischen Link von /bin/sh zu dash.
Das war in meinem Fall der Fall. Alles funktioniert, nachdem ich „Ihre“ Methode durch Folgendes ersetzt habe:
if-shell "echo $TERM | grep 256color" 'set -g default-terminal screen-256color'