การใช้ตัวแปรสภาวะแวดล้อมในคำสั่งเชลล์แถบสถานะของ Tmux


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แทนสิ่งที่ฉันคาดไว้) ข้อเสนอแนะใด ๆ

คำตอบ:


16

Tmux ขยายรูปแบบเวลาด้วยstrftimeในstatus-leftและstatus-rightก่อนที่จะขยาย#(…)และลำดับการหลบหนีที่คมชัดอื่น ๆ ดังนั้น%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 แต่ฉันเดาว่าปัญหาคือ#()มันไม่ทำงานเหมือน$()ในเชลล์

ปัญหาอาจแก้ไขได้ด้วยการบังคับให้ใช้เชลล์:

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

น่าเสียดายที่นี่ใช้งานไม่ได้ (ใน tmux 1.6, Gentoo) มันยังคงพิมพ์วันที่ UTC
Excalibur

@ Excalibur ค่อนข้างแปลก ลองสร้าง wrapperscript (พร้อมTZ=Europe/Belgrade date +%H:%M) และ#(/path/to/wrapperscript)
Hauke ​​Laging

ใช่ทางออกนั้นเกิดขึ้นกับฉัน แม้ว่า tmux.conf นี้จะถูกตั้งค่าแบบไดนามิกโดยใช้ Chef ฉันลังเลที่จะเพิ่มการอ้างอิงภายนอกใด ๆ บางทีฉันควรยื่นปัญหากับ tmux ขอบคุณนะ!
Excalibur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.