Використання змінних середовища в командах оболонки рядка стану 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)
сценарій

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