我是makefile的新手,很难使用findstring查找。 这是我的代码:
ZSHRC="$HOME/.zshrc"
install:
ifneq($(findstring "CADANSE",$(ZSHRC) a),)
@echo "done $(a)"
endif
无论我何时移动逗号,我都会最经常出错:
意外令牌','附近的语法错误
我确保我的选项卡上有4个适当的空格,并尝试了一些教程来使其正常运行,但无济于事。
我需要检查字符串BEGIN.CADANSE是否在.zshrc中,因为它会加载额外的shell方法。我正在尝试为此安装程序,makefile不是强制性的,但我需要对其进行调查。
谢谢您的帮助。
OS是最新的MacOSX,外壳是oh-my-zsh。
要解决我的问题,我现在要通过补丁而不是grep:
installcadanse: docs
@cat ~/.zshrc lib/Cadanse/template/dot-rc | diff -u ~/.zshrc - > PATCH_CADANSE ; patch ~/.zshrc PATCH_CADANSE
@source ~/.zshrc ; echo "Cadanse should be installed in your shell. Please check ~/.zshrc for mentions of Cadanse."
答案 0 :(得分:0)
Zeroth,“ 我的制表符是4个适当的空格”是什么意思?规则的操作部分必须由选项卡缩进。不是4个空格,不是8个空格,而是一个文字制表符。
首先,与规则关联的命令被传递到外壳程序(在变量扩展之后)。如果要测试操作中的条件,则必须为此编写一个shell命令,而不是make命令。
第二,findstring
执行简单的子字符串搜索。它不会打开任何文件或读取其内容。
第三,我很确定"$HOME/.zshrc"
的含义是"${H}OME/.zshrc"
(即它将查找名为H
的变量)。另外,这些引号实际上是采用的。
要在Shell脚本中搜索文件中给定的字符串,可以使用grep
:
.PHONY: install
install:
@if grep -q CADANSE ~/.zshrc; then \
echo done; \
fi