gpt4 book ai didi

linux - 更改 while 循环内的变量

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:32 24 4
gpt4 key购买 nike

我正在尝试制作一个为窗口管理器输出状态栏的脚本。它输出正常的内容,如时间、日期、天气等。

它输出的字符串之一是系统(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 时才能访问该变量,就好像它没有存储在内存中并更新,而是在计数器 % 60 == 0 的每次 while 循环迭代中创建。

最佳答案

例如,由于您在子 shell 中运行函数(来自 status 函数):

echo $(updates)

当子 shell 退出时,它们的变量 (updates_aur) 值会丢失。没有理由 echo 包含 echo 的函数。只需直接调用您的函数即可:

updates

这发生在其他函数的几个地方。那里也没有必要。

关于linux - 更改 while 循环内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com