/bin/sh: @echo: 命令未找到。

3
run:
    cd ..; \
    @echo $(shell pwd)

抛出此异常:
/bin/sh: @echo: command not found

下面的代码可以工作,并输出当前目录:

run:
    @echo $(shell pwd)

你知道为什么吗?


https://www.gnu.org/software/make/manual/make.html#Echoing - melpomene
1个回答

5

正如错误信息已经提示的那样:

/bin/sh: @echo: command not found

实际上找不到的命令是@echo,而不是echo。这个问题发生是因为你使用\转义换行符时,shell接收了下面的单行字符。

cd ..; @echo [output of pwd]

您可以在cd命令之前使用@
run:
    @cd ..; \
    echo $(shell pwd)

这样,shell 将会接收到以下行:

cd ..; echo [output of pwd]

谢谢:我会接受这个关于“命令未找到和@的问题。你知道为什么它不打印父目录 - 它只打印当前目录。 - Chris G.
你是什么意思? - JFMR
@ChrisG。看起来你对哪些部分是由make运行的,哪些部分是传递给shell的感到困惑。在整个cd ..; echo /whatever字符串传递给sh之前,$(shell pwd)是由make运行的。 - melpomene
echo $(shell pwd) 只会打印当前的起始目录,而不会向上 "cd .." 到父目录。 - Chris G.
2
基本上,必须延迟执行 pwd 命令,以便由 shell 执行,而不是由 make 执行。 - JFMR
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接