Parece que você está procurando por uma variante de pipes nomeados (fifos) criados com mkfifo
.
Então você pode fazer algo assim:
mkfifo my-pipe
node script.js < my-pipe &
Observe que bloqueará até que algo abra my-pipe para gravação. Então, se você quiser que o script.js seja capaz de abrir o arquivo (mas obviamente não leia nada dele), então você precisa abri-lo para escrever; uma maneira trivial é apenas redirecionar um sono para ele ( sleep 3650d > my-pipe &
). Isso também impedirá que o script.js receba um EOF (final de arquivo) até que você mate o sono (quando nada tiver um fifo aberto para gravação e todos os dados tiverem desaparecido, o lado da leitura obterá um EOF).
Agora, você pode fornecer mais linhas sempre que escrever para o my-pipe. Qualquer gravação que não busque (ou mmap, etc.) funcionará. Você poderia testar com echo 'DATA' > my-pipe
.
Então, juntos:
mkfifo my-pipe
node script.js < my-pipe &
sleep 3650d > my-pipe &
sleep_pid=$!
get-data-command > my-pipe # placeholder for real command to get data
get-data-command > my-pipe
# and so on, for more data.
kill $sleep_pid # kill the sleep, giving script.js an EOF.
Como indica o Wildcard, você pode querer que o script.js abra um soquete de escuta e aceite os dados dessa maneira. Você pode usar soquetes de domínio Unix se quiser evitar a necessidade de lidar com a autenticação como em um soquete TCP (porque os soquetes Unix usam permissões de arquivo).