No Linux, você pode fazer:
read x < /dev/fd/1 | program > output
No Linux, abrir / dev / fd / x onde x é um descritor de arquivo para a extremidade de gravação de um pipe, você obtém o final de leitura do pipe, portanto, aqui é o mesmo que no stdin do programa. Então, basicamente, read
nunca retornará, porque a única coisa que pode gravar nesse pipe é ela mesma, e read
não produz nada.
Ele também funciona no FreeBSD ou no Solaris, mas por outro motivo. Lá, a abertura de / dev / fd / 1 fornece o mesmo recurso que o fd1 aberto como seria de esperar, e como a maioria dos sistemas, exceto o Linux, faz, portanto, o fim da escrita do pipe. No entanto, no FreeBSD e no Solaris, os pipes são bidirecionais. Portanto, contanto que program
não grave em seu stdin (nenhum aplicativo o faz), read
não obterá nada para ler a partir daquela direção do pipe.
Em sistemas nos quais os pipes não são bidirecionais, read
provavelmente falhará com um erro ao tentar ler de um descritor de arquivo somente de gravação. Observe também que nem todos os sistemas têm /dev/fd/x
.