Код возврата дочернего сценария в родительский сценарий - PullRequest
0 голосов
/ 03 января 2019

У меня есть родительский сценарий ksh, в котором inturn выполняет дочерний сценарий, как показано ниже.

((Demo.sh $TableName $DatFile | tee $STDLOGFILE) > $STDERRLOG 2>&1)

RC=`echo $?`

Код возврата записывается неправильно, когда дочерний сценарий (Demo.sh) завершается с ошибкой.Он всегда возвращает 0. Я понимаю проблему, потому что я нажимаю STDERR и STDOUT независимо от успеха и неудачи, поэтому он всегда возвращает код как 0.

Пожалуйста, помогите мне в захвате действительного кода возвратадочерний скрипт.

1 Ответ

0 голосов
/ 03 января 2019

Вы можете сделать:

 RC=$( { { Demo.sh "$TableName" "$DatFile"; echo $? >&3; } |
     tee $STDLOGFILE; } 3>&1 > $STDERRLOG 2>&1; )

Проблема заключается в классической проблеме $?, являющейся возвращаемым значением конвейера, которое является значением, возвращаемым последней командой в конвейере, а именно tee.В bash эта проблема часто решается с помощью массива PIPESTATUS, но здесь мы используем подход, заключающийся в выводе возвращаемого значения в другой файловый дескриптор и соответствующем перенаправлении.

...