grep -rはデフォルトでどこを検索しますか?


16

パスを指定せずにgrepを使用して検索すると、grep -r 'mytext'無限に時間がかかるようになりました。一方、指定したパスで検索するとgrep -r 'mytext' .、すぐに必要なものが見つかります。だから、私は最初の形で、どのディレクトリでgrep検索をするのですか?

UDATE:grepバージョン:grep(GNU grep)2.10


3
を入力して、foomytextbar実行しgrep -r 'mytext'た後に(Enterを押して)書き込みます。
sr_

2
たぶん、あなたgrepはそれが何の王であるかを指定すべきです。GNU grepを使用すると、Linux grep -r 'mytext'で使用grep -r 'mytext' .し、同じことを行います。現在のディレクトリから再帰的に検索します。-rスイッチが使用されるとき、GNU grep STDINを検索しません
マナトワーク

2
あ。grep2.12でテストしました:pastebin.com/L4my26QSその間、バージョン2.11に関するニュースファイル(2012-03-02)でこれを見つけました: "ファイルオペランドが指定されておらず、コマンドライン-rまたは同等のオプションが指定されている場合、grepは現在作業ディレクトリを検索します。以前のgrepは-rを無視し、標準入力を非再帰的に検索しました。GREP_OPTIONSで見つかった-rにはこの新しい効果はありません。
マナトワーク

3
GNU grepは最近、-r引数を使用して動作を変更しました(コミットを参照)。したがって、新しいgrepを使用した「grep -r PATTERN」は、STDINではなく現在のディレクトリを検索します。
hluk

2
@Mikel、質問をgrepバージョンで更新しました。私が「古い」grepを使用しているため、正しいと指摘した答えは確かに正しいようです。-rを指定してもしなくても構いません。ディレクトリが指定されていない場合は、STDINで検索します。ところで、その調査のおかげで、今、私はgrepの将来の変更に気づくでしょう;)

回答:


24

実際には、どこも検索しません。標準入力からの入力を待ちます。

これを試して:

beast:~ viroos$ grep foo

「foo」を含む行を入力してEnterキーを押すと、この行が繰り返されます。そうしないと、カーソルは新しい行に移動しますが、grepは何も出力しません。


6
grep -r PATTERNでコメントしたように、GNU grepの新しいバージョンは標準入力を読み取らず、現在のディレクトリでパターンを検索します(commitを参照)。-rflag を指定するときにおそらく標準入力を検索したくないので、この変更は理にかなっています。
フルク

私はgrepのバージョンを確認しました。2.10なので、この答えは完全に関連しています。ところで、今、私はgrepの新しいバージョンから何を待つべきかを知っているでしょう。

3

Maciekによる以前の答えが正確に言うように:

実際には、どこも検索しません。標準入力からの入力を待ちます。

ただし、0番目の最初の記述子にデータをパイプすることで/ procを使用できる場合は、既に実行中のプログラムの標準入力に書き込むことができます。

1つのターミナルで実行

grep "hello"

そして、それが無期限に待つのを見てください...別の端末でこれを入力してください:

echo "hello $USER" > /proc/`pgrep grep`/fd/0

最初の端末がhelloとユーザー名を印刷するのを見てください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.