首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证Makefile中是否存在用于执行脚本的文件

验证Makefile中是否存在用于执行脚本的文件
EN

Stack Overflow用户
提问于 2020-09-08 14:33:51
回答 1查看 58关注 0票数 2

在验证此脚本中的文件存在时,我遇到了问题。当添加路径或删除路径中没有文件时,脚本将失败。

如何验证添加或删除路径中是否存在文件?

我正在使用bash和Makefile做我的第一步,所以任何帮助都将受到感谢。

代码语言:javascript
运行
复制
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,$(S3_BUCKETS),--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,$(S3_BUCKETS),--bucket-equivalences $(call get-source-s3-bucket,$(BUCKET)) $(call get-target-s3-bucket,$*)) \
        --manifest $$DELETION \
        local-run \
            --operation remove;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-08 14:59:31

您必须使它成为一个庞大的单一bash命令;make在shell中分别执行每一行,而变量在后面的步骤中不可用。为了提高可读性/可维护性,我将这里的test -f ... && xxx语句替换为if块。

例如。

代码语言:javascript
运行
复制
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 \
       ...

对于失败,你必须以积极的态度来表达。例如。

  • 坏:

测试-f $FILE && do_something ## ->将在$FILE不存在时失败

  • GOOD:

好了!仅当-f $FILE do_something ## ->只在do_something失败时才会失败

  • GOOD:

如果测试-f $FILE;那么do_something fi

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63796135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档