Как выполнить сбой, если предыдущая команда обнаружила недопустимые файлы в скрипте gitlab?

#json #linux #gitlab #gitlab-ci

#json #linux #gitlab #gitlab-ci

Вопрос:

У меня есть скрипт gitlab.yml, который я запускаю, как показано ниже:

 script:
  - ls -lrth
  - find Data/ -name "*.json" -print0 | while IFS= read -d '' -r filename; do
        if ! jq . "$filename" >/dev/null 2>amp;1; then
            echo "$filename bad";
        fi
    done
  - # how can I check if above find command found invalid json files and if it did then fail and doesn't move to next command
  - # some other unix commands here
  

Моя find команда находит все недопустимые файлы json. Теперь я хочу завершить работу своего скрипта gitlab, если моя find команда обнаружит недопустимые файлы json. Это означает, что он должен распечатать все недопустимые файлы json (что он уже делает), а затем не должен переходить к следующей команде для выполнения.

Возможно ли это сделать?

Комментарии:

1. Сразу exit 1 после echo , нет?

2. Я хочу распечатать все недопустимые файлы JSON, а затем выйти из него, если он обнаружил какие-либо недопустимые файлы JSON, но не в середине.

3. Затем установите некоторую переменную и завершите работу позже? find ... | { failure=0; while ....... echo bad; failure=1; ....... done; exit "$failure"; } . Также работает ли код? Разве вы не получаете синтаксическую ошибку о пропущенных ; после echo и после fi ?

4. ооо, мы можем сделать это здесь? Я не знал об этом. да, это была ошибка копирования вставки. исправит это. И да, это работает.

Ответ №1:

Попробуйте:

   - find Data/ -name "*.json" -print0 | {
        status=0;
        while IFS= read -d '' -r filename; do
            if ! jq . "$filename" >/dev/null 2>amp;1; then
               echo "$filename bad";
               status=1;
            fi;
        done;
        exit "$status";
    }