如何在 tmux 的状态栏中显示简单的正常运行时间?

bou*_*cas 8 tmux

我想以格式在 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'
Run Code Online (Sandbox Code Playgroud)

两者都不如我所愿。我只想要一个正常的正常运行时间DD:HH:MM,每 30 秒更新一次,使用正常的状态栏更新。

slm*_*slm 9

在这里,您可以使用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'
Run Code Online (Sandbox Code Playgroud)

通常uptime返回这种类型的输出:

$ uptime
 15:30:24 up  1:59,  4 users,  load average: 2.39, 2.08, 2.12
Run Code Online (Sandbox Code Playgroud)

通过使用awk我们可以摆脱正常运行时间周围的一切。

$ uptime | awk '{print $3}'|sed 's/,//'
2:47
Run Code Online (Sandbox Code Playgroud)

您还可以使用/proc/uptime获取系统已启动的实际秒数,然后使用awkperl将秒数转换为天、小时、分钟等。

$ 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
Run Code Online (Sandbox Code Playgroud)

这显示了 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
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

但是,将命令放在 shell 脚本中并从tmux配置文件中调用它可能更容易:

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

参考

  • @user205787 `tmux` 是出了名的对状态栏中引号的无情:你可以看到 [转义它们的常见问题](http://sourceforge.net/p/tmux/tmux-code/ci/master/tree/FAQ)或者只是从外部文件调用`awk`脚本...... (3认同)