尝试遍历多个文件,对每个文件执行命令并将输出连接到相同的str变量



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;

相关内容

  • 没有找到相关文章