目标特定变量 - 找不到命令错误 - 生成文件



引用文档,写在下面 目标特定变量LOGIN_COMMAND.

想法是仅在用户运行时分配此变量make target1


在以下Makefile

target1 : LOGIN_COMMAND := $(shell aws ecr get-login --no-include-email | sed 's|https://||')
target1:
$(shell LOGIN_COMMAND)
$(shell ls)

make target1给出以下错误:

make: LOGIN_COMMAND: Command not found

如何解决此错误?

我不明白为什么每个人都总是在食谱中使用$(shell ...)。 是否有某种损坏的操作方法推荐这个? 它无处不在,我从未见过任何这样做的示例 makefile(这是正确的,因为这真的不是一个好主意(。

无论如何。 当您添加$(shell LOGIN_COMMAND)时,它有什么作用? 它启动一个 shell 并告诉 shell 运行字符串LOGIN_COMMAND。 这不是shell知道的命令,因此它会给您错误"找不到命令"。 尝试在 shell 提示符下键入字符串LOGIN_COMMAND:这是一回事。

大概你的意思是变量LOGIN_COMMAND的内容。 为此,您需要将其编写为$(LOGIN_COMMAND)以便知道它是一个变量引用而不是字符串。

但是在配方中使用$(shell ...)是多余的和令人困惑的,因为配方已经是一个 shell 脚本。

另外,你根本不清楚你真正想做什么。 您是否正在尝试在本地系统上运行ls命令? 或者您是否正在尝试在某处的某个远程系统上运行它?

您想如何处理aws ecr get-login ... | sed ...操作的输出?

在尝试编写生成文件之前,请确保可以在 shell 提示符下执行要执行的操作。

根据您的评论,下一个可能的解决方案是:

target1:
aws ecr get-login --no-include-email | sed 's|https://||' | sh

请注意尾随sh

另一种解决方案是创建一个临时文件并运行它:

AWSSH=output.sh
${AWSSH}:
aws ecr get-login --no-include-email | sed 's|https://||' > $@
chmod +x $@
target1: ${AWSSH}
./${AWSSH}
rm -f ${AWSSH}

相关内容

最新更新