我试图编写一个Makefile
规则,该规则可以检测git
存储库中的文件是否已被添加,删除或更改。如果文件名有括号,我目前无法工作。这显示了问题。在Makefile中处理带圆括号的文件名
$ git init .
Initialized empty Git repository in /home/stephen/w/stack1/.git/
$ cat Makefile
status:
$(eval STATUS = $(shell git diff-files))
echo STATUS
echo $(STATUS)
echo END STATUS
$ git diff-files
$ echo foo > "(a)"
$ git add "(a)"
$ echo bar >>"(a)"
$ git diff-files
:100644 100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0000000000000000000000000000000000000000 M (a)
$ make status
echo STATUS
STATUS
echo :100644 100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0000000000000000000000000000000000000000 M (a)
/bin/sh: 1: Syntax error: "(" unexpected
make: *** [status] Error 2
它看起来像是将括号解释为shell指令而不是文件名的一部分。有没有办法解决这个问题?
使用单引号而不是双引号可能会有所帮助。 –
不是。我只是试了一下。问题在于'Makefile'中的git,Makefile中没有任何引号。 这是我想用一个带有括号的文件名的现有回购做的事情。我刚把它简化为一个简单的测试用例。 –
只是出于好奇。为什么你会在他们的名字中使用括号的源文件? –