我想以 格式 在 tmux 状态栏中显示正常运行时间DD:HH:MM
,而不显示该命令显示的任何其他内容uptime
。
我已经尝试过这些:
#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'
两者都没有达到我想要的效果。我想要的只是正常运行时间DD:HH:MM
,每 30 秒更新一次,并正常更新状态栏。
答案1
在这里,您可以使用awk
解析 的输出uptime
来满足您的需求,如下所示:
set -g status-right '#[fg=red,bg=default]#(uptime | awk '{print $3}'|sed 's/,//') #[fg=blue]%a%d-%m-%Y %H:%M:%S'
通常uptime
返回这种类型的输出:
$ uptime
15:30:24 up 1:59, 4 users, load average: 2.39, 2.08, 2.12
通过使用awk
我们可以摆脱正常运行时间周围的一切。
$ uptime | awk '{print $3}'|sed 's/,//'
2:47
您还可以用来/proc/uptime
获取系统已启动的实际秒数,然后使用awk
或perl
将秒数转换为天、小时、分钟等。
$ 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
这显示正常运行时间的秒数(DD:HH:MM:SS)。
您还可以使用 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 引用?
正如 @JasonwRyan 在评论中提到的,tmux
众所周知,正确引用命令是非常困难的。您可以通过以下方式引用awk
我上面提供的示例。
set -g status-right '#[fg=red,bg=default]#(uptime | awk \"{print \\$3}\"|sed \"s/,//\") #[fg=blue]%a%d-%m-%Y %H:%M:%S'
然而,将命令放入 shell 脚本中并从tmux
配置文件中调用它可能更容易:
set -g status-right '#[fg=red,bg=default]#(somecommand.bash) #[fg=blue]%a%d-%m-%Y %H:%M:%S'
参考
答案2
另一种方法是使用uptime -p
:
#(uptime -p)
示例输出:
up 4 hours, 17 minutes
我知道这不完全是你想要的,但很接近