linux - 在while循环中更改变量
问题描述
我正在尝试制作一个为我的窗口管理器输出状态栏的脚本。它输出正常的东西,如时间、日期、天气等。
它输出的字符串之一是系统(Arch Linux)的更新次数。由于我从中提取更新数的“API”每天有最大请求数,因此我必须向 updates() 函数(输出更新数)添加延迟,以便最大请求数不是超过。
添加此延迟会使问题开始。
不知何故,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
我希望 aur_updates 的变量在计数器 %60 == 0 时更新和存储,但实际结果是该变量只能在计数器 %60 == 0 时访问,就好像它没有存储在内存并更新,但在计数器 % 60 == 0 的每个 while 循环迭代中创建。
解决方案
由于您在子shell中运行函数,例如(来自status
函数):
echo $(updates)
updates_aur
当 subshell 退出时,它们的变量 ( ) 值会丢失。没有理由在echo
其中包含一个函数echo
。只需直接调用您的函数:
updates
这发生在具有其他功能的几个地方。那里也没有必要。
推荐阅读
- javascript - 我可以使用类在 DOM 中创建/放置元素吗?
- ldap - 查询 Sling 自定义登录模块
- python - 使用python,tensorflow在cron中启动工作.sh脚本时出现问题
- python - 与 groupBy 聚合后将 pyspark 数据帧保存为 csv 文件
- c - ^{ 是什么意思
}() 在 C 中是什么意思? - concurrency - Redis BITSET 和 WATCH
- php - 如何在php中保留最后一个零
- angular - 如何实现
在 Angular 7 中? - php - 如何在服务器端修复“当多个 mp3 文件处理为一个时,FFmpeg 命令无法工作”
- indexing - 有没有办法随时随地查看 solr 索引