flake8_errs
是初始化为空字符串(")的变量。
试图连接命令
的输出flake8 --config=$(CI_DIR)/lint-configs/python/.flake8 $$py_file;
每个.py
文件到flake8_errs
变量。
然后检查flake8_errs
是否有一些内容并引发err。
这是我到目前为止所尝试的:
flake8_errs =''
.PHONY: .flake8
.flake8:
. $(VIRTUALENV_DIR)/bin/activate;
if [ "$${FORCE_CHECK_ALL_FILES}" = "true" ]; then
find ./* -name "*.py" | while read py_file; do
flake8_errs += flake8 --config=$(CI_DIR)/lint-configs/python/.flake8 $$py_file;
done;
else
echo "No files have changed, skipping run...";
fi;
if [ ! -z "${flake8_errs}" ]; then
exit 1;
fi;
不能在recipe中使用make函数,也不能在recipe中赋值make变量。recipe被完全展开一次,因此所有make构造都被解析,然后调用shell并给出该扩展的结果,然后make等待shell完成以确定它是否工作。
你不能"穿插";Shell和makefile内容,其中Shell必须运行一些东西,然后make结构将被扩展,然后Shell将运行更多的东西,等等。
您应该使用ONLY编写整个规则外壳结构:.PHONY: .flake8
.flake8:
. $(VIRTUALENV_DIR)/bin/activate;
files='$(CHANGED_PY)';
if [ '$(FORCE_CHECK_ALL_FILES)' = true ]; then
files="$$(find ./* -name "*.py")";
fi;
if [ -z "$$files" ]; then
echo "No files have changed, skipping run...";
exit 0;
fi;
errors=;
for file in $$files; do
if [ -n "$$file" ]; then
errors="$$errors $$(flake8 --config=$(CI_DIR)/lint-configs/python/.flake8 $$file)";
fi;
done;
if [ -n "$$errors" ]; then
echo "got errors: $$errors";
exit 1;
fi;