2013-07-16 34 views
0

这种方法找不到我指定的文件我想要makefile shell grep找不到我试图指定的文件

SHELL = /bin/bash 
PKG_NAME = test 
PKG_VERSION := $(shell grep -i '^version' $(PKG_NAME)/DESCRIPTION | cut -d ':' -f2 | cut -d ' ' -f2) 

在shell本身中,grep -i '^version' test/DESCRIPTION | cut -d ':' -f2 | cut -d ' ' -f2确实成功返回了该版本,例如, 0.4-7

但是,通过Makefile返回运行:

grep: test: Is a directory 
grep: /DESCRIPTION: No such file or directory 

test是一个目录,这是真的,但test/DESCRIPTION确实存在,所以我猜$(PKG_NAME)/DESCRIPTION是不汇编文件名的正确方法。

对此提出建议?谢谢。

回答

1

该错误表明grep将test/DESCRIPTION看作两个单独的参数。 PKG_NAME分配线上是否有额外的空格或$(shell ...)行中的$(PKG_NAME)/DESCRIPTION之间的错误空格?

作为一般规则,您可能希望开始在shell命令(即'$(PKG_NAME)/DESCRIPTION')的参数周围加上引号以防止出现这种类型的分词问题(尽管没有空格,您通常不会遇到这种问题)。

+0

我明白了你对2个独立论点的观点。听起来好像它并不是把这两块粘在一起。但是,没有多余的空格,并且更改为“$(PKG_NAME)/ DESCRIPTION”会导致相同的错误。 –

+0

它不可能给出同样的错误。它可能说'grep:'测试:是一个目录和'grep:/说明':没有这样的文件或目录'或类似的东西?你确定你正在运行正确的makefile吗?如果将SHELL设置为'bash -x',你会得到什么? –

+0

使用'$(PKG_NAME)/ DESCRIPTION'给出:'grep:test/DESCRIPTION:没有这样的文件或目录,并且在测试和/之间似乎有一个空格。使用$(PKG_NAME)/ DESCRIPTION给出:'grep:test:是一个目录 grep:/描述:在单独的行上没有这样的文件或目录;将shell设置为'bash -x'似乎没有改变任何东西。肯定似乎在那里看到一个空间,但我确定没有看到它,或理解它。 –