как запустить 2 команды после сбоя в цикле?

Я хочу написать простой цикл, подобный этому:

for f in my_file0 my_file1 my_file2; do
    (( $(find . -name $f | wc -l > 0 ))
done

Однако, я хочу, чтобы цикл сломал сценарий, если произошел сбой, и напечатал сообщение об ошибке, поэтому я сделал это:

for f in my_file0 my_file1 my_file2; do
    (( $(find . -name $f | wc -l > 0 )) || echo error && exit 1
done

, который выходит на первой итерации, очевидно.

Итак, я перешел к этому решению

for f in my_file0 my_file1 my_file2; do
    (( $(find . -name $f | wc -l > 0 )) || (echo error && exit 1)
done

, которое, насколько я понимаю, выходит только из под-оболочки: - (

Итак, теперь я пишу это так :

for f in my_file0 my_file1 my_file2; do
    (( $(find . -name $f | wc -l > 0 ))
    if (( $? > 0 )); then echo error && exit 1; fi
done

но это отстой ...

Что я могу сделать, кроме вызова функции, которая будет выполнять эти две команды?

0
задан 10 September 2019 в 09:38

1 ответ

Используйте фигурные скобки вместо круглых скобок, что каждый не порождает новую подоболочку:

... || { echo error; exit 1; }

Уведомление, что †“, в отличие от этого, с круглыми скобками †“необходимо будет поместить точку с запятой даже после последнего оператора.

Также примечание, которое я изменил && в ;, я думаю, что необходимо даже выйти если echo сбои по любой маловероятной причине; не стесняйтесь возвращать это, если Вы действительно хотите продолжить цикл если echo сбои.

2
ответ дан 23 October 2019 в 02:35

Другие вопросы по тегам:

Похожие вопросы: