Ваша проблема в том, что вы не указали, что вам нужны однонаправленные трубы. На странице socat man объясняется, что в этом случае PIPE:
подобен эху.
Вероятно, произошло то, что когда вы впервые записали дату в fifo 1, ваш socat
прочитал ее, записал в fifo 2, затем заметил, что на fifo 2 есть вход, прочитал его и записал в fifo 1, и так далее, зацикливаясь, пока первый cat
на fifo 2 не успел опустошить его, прежде чем socat прочитал его. После этого первый cat
будет продолжать читать fifo, никогда не видя конца файла, и вы сможете продолжать записывать дату в fifo.
Вы можете увидеть это, если добавите опцию -v
в socat, чтобы показать i/o.
Добавление -u
для однонаправленного ввода-вывода делает то, что вы, вероятно, хотели, но теперь socat
выйдет после записи и чтения даты, так что вам понадобится цикл для этого:
while socat -v -u PIPE:/tmp/pipe1 PIPE:/tmp/pipe2; do echo new; done &
В вашей версии tar
вы можете поместить команду socat
внутрь скрипта /tmp/chvol
.
Если у вас есть настоящий ленточный накопитель, вы также можете рассмотреть решение с использованием nbd-server для экспорта блочного устройства по сети.