Làm cách nào để hiển thị thời gian hoạt động đơn giản trên thanh trạng thái của tmux?


7

Tôi muốn hiển thị thời gian hoạt động trong thanh trạng thái tmux ở định dạng DD:HH:MM, mà không có bất kỳ hành trình nào khác mà uptimelệnh hiển thị.

Tôi đã thử những điều này:

#set -g status-left '#[fg=green]#H #[fg=black]•#[fg=green,bright]#(uptime|awk '{split(substr($0, index($0, "load")),a, ":"); print a[2]})'#[default]'
set -g status-right '#[fg=red,bg=default]#(uptime) #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Không làm việc như tôi muốn. Tôi muốn chỉ là thời gian hoạt động liên tục DD:HH:MM, được cập nhật cứ sau 30 giây với cập nhật thanh trạng thái bình thường.

Câu trả lời:


8

Tại đây bạn có thể sử dụng awkđể phân tích đầu ra uptimecho phù hợp với nhu cầu của bạn như thế này:

set -g status-right '#[fg=red,bg=default]#(uptime | awk '{print $3}'|sed 's/,//') #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Thông thường uptimetrả về loại đầu ra này:

$ uptime
 15:30:24 up  1:59,  4 users,  load average: 2.39, 2.08, 2.12

Bằng cách sử dụng awkchúng ta có thể thoát khỏi mọi thứ xung quanh thời gian hoạt động.

$ uptime | awk '{print $3}'|sed 's/,//'
2:47

Bạn cũng có thể sử dụng /proc/uptimeđể lấy số giây thực tế mà hệ thống đã hoạt động và sau đó sử dụng awkhoặc perlđể chuyển đổi giây thành ngày, giờ, phút, v.v.

$ awk '{printf("%d:%02d:%02d:%02d",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime
0:02:49:55

Điều này cho thấy số giây thời gian hoạt động trong DD: HH: MM: SS.

Bạn cũng có thể hiển thị chúng bằng Perl:

$ cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/36003600)/60),$1%60' 
00:02:50:53

tmux trích dẫn?

Như @JasonwRyan đã đề cập trong các bình luận, tmuxcó thể rất khó để trích dẫn các lệnh vừa phải. Đây là cách bạn có thể trích dẫn awkví dụ mà tôi đã cung cấp ở trên.

set -g status-right '#[fg=red,bg=default]#(uptime | awk \"{print \\$3}\"|sed \"s/,//\") #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Tuy nhiên, có thể dễ dàng hơn khi đặt các lệnh trong tập lệnh shell và gọi lệnh đó từ trong tmuxtệp cấu hình:

set -g status-right '#[fg=red,bg=default]#(somecommand.bash) #[fg=blue]%a%d-%m-%Y %H:%M:%S'

Người giới thiệu


Bạn đang cắt thời gian hiện tại :) Điều này sẽ làm điều đó : uptime| cut -d" " -f4-|cut -d, -f1. Không phải lúc nào cũng là DD: HH: MM, ít nhất là trên hệ thống của tôi.
Paulo Almeida

Khi thời gian hoạt động là hơn một ngày, các awktrường sẽ thay đổi ...
jasonwryan

@PauloAlmeida - cảm ơn đã phản hồi. Tôi hoàn toàn bỏ lỡ điều đó 8-).
slm

@PauloAlmeida - Tôi đã sửa đổi cách tiếp cận của mình để nó liên quan đến việc uptimesử dụng awksed. Cách tiếp cận của bạn cũng sẽ làm việc. /proc/uptimeThay vào đó, tôi cũng đã điều chỉnh câu trả lời của mình để đưa vào giải pháp sử dụng .
slm

3
@ user205787 tmuxnổi tiếng là không tha thứ cho dấu ngoặc kép trên thanh trạng thái: bạn có thể xem Câu hỏi thường gặp về việc thoát chúng hoặc chỉ cần gọi awktập lệnh từ một tệp bên ngoài ...
jasonwryan

2

Một cách khác là sử dụng uptime -p:

#(uptime -p)

Đầu ra mẫu:

up 4 hours, 17 minutes

Tôi biết đó không phải là chính xác những gì bạn muốn nhưng gần

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.