LINUX.ORG.RU

bash и отслеживание ошибок


0

0

предположим есть bash скрипт прмерно такого содержания:

cat word | perl -e 'dkladnlfka' | jopa | uniq и т п...

В процессе могут возникать различные ошибки ( например отсутствие perl, отсутствие файла и тп ...). Проблема заключается в том, что код ошибки $? в такой "цепочке" "затирается" последующей коммандой. Как в данном случае отслеживать появление ошибок и прекращать "цепочку" в момент появление ненулевого $? ?

anonymous

Ответ на: комментарий от mky

>>PIPESTATUS

Да похоже PIPESTATUS - то что нужно. Т е получается, что нужно проверяь что-то типа ${PIPESTATUS[*]} | grep '[1-9]' - если возвр что-то - значит где-то есть ошибка. Только вот как это в условие "завернуть" ?

anonymous
()
Ответ на: комментарий от anonymous

Ну, допустим так:

cat word | perl -e 'dkladnlfka' | jopa | uniq ; OP=( ${PIPESTATUS[*]} )

ERROR=

for i in ${OP[*]} ; do [ $i != 0 ] && ERROR=1 ; done

Все делается средствами bash, в этом случае не нужен grep (запуск дополнительного процесса). Ну или цикл можно задать по-другому:

for (( i=0; i<10; i++ )) ; do [ -n "${OP[i]}" -a "${OP[i]} != 0 ] && echo "Error at $i command" ; done

mky ★★★★★
()

Если скрипт будет запускаться ручками, то можно запускать вот так:

$ sh -x -c 'ls | grep mid | sort | head'
+ ls
+ grep mid
+ sort
+ head
middle1.pgn
middle2.pgn
middle3.pgn
middle4.pgn
middle5.pgn
middle6.pgn
middle.pgn


Для визуализации самое то.

Valmont ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.