Как поместить обновляемые данные в командную строку Bash?

Я пытаюсь сделать подсказку, которая показывала бы текущий процент заряда батареи, однако, если у меня есть код для установки PS1в .bashrcтак, как он написан, тогда он только проверяет данные один раз, когда интерактивная оболочка инициализируется при открытии нового экземпляра эмулятора терминала. Это требует, чтобы я перезагрузил .bashrc, если я хочу, чтобы данные обновились. Я все еще довольно новичок в unix-подобных операционных системах, поэтому возможно и даже вероятно, что я упускаю что-то тривиальное. Возможно, мне следует создать демона, который обновляет подсказку?

Это не весь код приглашения, а соответствующий бит с изменяющимися данными.

PS1="`upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "percentage:" | awk '$1 == "percentage:" {print $2}'`$ "
1
30.06.2020, 12:48
1 ответ

Вам не нужно upower. И все оболочки поддерживают зацикливание, поэтому вы можете сделать что-то вроде этого:

#!/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/statusи BAT0/capacity, чтобы получить нужную информацию, а затем распечатать ее с помощью echo. Если у вас есть еще вопросы, пожалуйста, спрашивайте!

-1
18.03.2021, 23:23

Теги

Похожие вопросы