我正在尝试制作一个为我的窗口管理器输出状态栏的脚本。它输出正常的内容,例如时间,日期,天气等。
它输出的字符串之一是系统(Arch Linux)的更新数量。由于我要从中提取更新数量的“ API”每天有最大请求数量,因此我不得不在update()函数中添加延迟(输出更新数量),以使最大请求数量不会超出。
添加此延迟会使问题开始。
不知何故,updates_aur变量没有存储在内存中,并且在删除我实现的延迟之前无法访问。 (以下代码中的更多说明)
我希望实施一个延迟,使更新不会在每次迭代中都被检查,而是每60个更新中的一个。
我尝试将“ updates_aur”和“ updates_arch”导出到环境变量中,以便将它们存储在内存中,但是当脚本创建子shell时,将无法对其进行更新/检索。
updates() {
if [ "$internet" = true ]; then
if ! updates_arch=$(checkupdates 2> /dev/null | wc -l ); then
updates_arch=0
fi
if (( $counter % 60 == 0 )); then #this is done to add a delay and not saturate aur requests
if ! updates_aur=$(yay -Qum --devel 2> /dev/null | wc -l); then
updates_aur=0
fi
else
:
fi
updates=$(("$updates_arch" + "$updates_aur"))
if [ "$updates" -gt 0 ]; then
echo " Updates: $updates"
else
echo " Updates: 0"
fi
echo $delim
else
:
fi
}
然后在while循环中调用它(while循环还将计数器加1)
完整代码:https://github.com/Baitinq/dwm/blob/master/scripts/dwm-status
我希望每当计数器%60 == 0时aur_updates的变量都将被更新和存储,但是实际结果是,仅当计数器%60 == 0时才可以访问该变量,就好像不是被存储在内存中并进行更新,但是每次while循环迭代都会创建,其中计数器%60 == 0。
答案 0 :(得分:0)
例如,由于您是在子Shell中运行函数(来自status
函数):
echo $(updates)
子shell退出时,其变量的(updates_aur
)值将丢失。没有理由echo
的函数中包含echo
。只需直接调用您的函数即可:
updates
在其他地方,这会发生在其他地方。那里也没有必要。