如何在 Bash 命令提示符中放入更新数据?

如何在 Bash 命令提示符中放入更新数据?

我试图做出一个显示当前电池百分比的提示,但是如果我有PS1按照.bashrc编写方式进行设置的代码,那么它只会在打开终端的新实例时初始化交互式 shell 时检查数据一次模拟器。.bashrc如果我想要更新数据,这需要我重新加载。我对类 Unix 操作系统还很陌生,所以我可能甚至很可能遗漏了一些微不足道的东西。也许我应该创建一个守护程序来更新提示?

这不是我的提示的完整代码,但它是与更改数据相关的位。

PS1="`upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "percentage:" | awk '$1 == "percentage:" {print $2}'`$ "

答案1

我不知道主动更新该值的好方法,但是只要 shell 有活动(例如,当您按 Enter 时),您就可以使用以下命令更新它PROMPT_COMMAND

update_ps1() {
    PS1="$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "percentage:" | awk '$1 == "percentage:" {print $2}')$ "
}
PROMPT_COMMAND=update_ps1

这样,我添加了一个名为 bash 的函数update_ps1,该函数在执行时将更新PS1变量。接下来,我将PROMPT_COMMAND变量设置为该函数的名称。根据man bash

PROMPT_COMMAND
    If set, the value is executed as a command prior to issuing each primary prompt.

这样,每次 bash 写入提示时,它都会执行 的值PROMPT_COMMAND,这会PS1在 bash 写入之前更新该值,因此它将在写入时具有最新值。

答案2

你不需要upower。所有 Shell 都支持循环,因此您可以执行以下操作:

#!/bin/sh

# Loop trough all batteries
for battery in /sys/class/power_supply/BAT?
do
    # Get capacity of battery
    capacity=$(cat "$battery"/capacity) || exit

    # Get status of battery
    status=$(cat "$battery"/status)

    # Print capacity and status
    echo "$capacity" \| "$status"
done

说明:您的电池信息存储在/sys/class/power_supply/单独的电池中,并命名BAT为一些编号,即BAT0, BAT1, ...。由于 Linux 上的所有内容都是一个文件,因此您可以简单地找出其中的内容BAT0/statusBAT0/capacity获取所需的信息,然后使用echo.如果您还有其他问题请询问!

相关内容