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"
→ Ссылка