У меня есть два сценария Bash. Родительский скрипт вызывает индекс для выполнения некоторых действий и возврата значения. Как вернуть значение из индекса в родительский script? Добавление return
в индекс и уловка значения в родительском файле не работало.
Bash - Возвращаемое значение из индекса в родительский script
Ответ 1
Я предполагаю, что эти сценарии выполняются в двух разных процессах, т.е. вы не "выбираете" один из них.
Это зависит от того, что вы хотите вернуть. Если вы хотите только вернуть код выхода от 0 до 255, тогда:
# Child (for example: 'child_script')
exit 42
# Parent
child_script
retn_code=$?
Если вы хотите вернуть текстовую строку, вам придется сделать это через стандартный вывод (или файл). Есть несколько способов сделать это, самый простой:
# Child (for example: 'child_script')
echo "some text value"
# Parent
retn_value=$(child_script)
Ответ 2
Вот еще один способ вернуть текстовое значение из дочернего скрипта, используя временный файл. Создайте файл tmp в parent_script и передайте его в child_script. Я предпочитаю этот способ, а не парсинг вывода из скрипта
родитель
#!/bin/bash
# parent_script
text_from_child_script='/bin/mktemp'
child_script -l $text_from_child_script
value_from_child='cat $text_from_child_script'
echo "Child value returned \"$value_from_child\""
rm -f $text_from_child_script
exit 0
Детский
#!/bin/bash
# child_script
# process -l parm for tmp file
while getopts "l:" OPT
do
case $OPT in
l) answer_file="${OPTARG}"
;;
esac
done
read -p "What is your name? " name
echo $name > $answer_file
exit 0
Ответ 3
вернуть значение из индекса и проверить переменную $? которые содержат возвращаемое значение