首页 > 解决方案 > 为什么 conky 中的 execbar 不能使用变量

问题描述

conky 中的 execbar 似乎无法正常工作。

因此,如果我使用 bash 脚本(名为 myscript.sh)

# moc or mocp is Music on Console
totalsec=$(mocp --info | grep "TotalSec" | cut -d: -f2 | sed 's/^ //g' | sed 's/ $//g')
cursec=$(mocp --info | grep "CurrentSec" | cut -d: -f2 | sed 's/^ //g' | sed 's/ $//g')
progress=$(echo "(${cursec}*100/${totalsec})" | bc)
echo "\${execbar echo ${progress}}"
echo "${progress}" # This works and shows be the value of the integer variable.

然后使用 conky 调用 bash 脚本

conky.text = [[${execpi 3 ./myscript.sh}]];

然后不显示进度条。只有一个白色的矩形。

但是,如果将相同的 bash 脚本更改为

progress=23
echo "\${execbar echo ${progress}}"

然后它工作并显示一个恒定的23. 不知道为什么传递整数变量不起作用。任何解决此问题的帮助将不胜感激。

标签: bashconky

解决方案


事实证明,execbar可以使 bash 脚本工作。有点。

为了将问题集中在变量问题上,我制作了一个小脚本(myscript2.sh),它只获取当前时间的秒数以显示在栏中...

#!/bin/bash
progress=$(date --date='now' +%S)
echo \${execbar echo ${progress}}

...并且能够使用这个 conky 配置文件获得一个显示秒数的定期更新栏...

conky.config = {
    alignment = 'top_left',
    minimum_width = 300,
    own_window = true,
    own_window_hints = 'below',
    own_window_type = 'desktop',
    own_window_argb_visual=true,
    own_window_transparent = true,
    update_interval = 2.0,
}

conky.text = [[
${execpi 3 ./myscript2.sh}
]]

但是,conky 在显示条已填充到适当程度和显示条为空之间交替出现。换句话说,条形内容的显示闪烁着闪烁。呸。

作为替代方案,通过使用脚本 (myscript3.sh) 来简单地返回要在栏中显示的值...

#!/bin/bash
progress=$(date --date='now' +%S)
echo $progress

...并更改 conky 配置文件以使用execibar而不是execpi...

conky.config = {
    alignment = 'top_left',
    minimum_width = 300,
    own_window = true,
    own_window_hints = 'below',
    own_window_type = 'desktop',
    own_window_argb_visual=true,
    own_window_transparent = true,
    update_interval = 2.0,
}

conky.text = [[
${execibar 3 ./myscript3.sh}
]]

...它似乎按预期工作,没有任何闪烁。


推荐阅读