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