Usando variáveis ​​de ambiente nos comandos do shell da barra de status do Tmux

10

Eu estou tentando criar um tmux barra de status, que mostra três fusos horários: US Eastern Time :: UTC :: Central European Time. O uso da TZvariável de ambiente faz com que o datecomando mostre a hora em um determinado fuso horário.

Eu estava tentando fazer isso com esta configuração 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)"

No entanto, a passagem TZ=foonão funciona dentro de #(…). (Eu recebo o servidor em datevez do que eu esperava). Alguma sugestão?

Excalibur
fonte

Respostas:

16

Tmux expande formatos de tempo com strftimeem status-lefte status-rightantes de ele se expande #(…)e outras sequências de escape afiadas. Portanto, ele %H:%Mé expandido primeiro para a hora local e dateé executado com um argumento que já é numérico.

Dobrar os sinais de porcentagem.

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- parar de ser mau'
fonte
1

Não estou familiarizado com o tmux, mas acho que o problema é que #()não funciona da mesma maneira que $()no shell.

O problema pode ser resolvido forçando o uso de um shell:

#(bash -c 'TZ=Europe/Belgrade date +%H:%M')
Hauke ​​Laging
fonte
Infelizmente isso não funciona (no tmux 1.6, Gentoo). Ainda está imprimindo a data UTC.
Excalibur
@Excalibur Muito estranho. Tente criar um wrapperscript (com TZ=Europe/Belgrade date +%H:%M) e#(/path/to/wrapperscript)
Hauke ​​Laging
Sim, essa solução me ocorreu. Embora como este tmux.conf seja configurado dinamicamente usando o Chef, hesito em adicionar quaisquer dependências externas. Talvez eu deva registrar um problema no tmux. Obrigado embora!
Excalibur