![将命令结果放入 makefile 目标中的变量中](https://linux22.com/image/74267/%E5%B0%86%E5%91%BD%E4%BB%A4%E7%BB%93%E6%9E%9C%E6%94%BE%E5%85%A5%20makefile%20%E7%9B%AE%E6%A0%87%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F%E4%B8%AD.png)
我正在尝试在 tomcat webapp 中安装一些东西。这是我的目标的开始install
:
tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"`
echo "Tomcat: $tomcat"
# If the string is empty (no path matched) or the path does not exists (that should never really happen)
# terminate
if [ -z "$tomcat" ] || [ ! -f "$tomcat" ]; then
echo "Application not found on filesystem."
exit 404
fi
然而,这是输出:
tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html -l 1 | tr -d "\n"`
/bin/sh: 1: Syntax error: Unterminated quoted string
makefile:77: recipe for target 'install' failed
make: *** [install] Error 2
其他人都声称您可以使用`
(反引号)将命令stdout
输出分配给变量。我什至曾经tr -d "\n"
删除所有换行符,也许它们会出现。并且代码在 shell 中完美运行:
XXXXX@debianvirtualbox:~$ tomcat=`locate --regex "^(/var/lib/tomcat[0-9]{1,2}/webapps/[^/]+/)AppName\.html$" -l 1 | tr -d "\n"`
XXXXX@debianvirtualbox:~$ echo $tomcat
/var/lib/tomcat8/webapps/websight/AppName.html
还有什么需要修复的吗?
答案1
$
符号在 makefile 中因引起麻烦而臭名昭著,因为它们被解释为变量标记。这里只需将第一行中的值加倍就可以了:
AppName\.html$$"
还可以看看其他帖子了解有关 makefile 转义问题的更多信息。