Este é um servidor de eco simples no Unix, usando nc:
mkfifo fifo
cat fifo | nc -k -l 4458 -v | cat >fifo
(com base nisso )
Como posso ver, o fluxo de dados funciona da seguinte maneira:
fifo (my named pipe)
|
| (using cat)
|
v
nc
|
| (using cat)
|
v
fifo
E aqui está a pergunta: por que isso não funciona?
nc -k -l 4458 -v >fifo <fifo
Você vai notar que se você tentar telnet
para localhost
em 4458
que você vai ter um "Conexão recusada" erro.
cat myfifo | nc -k -l 4458 > myfifo
também funciona. Se você usar um arquivo de texto, file.txt assim:nc -k -l 4458 < file.txt > file.txt
A primeira conexão será conectada e fechada (faz sentido porque a entrada foi truncada e o EOF fecha o soquete), a segunda conexão se tornará um servidor de eco esquecido: ecoará em todas as outras linhas e salve as linhas não especificadas no arquivo de texto.Respostas:
Isso ocorre porque o comando netcat ainda nem foi iniciado! O shell ao tentar abrir o fifo para entrada será bloqueado. Tentar
e você não verá nada. Em vez disso, use, por exemplo,
que abre o fifo para leitura e gravação como stdin e, em seguida, copia para stdout.
O rastreamento do comando bash completo mostra que nem a abertura para leitura nem gravação retorna (até que a abertura oposta seja concluída):
fonte