bash скрипт не работает в многопотоке
#!/bin/bash
step_1(){
num1=$RANDOM
}
step_2(){
num2=$RANDOM
}
step_3(){
num3=$RANDOM
}
step_1 &
step_2 &
step_3 &
wait
min=$num1
if (( num2 < min )); then
min=$num2
fi
if (( num3 < min )); then
min=$num3
fi
echo "$min"
Если запускать не в многопотоке, то все выводит нормально, но после добавления "&" код выдает пустую строку
Ответы (1 шт):
Автор решения: Ivan
→ Ссылка
В "многопотоке" команды выполняются в подоболочках(subshell). Соответственно переменные num1-3 так же создаются в подоболочках и в родительском скрипте не видны. Попробуйте так:
#!/bin/bash
step_1(){
echo $RANDOM
}
step_2(){
echo $RANDOM
}
step_3(){
echo $RANDOM
}
data=$(
step_1 &
step_2 &
step_3 &
)
wait
echo $data
for i in $data; {
((${min:=$i}>i)) && min=$i
}
echo "$min"