我想制作一个小脚本来节省一些打字,但遗憾的是我没有输出:
#!/bin/bash
grep -Hnr \"$1\" --include \"*cpp\" --include \"*h\" $2
我在echo
和不同的引号使用方面玩得很多,并且说服自己这条线真的扩展到了我想要的东西,但我实际获得任何输出的唯一方法就是:
#!/bin/bash
GREP="grep -Hnr \"$1\" --include \"*cpp\" --include \"*h\" $2"
echo $GREP | bash
示例用法是:
srcgrep "dynamic_cast" src
我在一个简单的示例目录中试过这个,以排除任何奇怪的链接,权限等。 所以,当然我可以使用第二种,但任何想法在第一种情况下出了什么问题?感谢。
$ grep -V
grep (GNU grep) 2.5.1
...
$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
...
答案 0 :(得分:3)
为什么不呢:
#!/bin/bash
grep -Hnr "$1" --include "*cpp" --include "*h" $2
答案 1 :(得分:2)
所以,GNU或其他人找到了一种方法,用完全不合适的选项来搞砸grep。真棒。他们真的应该考虑“做一件事,做得好”的UNIX哲学。 grep用于搜索文件中的文本,而不是用于查找文件。有一个非常好的命令,有一个明显的FINDing文件名称。
find "$2" -name '*cpp' -o -name '*h' -exec grep -Hnr "$1" {} \;
假设您发布的示例中的“$ 2”是目录名而不是文件名,因为您希望grep可以使用。