Модераторы: powerfox, ZeeLax

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Bash - вернуть значение переменной из дочернего, процесса в родительский процесс 
V
    Опции темы
savigm
Дата 30.3.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



Вобщем скрипты немного поменялись, переменную из дочернего скрипта передаю по подстановке команд: $var=`script1.sh`

Поясню на упрощенном примере, что мне нужно:

Первый скрипт - script1.sh:
Код

if [ ! -x program.bin ]; then
    exit 1
fi
echo -n "Run <$file> ......... "
./program.bin file1 > ${file}.log
if grep -q "OK" ${file}.log; then
    echo "[OK]"
elif grep -q "ERROR"; then
    echo "[ERROR]"
else
    echo "[ABEND]"
fi

Единственный параметр script1.sh - имя файла file, program bin при удачном завершении выдает "[OK]", при неудачном завершении "[ERROR]". Если программа завершилась ненормально(например по [Ctrl]+[C]) - выдается "[ABEND]". Код возврата script1.sh - 0 нормальное завершение, не 0 - ненормальное завершение(например отсутсвие файла program.bin).

Второй скрипт - script2.sh:
Код

all_files=`cat status.txt`
for file in $all_files; do
    echo -n "Run <$file> ......... "
    result=`./script1.sh $file`
    echo $result
done

Статусный файл соодержит имена файлов file для первого скрипта script1.sh.

Остается одна проблема: как анализировать код возврата первого скрипта, в случае ненулевого сразу завершить script2.sh.
Если сразу после
Код

result=`./script1.sh $file`

анализировать $? это и будет код возврата скрипта script1.sh, или это будет код возврата присвоения переменной result?

Это сообщение отредактировал(а) savigm - 30.3.2009, 15:22
PM MAIL ICQ   Вверх
Vaulter
Дата 30.3.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 3
Всего: 22



по первому script1.sh
зачем лишний файл лога? можно сразу
Код

if [ ! -x program.bin ]; then
    exit 1
fi

echo -n "Run <$file> ......... "
$ret=$(./program.bin $file 2> ${file}.err.log)

if [ "[OK]" = "$ret" ]; then
    echo "Ok";  //
    exit 0;
elif [ "[ERROR]" = "$ret]; then
    echo "Failed";
    exit 1;
else
    echo "Aborted"
    exit 2;
fi


Код

all_files=`cat status.txt`
for file in "$all_files"; do
    echo -n "Run <$file> ......... "
    out=`./script1.sh $file 2>&1`
    retval=$?
    echo "( $retval ) $out"

    if (( $? )); then echo "ERROR on $file"; fi

done




--------------------
PM MAIL WWW ICQ   Вверх
savigm
Дата 31.3.2009, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



Vaulter, В первом скрипте нужен лог  выдачи program.bin для отдельных целей. Я так понимаю в $? будет именно код возврата скрипта script1.sh (./script1.sh $file), а не код возврата операции присвоения (result=`./script1.sh $file`)?
PM MAIL ICQ   Вверх
Vaulter
Дата 31.3.2009, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 3
Всего: 22



$? код возврата последнего завершившегося процесса.
присвоение, насколько я знаю - это не процесс.


--------------------
PM MAIL WWW ICQ   Вверх
savigm
Дата 5.4.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



powerfox
Vaulter, спасибо, тема по-моему вполне освещена, вывод следующий:
из дочернего скрипта, как правильно заметил powerfox, можно получить два результата - выдача и код возврата.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.