cat <> myfifo
abre o pipe nomeado para leitura e gravação. Enquanto o pipe estiver aberto para gravação, o leitor não alcançará o final do arquivo. Portanto, cat
nunca atinge o final de sua entrada, portanto, ela nunca fecha sua saída, que é o canal para grep
, portanto, grep
nunca atinge o final da entrada para a opção -f
.
O grep não pode começar a pesquisar até saber qual padrão pesquisar. Então, ele permanece bloqueado para sempre, mesmo sem começar a ler numbers.txt
.
Se você quiser pesquisar os padrões que chegam por myfifo
, use
grep -f myfifo numbers.txt
Você também pode escrever cat <myfifo | grep -f - numbers.txt
, mas isso é desnecessariamente complicado.
Observe que um padrão como 1
corresponde a qualquer linha contendo 1
, como 11 eleven
. Se você quiser combinar apenas as linhas que começam com um dos números que passam pelo canal, use algo como
<myfifo sed 's/^0*/^0*/; s/$/ /' | grep -f - numbers.txt