#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";
}