¿Dónde busca grep -r por defecto?

16

Encontré si busco usando grep sin especificar una ruta, como grep -r 'mytext'si tomara infinitamente largo. Mientras tanto, si busco con la ruta especificada grep -r 'mytext' ., instantáneamente encuentra lo que necesito. Entonces, tengo curiosidad, en primera forma, ¿en qué directorio busca grep?

UDATE: versión grep: grep (GNU grep) 2.10


fuente
3
Intente escribir, escribir foomytextbar(seguido de Enter) después de ejecutar grep -r 'mytext'.
Sr_
2
Tal vez deberías especificar de qué rey grepes eso. Con el GNU grepque uso en Linux grep -r 'mytext'y hago grep -r 'mytext' .lo mismo: busca de forma recursiva comenzando desde el directorio actual. Cuando -rse usa el interruptor, GNU grep no busca STDIN.
manatwork
2
Ah Probé con grep2.12: pastebin.com/L4my26QS Mientras tanto, encontré esto en el archivo NEWS con respecto a la versión 2.11 (02/03/2012): "Si no se proporciona ningún operando de archivo, y se proporciona una línea de comando -r o una opción equivalente , grep ahora busca en el directorio de trabajo. Anteriormente, grep ignoraba el -r y buscaba la entrada estándar de forma no recurrente. Un -r encontrado en GREP_OPTIONS no tiene este nuevo efecto ".
manatwork
3
GNU grep cambió recientemente el comportamiento con el argumento -r (vea el commit ). Entonces "grep -r PATTERN" con grep más nuevo buscará el directorio actual y no STDIN.
hluk
2
@Mikel, actualicé mi pregunta con una versión grep. Parece que la respuesta que señalé como correcta es realmente correcta, porque estoy usando un grep 'viejo'. Por lo tanto, no importa si especifico -r o no, si no se proporciona ningún directorio, busca en STDIN. Por cierto, gracias por esa investigación, ahora, estaré al tanto de futuros cambios en grep;)

Respuestas:

24

En realidad no busca en ningún lado. Espera entrada de entrada estándar.

Prueba esto:

beast:~ viroos$ grep foo

cuando escribe una línea que contiene "foo" y presiona enter, esta línea se repetirá; de lo contrario, el cursor se moverá a una nueva línea, pero grep no imprimirá nada.

Maciek Sawicki
fuente
66
Como comenté anteriormente grep -r PATTERNcon la versión más nueva de GNU grep no leerá la entrada estándar sino que buscará el patrón en el directorio actual (vea el commit ). Este cambio tiene sentido ya que probablemente no desee buscar entradas estándar cuando especifique el -rindicador.
hluk
Revisé mi versión grep, es 2.10, por lo que esta respuesta es perfectamente relevante. Por cierto, ahora sabré qué esperar de las nuevas versiones de grep.
3

Exactamente como dice la respuesta anterior de Maciek:

En realidad no busca en ningún lado. Espera entrada de entrada estándar.

Sin embargo, puede escribir en el stdin de un programa que ya se está ejecutando si tiene / proc disponible ingresando datos en su primer descriptor:

En una carrera de terminal

grep "hello"

y verlo esperar indefinidamente ... En otro terminal escriba esto:

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

vea el primer terminal imprima hola y su nombre de usuario.

Philluminati
fuente