Tmux if-Shell-Bedingung immer falsch

Tmux if-Shell-Bedingung immer falsch

Ich versuche, meine TERMUmgebungsvariable für tmux-Sitzungen in meinem basierend auf dem von der übergeordneten Shell (das ist Bash) geerbten .tmux.confWert festzulegen. Beachten Sie, dass ich die folgende Zeile in meinem habe , sodass diese tatsächlich geerbt wird:TERM.tmux.confTERM

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

Im Grunde genommen TERMbefindet es sich xterm-256colorin der übergeordneten Shell. Ich erkenne das und lege die default-terminalOption 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äß TERMauf 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 TERMbefindet sich daher noch screeninnerhalb der neuen tmux-Sitzung.

Ich habe auch versucht if 'true' 'set -g default-terminal screen-256color', und das hat auch nicht funktioniert! ( TERMbefindet sich immer noch screenin 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 tmuxmit aktivierter extremer Ausführlichkeit ( tmux -vvvvvvvvvv) ausgeführt habe, glaube ich, das Problem zu sehen.

tmuxWenn 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.confprüft, auszukommentieren und erstelle dann eine neue Sitzung, die über verfügt .$TERMdefault-terminalTERM = 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 TERMentsprechend auf eingestellt ist screen-256color.

Ich gebe die -bOption für den if-shellBefehl 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'

verwandte Informationen