Seu entendimento não está correto. Em a | b , a saída stdout do processo a conectado por meio de um pipe a stdin do processo b . O problema com o seu código é que, com um redirecionamento adicional de somefile para processar b , você usará dois métodos diferentes ao mesmo tempo para se conectar ao stdin do processo b . Não faça isso! A questão é; o que você tenta alcançar (com tal constructo) em primeiro lugar?