在while循环内更​​改变量

时间:2019-07-23 17:34:52

标签: linux bash shell

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

它输出的字符串之一是系统(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。

1 个答案:

答案 0 :(得分:0)

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

echo $(updates)

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

updates

在其他地方,这会发生在其他地方。那里也没有必要。