我想以常用单位显示正常运行时间(因此,如果超过一小时,则不仅仅以分钟为单位;如果超过一分钟,也不仅仅以秒为单位;例如,“1:02:30”表示 1 小时、2 分钟和在我的 i3status 栏中,30 秒是我理想的时间格式。我什至无法找到如何在任何单位的 i3status 栏中显示正常运行时间。我发现这个仓库在 GitHub 上似乎声称可以做到这一点,但复制这些配置给了我与执行status_command
此行中的困难相关的错误仓库的配置。即该status_command
行是:
status_command ~/.i3/i3status.sh ~/.i3/i3status.conf
猜测它只适用于旧版本的 i3。有什么想法如何做到这一点?这里是我现在的~/.i3status.conf
文件。我的发行版是 Gentoo Linux。
答案1
我已经找到了解决方案。我只是不太理解它的语法。我只需要编辑我的~/.i3/i3status.sh
文件。就是现在:
#!/bin/sh
/usr/bin/i3status -c $HOME/.i3status.conf | while :
do
read line
RAM=`free -kh | grep Mem | awk '{print $3}'`
TOTR=$(cat /proc/meminfo | grep MemT | sed 's/.*\://g' | sed 's/ *//g' | sed 's/kB//g')
TOT=$(octave --eval "$TOTR/1024^2" | sed 's/ans = *//g' | sed 's/$/G/g' )
# Put uptime
uptime=`uptime | awk '{print $3 " " $4}' | sed 's/,.*//'`
hour=$(echo $uptime | sed 's/\:.*//g')
min=$(echo $uptime | sed 's/.*\://g')
UP="$hour h $min m"
# Compile C++ CPU prog and run it
g++ -o cpu.o $HOME/.i3/cpu.cpp
CPU=$(./cpu.o)
printf "%s\n" "Up: $UP | CPU: $CPU% | RAM: $RAM/$TOT | $line"
done
与正常运行时间最相关的行位于# Put uptime
和# Compile C++...
以及最终printf "%s\n"...
命令之间。我完整的i3配置文件可以在这个存储库。
答案2
我的解决方案:
在 cron.hourly 中创建脚本,每隔一小时创建一次格式化/tmp/uptime
(我不需要比一小时更高的精度)并在 i3status 中与 readfile 一起使用:
read_file uptime {
path = "/tmp/uptime"
}
脚本:
#!/bin/sh
awk '{printf("Up %dd:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime > /tmp/uptime