Я ожидаю следующий фрагмент
until [ MY_VAR=$(echo my_var_val) ]
do
echo 'inside the loop'
done
echo $MY_VAR
для получения my_var_val
вывода. Однако этого не происходит. Как я могу это сделать?
Длинная история
Я хочу выполнить повторную попытку сценария, производящего некоторый вывод. Мне нужен вывод позже в сценарии. К сожалению, присвоить значение переменной в тесте until не удается - переменная имеет пустое значение, когда я пытаюсь использовать ее позже в скрипте. Как я могу выполнить внешний сценарий с логикой повтора и сохранить его вывод в переменной, которую я могу использовать позже в сценарии?
max_retry=10
counter=0
until [ IMPORTANT_SCRIPT_OUTPUT=$(python very_important_script_with_output.py) ]
do
#retry logic
if [[ counter -eq $max_retry ]]; then
echo "Failed"
exit 1
fi
((counter++))
echo "very_important_script_with_output failed, retrying"
done
python another_very_important_script_with_the_previous_script_output_as_parameter.py --important-parameter $IMPORTANT_SCRIPT_OUTPUT
[
— это обычная команда, а не синтаксис оболочки, и ее аргументы обрабатываются нормально. Итак, MY_VAR=$(echo my_var_val)
— это просто строка, начинающаяся с MY_VAR=
, а не присваивание переменной.
Выполните задание отдельно от проверки переменной.
while :
do
MY_VAR=$(command)
if [[ -n "$MY_VAR" ]]
then break
fi
echo 'inside the loop
done
Вы можете попробовать это:
until MY_VAR=$(echo my_var_val); test -n "$MY_VAR"
do
echo 'inside the loop'
done
echo $MY_VAR
Каков статус выхода скрипта Python? Вместо этого вы можете просто написать
until IMPORTANT_SCRIPT_OUTPUT=$(python very_important_script_with_output.py); do ...; done
.