Pourquoi le «mot-clé grep» oblige-t-il le terminal à rester indéfiniment?

25

Lorsque je tape "grep doc" dans le terminal, il ne fait rien, empêchant le terminal de faire autre chose avant que j'échappe en utilisant Ctrl+ Cou Z.

Je sais que ce n'est pas comme ça que je suis censé utiliser grep, mais juste curieux de savoir pourquoi cela se produit.

Mars3avril4
la source

Réponses:

40

grep recherche par défaut l'entrée standard si aucun fichier n'est fourni:

grep recherche les FICHIERS d'entrée nommés (ou l'entrée standard si aucun fichier n'est nommé, ou si un seul trait d'union moins (-) est donné comme nom de fichier) pour les lignes contenant une correspondance avec le MOTIF donné. Par défaut, grep imprime les lignes correspondantes.

Si vous faites juste grep docgrep s'attend à ce que l'entrée standard vienne chercher à l'intérieur (n'entrez pas de parties entre <et >dans le terminal, ce sont des commentaires):

$ grep doc
a b c <PRESS ENTER HERE>
doc <NO MATCH WAS FOUND IN PREVIOUS LINE, TYPE doc AND PRESS ENTER AGAIN>
doc <MATCH WAS FOUND>
Arkadiusz Drabczyk
la source
6
OP peut également appuyer sur Ctrl + D sur une ligne seule pour mettre fin à la "session" grep.
Kevin
2
Bonne réponse. Je voulais juste noter que presque personne n'a jamais besoin d'utiliser grep en tapant comme ça, mais cela vous permet de diriger la sortie standard d'une commande précédente, ce qui est très utile.
Karl Bielefeldt
20
@KarlBielefeldt: C'est en fait un moyen pratique de déboguer des expressions rationnelles compliquées. Vous pouvez exécuter quelque chose comme grep '([a-z]+[0-9]*.x){2,3}'et taper un tas d'exemples de lignes sur votre clavier pour vous assurer qu'il correspond à ce que vous pensez qu'il fait. Les lignes qui correspondent seront répercutées, les lignes qui ne le seront pas.
Nate Eldredge
1
@NateEldredge: Merci d'avoir donné un exemple pratique pour cela! J'avais toujours considéré les invocations null-arg de choses comme grep et cat comme étant principalement théoriques.
labyrinthe
1
@labyrinth Ils ne sont pas théoriques du tout, ils sont tout le temps utilisés pour la tuyauterie, par exemplesomecommand | grep foo
Barmar
14

grep attend une entrée.

De man grep:

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
UN B
la source