Utilisation de variables d'environnement dans les commandes shell de la barre d'état Tmux

10

Je cherche à créer un état tmux bar qui montre trois fuseaux horaires: US Eastern Time :: UTC :: Central European Time. L'utilisation de la TZvariable d'environnement permet à la datecommande d'afficher l'heure dans un fuseau horaire donné.

J'essayais de le faire avec ce paramètre 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)"

Cependant, le dépassement TZ=foone fonctionne pas à l'intérieur de #(…). (J'obtiens le serveur dateau lieu de ce que j'attendais). Aucune suggestion?

Excalibur
la source

Réponses:

16

Tmux étend les formats de temps avec strftimedans status-leftet status-rightavant qu'elle ne se développe #(…)et d' autres séquences d'échappement vives. So %H:%Mest d'abord étendu à l'heure locale et dates'exécute avec un argument déjà numérique.

Doublez les signes de pourcentage.

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- arrête d'être méchant'
la source
1

Je ne connais pas tmux mais je suppose que le problème est que #()cela ne fonctionne pas de la même manière que $()dans le shell.

Le problème peut être résolu en forçant l'utilisation d'un shell:

#(bash -c 'TZ=Europe/Belgrade date +%H:%M')
Hauke ​​Laging
la source
Malheureusement, cela ne fonctionne pas (dans tmux 1.6, Gentoo). Il imprime toujours la date UTC.
Excalibur
@Excalibur Assez étrange. Essayez de créer un wrapperscript (avec TZ=Europe/Belgrade date +%H:%M) et#(/path/to/wrapperscript)
Hauke ​​Laging
Oui, cette solution m'est venue à l'esprit. Bien que ce tmux.conf soit défini dynamiquement à l'aide de Chef, j'hésite à ajouter des dépendances externes. Je devrais peut-être déposer un problème avec tmux. Merci quand même!
Excalibur