在提示中显示电池,并在每个命令后更新电池


1

我只是新安装的Lion,并且正在查看我的系统。我正在使用此功能(在网上某处找到...)在提示中显示它:

battery_status()
{
    maxcap=`ioreg -l | grep Capacity | awk '/MaxCapacity/{print $5}'`
    curcap=`ioreg -l | grep Capacity | awk '/CurrentCapacity/{print $5}'`

    curcap=`echo $curcap*1000|bc`
    proc=`echo $curcap / $maxcap |bc`;

    len=`echo ${#proc}`;

    proc_num=${proc:0:3}
    proc_dec=${proc:3:4}

    proc_num_len=`echo ${#proc_num}`;

    if [ $proc_num_len == "3" ]; then
            if [ $proc_num != "100" ]; then
                    proc_num=${proc:0:2}
                    proc_dec=${proc:2:3}
            fi
    fi

    echo $proc_num.$proc_dec%
}

我生成这样的提示:

_PS1user="\u@"
_PS1host="$txtred\h"
_PS1time="$txtwht | \t | "
_PS1battery="`battery_status`"
_PS1end="$txtrst\n\w › "

export PS1="$_PS1user$_PS1host$_PS1time$_PS1battery$_PS1end"

unset _PS1user _PS1host _PS1time _PS1battery _PS1end

但是,从Lion开始,每次再次出现提示时,电池部件不会更新。例如,如果我执行a ls并等待电池耗尽,然后在同一窗口中执行另一条命令,而无需重新分配my .bashrc,则电池保持不变。有谁知道如何更新它而不必.bashrc每次都获取资源给我的文件?

(顺便说一下,就是我的提示的样子。)

Answers:


1

上面的脚本写得如此可怕,它使我眼泪汪汪。考虑到您正在每个提示上运行它,您可能不想花太多钱。

Awk可以在一行中完成以上所有操作:

ioreg -l | awk '/MaxCapacity/ {max=$5} /CurrentCapacity/ {cur=$5} END {printf "%.1f%%", cur/max*100}'

(对不起,声誉不足,无法发表评论,否则我会这么做的)


谢谢 !实际上,我是在网上找到此脚本的,我什至都不了解它的一半。
Aliou

1

如果您希望它在每次调用时都重新运行,则必须对其进行转义。用美元符号最容易做到。

_PS1battery="\$(battery_status)"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.