Я должен регистрировать измерения от различных датчиков, некоторые из которых занимают довольно много времени. Я хочу получить показания датчиков одновременно, чтобы сэкономить время.
У меня есть функция 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 is 1234
функция foo завершена. bar это
Обратите внимание, что это должно сказать "функция foo закончила. bar 1234".
... если я добавлю в set -x at При запуске скрипта команда curl (в конце скрипта) выглядит примерно так:
curl -X GET -G (URL-адрес сервера) -d bar = -d температура = 21,5-дневная влажность = 65
Опять же, обратите внимание, что переменная bar пуста.
Если у меня тот же скрипт без ожидания Команда (и запуск функции без амперсанда после нее), функция правильно устанавливает переменную bar , и полученная команда curl завершена. Однако, когда я использую команду ожидания, как описано выше, переменные из функции foo теряются после ее завершения.
Есть ли какой-то способ сохранить эти переменные, которые установлены функция foo ?