在Tmux状态栏Shell命令中使用环境变量


10

我正在尝试创建一个tmux状态栏,其中显示了三个时区: 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而不是我的预期)。有什么建议?

Answers:


16

Tmux使用strftimein status-leftstatus-rightbefore 扩展时间格式#(…)以及其他急剧的转义序列。因此,%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不熟悉,但我想问题是它的#()工作方式与$()在shell中不同。

可以通过强制使用Shell来解决此问题:

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

不幸的是,这不起作用(在tmux 1.6中,Gentoo)。它仍在打印UTC日期。
神剑

@Excalibur很奇怪。尝试创建一个包装TZ=Europe/Belgrade date +%H:%M#(/path/to/wrapperscript)
脚本

是的,我确实想到了这种解决方案。尽管由于使用Chef动态设置了此tmux.conf,所以我很犹豫添加任何外部依赖项。也许我应该向tmux提出问题。不过谢谢!
神剑2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.