3

У меня есть цикл for в сценарии оболочки а-ля:

#!/bin/bash
set -u
set -e
for l in sh rb py php java cs; do
  (cd $l; ./run-tests.sh)
done

Намерение состоит в том, чтобы заставить цикл for умереть при пожаре, когда любая из подкоманд аналогично выдает ошибку.

Теперь у меня есть обходной путь : (cd $l; ./run-tests.sh) || die "Message here" вместе с подходящим определением die . Тем не менее, мне действительно любопытно, почему цикл for не завершается самостоятельно в соответствии с ожиданием, установленным командой "set -e"? В идеале, я бы не хотел, чтобы каждый такой цикл был особенным. :)

2 ответа2

1

Причина, по которой set -e не завершается немедленно, если ./run-test.sh завершается неудачей, заключается в том, что строки:

for l in sh rb py php java cs; do
  (cd $l; ./run-tests.sh)
done

для составного заявления. Статус этого составного оператора - это статус последнего запуска ./run-tests.sh .

Твоя работа звучит хорошо для меня.

0

У меня нет права комментировать, поэтому размещать здесь. Это зависит от скрипта в run-tests.sh. Вы уверены, что это дает ненулевое значение:

./run-tests.sh

echo $?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .