【问题标题】:How can i assign the output of a makefile function to a variable如何将makefile函数的输出分配给变量
【发布时间】:2021-05-07 17:14:15
【问题描述】:

我在生成文件中有一个函数,它返回谷歌云存储中的存储桶名称

define get_composer_bucket
    gcloud beta composer environments describe --location=europe-west2 ${COMPOSER_SANDBOX_NAME} \
    | grep -hnr "dagGcsPrefix"
endef

我想在 makefile 命令中使用它的输出。如何将其输出分配给变量?我尝试了以下方法,它返回一个空变量。我是不是做错了什么?

run:

    BUCKET=$(call get_composer_bucket)  
    echo ${BUCKET}

【问题讨论】:

    标签: shell makefile google-cloud-composer


    【解决方案1】:

    有很多SO答案会向你描述make变量和shell变量之间的区别;了解这种差异对于编写 makefile 至关重要。

    还有许多 SO 答案将解释配方中的每个命令都在不同的 shell 中运行,并且在一个 shell 中设置的变量不能传递给另一个 shell,因此在一个配方命令行中设置一个变量在另一个配方命令行中看不到(您可以使用\ 将多个物理行组合成一个逻辑行,但您可能还需要添加; 以满足shell)。

    而且,有很多答案都在讨论 makefile 如何不是 shell 脚本(尽管它可以包含 shell 脚本),因此您不能只在 makefile 中的任何位置编写 shell 脚本并对其进行评估。

    对你来说最简单的事情是使用 make shell 函数设置一个 make 变量来运行 shell 脚本:

    BUCKET := $(shell gcloud beta composer environments describe --location=europe-west2 ${COMPOSER_SANDBOX_NAME} | grep -hnr "dagGcsPrefix")
    
    run:
             echo $(BUCKET)
    

    当然,这在很多方面都与您在上面尝试做的不同。所以也许它不符合你的要求,但你还没有真正说明那些是什么。

    【讨论】:

      【解决方案2】:

      请参阅下面的代码,这将帮助您提取名称

      define get_composer_bucket
          `gcloud beta composer environments describe --location=europe-west2 ${COMPOSER_SANDBOX_NAME} \
          | grep -hnr "dagGcsPrefix"`
      endef
      BUCKET:= $(call get_composer_bucket)
      run:
          @echo "BUCKET=> $(BUCKET)"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-02
        • 2012-02-23
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        相关资源
        最近更新 更多