1

入力を節約するために小さなスクリプトを作成したかったのですが、残念ながら出力が得られません。

#!/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

リンクやアクセス許可などで奇妙なものを除外するために、単純なサンプルディレクトリでこれを試しました。したがって、もちろん、2番目のものを使用できますが、最初のケースで何が問題なのか分かりますか? ありがとう。

$ grep -V
grep (GNU grep) 2.5.1
...

$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
...
4

2 に答える 2

3

それだけではない理由:

#!/bin/bash
grep  -Hnr "$1" --include "*cpp" --include "*h" $2

?

于 2012-12-13T14:51:39.870 に答える
2

それで、GNU か誰かが、完全に不適切なオプションで grep を台無しにする方法を見つけました。素晴らしい。彼らは、「1 つのことをしっかりと行う」という UNIX の哲学を考慮する必要がありました。grep はファイル内のテキストを検索するためのものであり、ファイルを見つけるためのものではありません。ファイルを検索するためのやや明白な名前を持つ完全に優れたコマンドがあります。

find "$2" -name '*cpp' -o -name '*h' -exec grep -Hnr "$1" {} \;

投稿された例の「$2」は、grepが機能すると予想されるファイル名ではなくディレクトリ名であると想定します。

于 2012-12-13T15:27:04.590 に答える