Я пытаюсь получить код состояния из запуска Rscript неинтерактивным способом в виде сценария bash. Этот шаг является частью более крупного цикла обработки данных, в котором, среди прочего, используются сценарии db2.
Итак, у меня есть следующее содержимое в скрипте sample.sh:
Rscript --verbose --no-restore --no-save /home/R/scripts/sample.r >> sample.rout
когда этот sample.sh запускается, он всегда возвращает код состояния 0, независимо от того, выполняется ли сценарий sample.r полностью или возникает ошибка на промежуточном этапе.
Я пробовал следующие вещи, но не повезло
1 — в файле sample.sh я добавил условие if и else для кода возврата, как показано ниже, но он снова записал 0, несмотря на то, что sample.r не выполнил одну из функций внутри.
if Rscript --verbose --no-restore --no-save /home/R/scripts/sample.r >> sample.rout
then
echo -e "0"
else
echo -e "1"
fi
2 - Я также пробовал скрипт-оболочку, как в файле sample.wrapper.sh
r=0
a=$(./sample.sh)
r=$?
echo -e "\n return code of the script is: $a\n"
echo -e "\n The process completed with status: $r"
здесь также я не получил ожидаемую «1» в случае отказа sample.r на промежуточном шаге по обеим переменным a
и r
. В идеале мне нужен способ зафиксировать ошибку (как «1») в a
.
Может ли кто-нибудь посоветовать, как заставить rscript писать «0» только в случае завершения всего скрипта без каких-либо ошибок и «1» во всех остальных случаях?
высоко ценим вклад! Спасибо!