В настоящее время я перебираю каждый .py файл в / каталоге. Для каждой итерации я вызываю pycodestyle и выхожу, как только вижу ошибку.
Но я хочу видеть все сообщения об ошибках для каждого файла, даже если в каком-либо из файлов была ошибка до << Это помогает разработчику увидеть, какие строки он / она должен изменить, чтобы пройти тест (линтинг).
Если ни один файл не печатает ошибку, не печатайте ошибку. << Это будет полезно для моего конвейера Jenkins.
for file in $(find /-type d -name test -prune -o -type f -name '*.py' -print); do
filename=$(basename $file)
if [[ $filename != "__init__.py" ]] ; then
echo "$file"
pycodestyle "${file}" || exit 1 <<< This causes an error.
<< If it passes the linting, it doesn't exit.
fi
done
Мое решение:
Каким-то образом мне нужна логическая локальная переменная, чтобы показать, печатает ли она ошибку. В конце я могу проверить переменную и вернуть выход или нет. Но я не знаю, как это реализовать... Спасибо!
Вам нужно, чтобы скрипт выходил с ненулевым кодом состояния, если были какие-то ошибки? Установите переменную и проверьте ее после цикла.
@Barmar Не могли бы вы ответить примером, пожалуйста?
Где установить переменную??? Как мне проверить это после цикла??? я не уверен





Вместо выхода установите переменную, которую вы проверяете в конце, чтобы выйти с правильным статусом.
status=0
for file in $(find /-type d -name test -prune -o -type f -name '*.py' ! -name '__init__.py' -print); do
echo "$file"
pycodestyle "${file}" || status=1
done
exit "$status"
Кроме того, вы можете отфильтровать __init__.py в команде find, поэтому вам не нужен if (то же самое я показал вам в Исключить определенный каталог, пока (команда поиска) - BASH).
Также см. Почему зацикливание вывода find является плохой практикой?
но разве exit 0 не терпит неудачу на Дженкинсе? @Бармер
0 — успех, ненулевое значение — неудача.
@EdMorton У вас есть ссылка на вопрос, который показывает, как правильно его реструктурировать?
чертов сценарий bash очень сложен. вероятно, сложнее, чем C.
а) не думайте об этом как о языке, подобном C, потому что тогда вы будете читать о том, как сделать X, вместо того, чтобы предполагать, что знаете, как сделать X, и б) используйте только сценарий оболочки (bash или другой) для создания /destroy файлы и процессы и последовательные вызовы инструментов (т. е. не пытайтесь использовать его для вещей, для которых он не предназначен), и вы обнаружите, что его относительно легко освоить, поскольку он имеет часть конструкций общего целевой язык, такой как C. Его синтаксис и семантика просто «другие», и поэтому их нужно изучать, не делая предположений о том, как вы могли бы сделать что-то подобное на каком-то другом языке.
@hellofanengineer Сценарии Bash обычно считаются более простыми, чем другие языки, потому что вы в основном используете команду, с которой вы уже знакомы, при интерактивной работе.
@Barmar Могу ли я перенаправить на эту проблему: stackoverflow.com/questions/56466433/…
Просто избавься от
|| exit 1