Я хочу запускать функции f1
и f2
одновременно, а затем выполнять действие только тогда, когда они сделаны.
Похоже, что если функции заданы как в сценарии, изменения значения f1/f2done
не отображаются сценарием, цикл до конца не завершается, и конечная строка не выполняется.bash variable scope issue with function fork (&)
- Как это осуществить?
Edit - дополнительные функциональные возможности, требуемые
2. Есть ли способ, которым я мог читать/писать на основных технологических переменных в скрипте (без использования файлов)?
Благодарим вас за чтение.
#!/bin/bash
f1done="false"
f2done="false"
function f1 {
echo "f1: "
sleep 4
echo "f1 done."
f1done="true"
}
function f2 {
echo "f2: "
sleep 2
echo "f2 done."
f2done="true"
}
f1 &
f2 &
until [[ "$f1done" == "true" && "$f2done" == "true" ]]; do
echo "$f1done $f2done...";
sleep 3;
done
echo "Both done."
вещи выполняются в фоновом режиме в отдельных процессах; изменения в них не могут повлиять на родительский процесс. –
Вы ищете многопоточность, и bash не поддерживает это. Были некоторые разговоры о оболочке korn (ksh), поддерживающей многопоточность (http://kornshell.com/doc/faq.html Q7), но я не думаю, что это произошло. Кроме этого, я не знаю ни одной оболочки, что многопоточность, вам нужно что-то вроде C, C++ или Java. – cdarke