Seu problema é que você não especificou que deseja pipes unidirecionais. A página de manual explica como, neste caso, PIPE:
é como um eco.
O que provavelmente aconteceu foi que quando você escreveu a data no fifo 1, seu socat
leu, escreveu para o fifo 2, então percebeu que havia entrada no fifo 2, então leia e escreva para o fifo 1, e assim por diante ocupado loop até que o primeiro cat
no fifo 2 conseguiu esvaziá-lo antes de socat lê-lo. Depois disso, este primeiro cat
continuará lendo o fifo, nunca vendo um fim de arquivo, e você pode continuar escrevendo a data no fifo.
Você pode ver isso se adicionar a opção -v
para socat mostrar o i / o.
Adicionar -u
para a E / S unidirecional torna o que você provavelmente queria, mas agora o socat
sairá depois que a data for gravada e lida, então você precisará de um loop para ele:
while socat -v -u PIPE:/tmp/pipe1 PIPE:/tmp/pipe2; do echo new; done &
Com a sua versão tar
você pode colocar o comando socat
dentro do script /tmp/chvol
.
Se você tiver uma unidade de fita real, também poderá procurar uma solução usando nbd-server para exportar um dispositivo de bloco a rede.