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

9

Eu estou tentando criar uma barra de status do tmux que mostra três fusos horários: %código%. Usar a variável de ambiente US Eastern Time :: UTC :: Central European Time faz com que o comando TZ mostre a hora em um determinado fuso horário.

Eu estava tentando fazer isso com essa configuração do tmux.conf:

date

No entanto, passar 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)" não funciona dentro de TZ=foo . (Eu recebo o servidor #(…) em vez do que eu esperava). Alguma sugestão?

    
por Excalibur 18.02.2014 / 20:48

2 respostas

15

O Tmux expande os formatos de hora com strftime em status-left e status-right antes de expandir #(…) e outras sequências de escape cortantes. Portanto, %H:%M é expandido para a hora local primeiro e date é executado com um argumento que já é numérico.

Duplique 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)"
    
por 19.02.2014 / 00:59
1

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

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

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