|
é o operador para interconectar dois comandos.
cmd1 | cmd2
Inicia cmd1
e cmd2
em paralelo com o stdout de cmd1
conectado à extremidade de gravação de um pipe e o stdin de cmd2
conectado à extremidade de leitura do mesmo pipe.
Em:
cmd1 |
Você está sentindo falta do comando à direita.
O shell informa que, ao emitir o prompt secundário ( PS2
, por padrão, >
), solicitará o restante do seu comando.
Se você quisesse que o stdout de echo
fosse o fim de um pipe, e seu stdin fosse o final de leitura daquele mesmo pipe (mas observe que echo
não leu seu stdin), você precisaria usar um shell como yash
que tem um operador para isso (o operador de redirecionamento de pipeline >>|
):
echo test 1>>|0
Isso diz ao yash
para criar um pipe e atribuir o final da escrita a fd 1 (stdout) e o final da leitura a fd 0 (stdin).
Mais uma vez, isso faz pouco sentido.