Używanie zmiennych środowiskowych w poleceniach powłoki paska stanu Tmux

10

I 'm próbuje utworzyć tmux pasek stanu, który pokazuje trzy strefy czasowe: US Eastern Time :: UTC :: Central European Time. Użycie TZzmiennej środowiskowej powoduje, że datepolecenie pokazuje czas w danej strefie czasowej.

Próbowałem to zrobić z tym ustawieniem tmux.conf:

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)"

Jednak przekazywanie TZ=foonie działa wewnątrz #(…). (Dostaję serwer datezamiast tego, czego się spodziewałem). Jakieś sugestie?

Excalibur
źródło

Odpowiedzi:

16

Tmux rozszerza formaty czasowe z strftimew status-lefti status-rightzanim się rozszerza #(…)i inne ostre sekwencje. Tak więc %H:%Mnajpierw rozszerza się na czas lokalny i datedziała z argumentem, który jest już liczbowy.

Podwój znaki procentu.

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- przestań być zły”
źródło
1

Nie znam tmux, ale myślę, że problem polega na tym, #()że nie działa tak samo jak $()w powłoce.

Problem można rozwiązać, wymuszając użycie powłoki:

#(bash -c 'TZ=Europe/Belgrade date +%H:%M')
Hauke ​​Laging
źródło
Niestety to nie działa (w tmux 1.6, Gentoo). Nadal drukuje datę UTC.
Excalibur,
@Excalibur Całkiem dziwne. Spróbuj utworzyć TZ=Europe/Belgrade date +%H:%M#(/path/to/wrapperscript)
skrypt
Tak, to rozwiązanie przyszło mi do głowy. Chociaż ponieważ ten tmux.conf jest ustawiany dynamicznie za pomocą Chef, waham się przed dodaniem jakichkolwiek zewnętrznych zależności. Być może powinienem zgłosić problem z tmux. W każdym razie dzięki!
Excalibur