Использование переменных окружения в командах оболочки строки состояния Tmux


10

Я пытаюсь создать tmux статус бар , который показывает три TimeZones: US Eastern Time :: UTC :: Central European Time. Использование TZпеременной окружения заставляет dateкоманду показывать время в заданном часовом поясе.

Я пытался сделать это с помощью этого параметра 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)"

Однако прохождение TZ=fooне работает внутри #(…). (Я получаю сервер dateвместо того, что я ожидал). Какие-либо предложения?

Ответы:


16

Tmux расширяет форматы времени с strftimeв status-leftи status-rightпрежде , чем она расширяется #(…)и другие острые управляющие последовательности. Так %H:%Mчто сначала расширяется до местного времени и dateработает с аргументом, который уже числовой.

Удвойте знаки процента.

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

1

Я не знаком с tmux, но думаю, проблема в том, что он #()работает не так, как $()в оболочке.

Проблема может быть решена путем принудительного использования оболочки:

#(bash -c 'TZ=Europe/Belgrade date +%H:%M')

К сожалению, это не работает (в tmux 1.6, Gentoo). Это все еще печатает дату UTC.
Экскалибур

@Excalibur Довольно странно. Попробуйте создать оболочку (с TZ=Europe/Belgrade date +%H:%M) и#(/path/to/wrapperscript)
Hauke ​​Laging

Да, это решение пришло мне в голову. Хотя этот tmux.conf динамически устанавливается с помощью Chef, я не решаюсь добавлять любые внешние зависимости. Возможно я должен подать проблему с tmux. Спасибо хоть!
Экскалибур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.