【问题标题】:/bin/sh: @echo: command not found/bin/sh: @echo: 找不到命令
【发布时间】: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


【解决方案1】:

正如错误消息已经暗示的那样:

/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]

【讨论】:

  • 谢谢:对于“找不到命令和@”,我会接受这一点。你知道它为什么不打印父目录 - 它只打印当前目录。
  • 什么意思?
  • @ChrisG。看起来您很困惑 make 运行哪些部分,哪些部分被传递到 shell。 $(shell pwd) 由 make 在整个 cd ..; echo /whatever 字符串传递给 sh 之前运行。
  • echo $(shell pwd) 只打印当前的起始目录,而不是“cd ..”到父目录。
  • 基本上pwd的执行是要延迟的,所以它是由shell执行的,而不是make。
猜你喜欢
  • 2021-11-13
  • 2019-04-19
  • 2013-05-16
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多