Gdzie domyślnie wyszukiwarka grep -r?

16

Odkryłem, że szukam za pomocą grep bez określania ścieżki, jakby grep -r 'mytext'trwało to nieskończenie długo. Tymczasem jeśli szukam z podaną ścieżką, grep -r 'mytext' .to natychmiast znajdzie to, czego potrzebuję. Więc jestem ciekawy, w pierwszej formie, w którym katalogu grep szuka?

UDATE: wersja grep: grep (GNU grep) 2.10


źródło
3
Spróbuj pisać dalej, foomytextbarpo uruchomieniu wpisz (a następnie Enter) grep -r 'mytext'.
sr_
2
Może powinieneś sprecyzować, kim grepjest ten król . Z GNU grepużywam w systemie Linux grep -r 'mytext'i grep -r 'mytext' .robi to samo: przeszukuj rekurencyjnie, zaczynając od bieżącego katalogu. Gdy -rużywany jest przełącznik, GNU grep nie przeszukuje STDIN.
manatwork
2
Ach Testowałem z grep2.12: pastebin.com/L4my26QS W międzyczasie znalazłem to w pliku NEWS dotyczącym wersji 2.11 (2012-03-02): „Jeśli nie podano argumentu pliku i podano wiersz polecenia -r lub równoważną opcję , grep przeszukuje teraz katalog roboczy. Poprzednio grep zignorował -r i przeszukał standardowe wejście nierekurencyjnie. -r znalezione w GREP_OPTIONS nie ma tego nowego efektu. "
manatwork
3
GNU grep ostatnio zmienił zachowanie za pomocą argumentu -r (zobacz zatwierdzenie ). Zatem „grep -r WZORZEC” z nowszym grep przeszuka bieżący katalog, a nie STDIN.
hluk
2
@Mikel, zaktualizowałem moje pytanie wersją grep. Wygląda na to, że odpowiedź, którą wskazałem jako poprawną, jest rzeczywiście poprawna, ponieważ używam „starego” grepa. Więc nie ma znaczenia, czy podam -r, czy nie, jeśli nie podano katalogu, przeszukuje STDIN. Btw, dzięki za to śledztwo, teraz będę świadomy przyszłych zmian w grep;)

Odpowiedzi:

24

Właściwie nigdzie nie szuka. Oczekuje na wejście ze standardowego wejścia.

Spróbuj tego:

beast:~ viroos$ grep foo

kiedy wpiszesz wiersz zawierający „foo” i naciśniesz Enter, linia ta zostanie powtórzona, w przeciwnym razie kursor zostanie przeniesiony do nowej linii, ale grep nic nie wydrukuje.

Maciek Sawicki
źródło
6
Jak skomentowałem powyżej, grep -r PATTERNnowsza wersja GNU grep nie będzie czytać standardowego wejścia, ale szuka wzorca w bieżącym katalogu (zobacz zatwierdzenie ). Ta zmiana ma sens, ponieważ prawdopodobnie nie chcesz przeszukiwać standardowych danych wejściowych po określeniu -rflagi.
hluk
Sprawdziłem moją wersję grepa, to 2.10, więc ta odpowiedź jest całkowicie trafna. Btw, teraz będę wiedział, na co czekać z nowszymi wersjami grep.
3

Dokładnie tak jak poprzednia odpowiedź Maćka:

Właściwie nigdzie nie szuka. Oczekuje na wejście ze standardowego wejścia.

Jednak możesz napisać do standardowego już działającego programu, jeśli masz / proc dostępny przez przesłanie danych do jego pierwszego deskryptora:

W jednym uruchomieniu terminalu

grep "hello"

i zobacz, jak czeka bez końca ... W innym terminalu wpisz:

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

zobacz pierwszy terminal wydrukuj cześć i swoją nazwę użytkownika.

Philluminati
źródło