Eu tenho um fifo criado mkfifo
em um shell, aberto no modo rw com exec 3<>fifo
.
Quando executo sed 1q <&3
e escrevo uma linha no fifo em outro shell, o sed não imprime a linha até que eu escreva outra linha no fifo. Por que isso acontece? (Isso não ocorre com head -n1
)
Você pode replicar isso em uma sessão de shell com, por exemplo
Você verá a linha de saída solitária aparecer somente após o atraso.
O que provavelmente acontece é que a implementação do Busybox continua lendo antes de processar a primeira linha para determinar se o
$
especificador de endereço (última linha) deve corresponder. Antes que o tubo feche ou veja uma segunda linha aparecer, ele não consegue determinar qual caminho$
deve ser resolvido.Isso não acontece com todos os seds, por exemplo, GNU sed e o sed no meu Mac imprimem a primeira linha imediatamente. O que eles podem fazer, já que o script não usa
$
, então todas as informações necessárias já estão lá. Se você alterar o script para algo usando$
, por exemploeles também têm que esperar para obter a segunda linha.
Presumivelmente, o Busybox está apenas sendo mais simples e espera de qualquer maneira, sem se preocupar em verificar se
$
é usado.