Verwenden von Umgebungsvariablen in Shell-Befehlen der Tmux-Statusleiste

10

Ich versuche, eine tmux-Statusleiste zu erstellen, die drei Zeitzonen anzeigt : US Eastern Time :: UTC :: Central European Time. Bei Verwendung der TZUmgebungsvariablen zeigt der dateBefehl die Zeit in einer bestimmten Zeitzone an.

Ich habe versucht, dies mit dieser Einstellung für tmux.conf zu tun:

set -g status-right "#[fg=white]#S #I:#P #[fg=yellow]:: %d %b %Y #[fg=green]:: #(TZ=America/New_York date +%H:%M) :: #(date -u +%H:%M) UTC :: #(TZ=Europe/Belgrade date +%H:%M)"

Das Übergeben TZ=foofunktioniert jedoch nicht innerhalb von #(…). (Ich bekomme den Server dateanstelle von dem, was ich erwartet hatte). Irgendwelche Vorschläge?

Excalibur
quelle

Antworten:

16

Tmux erweitert Zeitformate mit strftimein status-leftund status-rightbevor es erweitert wird #(…)und andere scharfe Escape-Sequenzen. Wird %H:%Malso zuerst auf die Ortszeit erweitert und dateläuft mit einem Argument, das bereits numerisch ist.

Verdoppeln Sie die Prozentzeichen.

set -g status-right "#[fg=white]#S #I:#P #[fg=yellow]:: %d %b %Y #[fg=green]:: #(TZ=America/New_York date +%%H:%%M) :: #(TZ=UTC date -u +%%H:%%M) UTC :: #(TZ=Europe/Belgrade date +%%H:%%M)"
Gilles 'SO - hör auf böse zu sein'
quelle
1

Ich bin nicht mit tmux vertraut, aber ich denke, das Problem ist, dass #()es nicht so funktioniert wie $()in der Shell.

Das Problem kann gelöst werden, indem die Verwendung einer Shell erzwungen wird:

#(bash -c 'TZ=Europe/Belgrade date +%H:%M')
Hauke ​​Laging
quelle
Leider funktioniert das nicht (in tmux 1.6, Gentoo). Es wird immer noch das UTC-Datum gedruckt.
Excalibur
@Excalibur Ziemlich seltsam. Versuchen Sie, ein Wrapperscript (mit TZ=Europe/Belgrade date +%H:%M) und#(/path/to/wrapperscript)
Hauke ​​Laging
Ja, diese Lösung ist mir eingefallen. Obwohl diese tmux.conf dynamisch mit Chef festgelegt wird, zögere ich, externe Abhängigkeiten hinzuzufügen. Vielleicht sollte ich ein Problem mit tmux einreichen. Trotzdem danke!
Excalibur