如何解决验证Makefile中文件的存在以执行脚本
我在验证此脚本中的文件存在问题。当ADDITION或DELETIONS路径中没有文件时,脚本将失败。
如何验证ADDITION或DELETION路径中是否有文件?
我正在使用bash和Makefile做我的第一步,因此将不胜感激。
execute-s3-sync: $(foreach BUCKET,$(S3_BUCKETS),execute-$(BUCKET)-s3-sync) execute-large-files-s3-sync
execute-%-s3-sync: require-target-environment property-SOURCE_DATA_EXPORT_KEY property-TARGET_DATA_EXPORT_KEY
export AWS_DEFAULT_REGION=$(TARGET_AWS_REGION)
MANIFEST="$(if $(filter $*,large-files),large-files,$(call get-source-s3-bucket,$*)).gz"
ADDITION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/additions/$$MANIFEST"
DELETION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/deletions/$$MANIFEST"
[[ -f "$$ADDITION" ]] && \
pipenv run python scripts/large-files-copy.py \
$(foreach BUCKET,--bucket-equivalences $(call get-source-s3-bucket,$(BUCKET)) $(call get-target-s3-bucket,$*)) \
--manifest $$ADDITION \
submit-to-batch \
--job-queue "$(STACK_PREFIX)-batch-job-queue" \
--job-definition "$(STACK_PREFIX)-batch-job-definition"
[[ -f "$$DELETION" ]] && \
pipenv run python scripts/large-files-copy.py \
$(foreach BUCKET,$*)) \
--manifest $$DELETION \
local-run \
--operation remove;
解决方法
您必须使它成为一个巨大的单一bash命令; make在外壳程序中分别执行每一行,并且变量在后续步骤中不可用。为了提高可读性/可维护性,我将此处的test -f ... && xxx
语句替换为if
块。
例如
execute-%-s3-sync: ...
MANIFEST="$(if $(filter $*,large-files),large-files,$(call get-source-s3-bucket,$*)).gz" && \
ADDITION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/additions/$$MANIFEST" && \
DELETION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/deletions/$$MANIFEST" && \
if test -f "$$ADDITION"; then \
...
fi && \
if test -f "$$DELETION"; then \
...
关于失败,您必须以积极的态度表达。例如
-
坏:
test -f $FILE && do_something ## --> will fail when $FILE does not exists
-
好:
! test -f $FILE || do_something ## --> fails only,when do_something fails
-
好:
if test -f $FILE; then do_something fi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。