Menggunakan variabel lingkungan dalam perintah shell status bar Tmux

10

Saya mencoba untuk membuat tmux bar status yang menunjukkan tiga zona waktu: US Eastern Time :: UTC :: Central European Time. Menggunakan TZvariabel lingkungan membuat dateperintah menunjukkan waktu dalam zona waktu tertentu.

Saya mencoba melakukannya dengan pengaturan tmux.conf ini:

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

Namun, passing TZ=footidak bekerja di dalam #(…). (Saya mendapatkan server datebukan apa yang saya harapkan). Ada saran?

Excalibur
sumber

Jawaban:

16

Tmux memperluas format waktu dengan strftimedi status-leftdan status-rightsebelum mengembang #(…)dan urutan pelarian tajam lainnya. Jadi %H:%Mdiperluas ke waktu lokal terlebih dahulu, dan dateberjalan dengan argumen yang sudah numerik.

Gandakan tanda persen.

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 'SANGAT berhenti menjadi jahat'
sumber
1

Saya tidak terbiasa dengan tmux tapi saya kira masalahnya adalah #()tidak bekerja dengan cara yang sama seperti $()di shell.

Masalahnya dapat diselesaikan dengan memaksa penggunaan shell:

#(bash -c 'TZ=Europe/Belgrade date +%H:%M')
Hauke ​​Laging
sumber
Sayangnya ini tidak berfungsi (pada tmux 1.6, Gentoo). Masih mencetak tanggal UTC.
Excalibur
@ Excalibur Cukup aneh. Coba buat wrapperscript (with TZ=Europe/Belgrade date +%H:%M) dan#(/path/to/wrapperscript)
Hauke ​​Laging
Ya, solusi itu terjadi pada saya. Meskipun karena tmux.conf ini diatur secara dinamis menggunakan Chef, saya ragu untuk menambahkan dependensi eksternal. Mungkin saya harus mengajukan masalah dengan tmux. Terimakasih Meskipun!
Excalibur