在 i3status 中格式化“read_file uptime”的输出

在 i3status 中格式化“read_file uptime”的输出

我正在尝试使用 i3status 显示我的系统正常运行时间。这是我的i3status.conf文件中的内容:

read_file uptime {
    format = "%title: %content"
    path = "/proc/uptime"
}

然而,输出以秒为单位,如截图所示,这显然不理想:

在此输入图像描述

有没有办法可以格式化它,例如以以下格式显示:

DD:HH:MM:SS

答案1

我的解决方案

1. 创建一个非常非常短的脚本

只需创建一个新文件并重命名即可uptime.sh;然后复制这个:

!#/bin/sh

echo "$(uptime -p)" > ~/.config/i3/uptime

这会将命令的输出附加或写入uptime -p到我选择的文件中~/.config/i3/uptime。该命令uptime -p显示正常运行时间漂亮的格式。

uptime -p 的终端输出

如果操作正确,您的内容~/.config/i3/uptime应该是up x hours, x minutes.

您可以尝试的另一个命令是,uptime -s它将显示日期和时间自从你的系统启动以来。

> ![f7c2568a315bba3c2ddccb96c7f9f4ee.png](:/a701cf4ddede44e991b3b70a8aef4d2c)

2. 创建一个cron作业

crontab -e只需在终端中执行然后附加此行:

* * * * * /home/user/path/to/uptime.sh

这将每分钟执行一次脚本,因此每分钟都会刷新或覆盖正常运行时间的内容。这样我们就可以获得最新的正常运行时间。

如果您不希望脚本每分钟执行或刷新文件,您可以将 替换* * * * *@hourly 每小时刷新一次uptime文件。

3.最后,编辑你的i3status配置文件

像这样:

# uptime
read_file uptime {
    color_good = "#ffffff"
    format = "%content"
    path = "/home/user/.config/i3/uptime"
}

就是这样。重新启动 i3 并希望i3status uptime出现漂亮的

答案2

我用这个脚本让它变得更漂亮:

#!/bin/sh

uptime=$(uptime -p)
days=$(echo "$uptime" | grep -oP '\d+(?= day)')
hours=$(echo "$uptime" | grep -oP '\d+(?= hour)')
minutes=$(echo "$uptime" | grep -oP '\d+(?= minute)')

formatted_uptime=""
if [ -n "$days" ]; then
  formatted_uptime="${days}d "
fi
formatted_uptime="${formatted_uptime}${hours}h ${minutes}m"

echo "$formatted_uptime" > ~/.config/i3/scripts/uptimedm

相关内容