【发布时间】:2018-07-29 12:22:12
【问题描述】:
run:
cd ..; \
@echo $(shell pwd)
抛出这个:
/bin/sh: @echo: command not found
以下工作,并打印当前目录:
run:
@echo $(shell pwd)
你知道为什么吗?
【问题讨论】:
标签: linux bash makefile gnu-make
run:
cd ..; \
@echo $(shell pwd)
抛出这个:
/bin/sh: @echo: command not found
以下工作,并打印当前目录:
run:
@echo $(shell pwd)
你知道为什么吗?
【问题讨论】:
标签: linux bash makefile gnu-make
正如错误消息已经暗示的那样:
/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]
【讨论】:
make 运行哪些部分,哪些部分被传递到 shell。 $(shell pwd) 由 make 在整个 cd ..; echo /whatever 字符串传递给 sh 之前运行。
pwd的执行是要延迟的,所以它是由shell执行的,而不是make。