gpt4 book ai didi

linux - 如何从外部更改 bash 脚本中的全局变量,以便更改反射(reflect)在 while 循环中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:19 25 4
gpt4 key购买 nike

我在 Ubuntu 中有一个 bash 脚本,它激活位于同一脚本中的一个函数(我也写过)并将其设置为在后台运行,方法如下:

my script:
.
.
my_func &
do some stuff (that i don't know how much time it's gonna take)
global_var=1

my_func 是一个有 while 循环的函数,它的条件是运行 while

global_var -ne 1

但它不起作用。在循环之外将值更改为 1 后,更改似乎不会传播到函数,因为 while 循环继续运行。

my_func 收集有关我的脚本性能的统计信息,因此它必须优雅地结束,我不能在程序完成后强行杀死它。这就是为什么我必须能够告诉它停止。

需要帮助告诉它停止。

最佳答案

当您在后台运行此函数时,它不会与运行它的脚本共享访问权限或内存。您将需要采用其他方法。

最优雅的方法是查看您是否无法让函数自行理解它需要停止。但是,如果在您的情况下这不可能,最古老和最简单的方法之一就是拥有一个共享数据文件,其中填充了您需要在脚本中通用的任何变量。

因此,您写入 vars.txt,而不是全局变量,stopfunction=1在你的后台脚本中,它不断地检查这个文件(或数据库)每个循环以查看变量是什么。

或者,如果您的程序允许这种格式,您可以导出数据。将您的函数放入另一个 shell 脚本并在后台从第一个开始运行它。

#!/bin/sh

globalvar="something"
export globalvar
./2.sh &

echo "finished"

然后在 2.sh 中

#!/bin/sh

sleep 5
echo "this is global: $globalvar"

例如,我不知道这是否适用于你的情况,但我对脚本使用了类似的技巧,就像你正在尝试做的那样。

尽管此方法需要更改全局变量并调用脚本,但这是某种更大的循环,即使它们是异步的也是如此。

关于linux - 如何从外部更改 bash 脚本中的全局变量,以便更改反射(reflect)在 while 循环中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44100829/

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