Sử dụng các biến môi trường trong các lệnh shell thanh trạng thái Tmux


10

Tôi đang cố gắng tạo một thanh trạng thái tmux hiển thị ba múi giờ : US Eastern Time :: UTC :: Central European Time. Sử dụng TZbiến môi trường làm cho datelệnh hiển thị thời gian trong một múi giờ nhất định.

Tôi đã cố gắng làm như vậy với cài đặt tmux.conf này:

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)"

Tuy nhiên, vượt qua TZ=fookhông hoạt động bên trong #(…). (Tôi nhận được máy chủ datethay vì những gì tôi mong đợi). Bất kỳ đề xuất?

Câu trả lời:


16

Tmux mở rộng các định dạng thời gian với strftimetrong status-leftstatus-righttrước khi nó mở rộng #(…)và các chuỗi thoát sắc nét khác. Vì vậy, %H:%Mđược mở rộng sang giờ địa phương trước và datechạy với một đối số đã là số.

Nhân đôi số phần trăm.

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

Tôi không quen thuộc với tmux nhưng tôi đoán vấn đề là #()nó không hoạt động giống như $()trong vỏ.

Vấn đề có thể được giải quyết bằng cách buộc sử dụng shell:

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

Thật không may, điều này không hoạt động (trong tmux 1.6, Gentoo). Nó vẫn đang in ngày UTC.
Excalibur

@Excalibur Khá lạ. Hãy thử tạo một bản TZ=Europe/Belgrade date +%H:%M#(/path/to/wrapperscript)
tóm tắt

Vâng, giải pháp đó đã xảy ra với tôi. Mặc dù vì tmux.conf này được đặt động bằng cách sử dụng Chef, tôi không ngần ngại thêm bất kỳ phụ thuộc bên ngoài nào. Có lẽ tôi nên nộp một vấn đề với tmux. Cảm ơn mặc dù!
Excalibur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.