我必须记录来自各种传感器的测量值,其中一些会花费一些时间。我想同时从传感器获取读数,以节省时间。
我有一个函数foo,该函数读取一些传感器并将值保存为变量,例如一个名为bar。
的变量我正在使用wait命令暂停脚本,直到foo函数完成为止,然后才使HTTP获取将所有度量发送到服务器以进行日志记录。
#!/bin/bash
function foo {
bar=$(command for reading sensor here)
echo "bar is $bar"
}
foo & #this is to run the foo function as a background process.
temperature=$(command for measuring temperature here)
humidity=$(command for measuring humidity here)
wait %1 #this should pause the script until the function foo is complete.
echo "function foo has finished. bar is $bar"
curl -X GET -G (URL to server) -d bar=$bar -d temperature=$temperature -d humidity=$humidity
当我运行脚本时,输出如下:
bar是1234
foo功能已完成。酒吧是
请注意,此应该说“函数foo已完成。bar为1234”。
...如果我在脚本开始处添加set -x,则curl命令(在脚本末尾)看起来像这样:
curl -X GET -G(服务器的URL)-d bar = -d温度= 21.5-d湿度= 65
同样,请注意bar变量为空。
如果我有相同的脚本而没有wait命令(并且在运行函数时不带“&”号,则该函数将正确设置bar变量,并且生成的curl命令已完成。但是,当我如上所述使用wait命令时,一旦功能完成,foo函数中的变量就会丢失。
是否有某种方法可以保留由功能foo设置的这些变量?
仅在此处汇总Barmar的评论,以便将其标记为答案...
问题是,在后台运行的功能在子外壳中运行,而不是在运行主脚本的外壳中运行,并且在子外壳中设置的变量永远不会转移到主外壳中shell(脚本本身正在其中运行)。
一种可能的解决方案是将变量写入文件,并且-在等待命令之后-再次从那些文件中读取变量。