Search code examples
javascriptnode.jsbashnamed-pipesraspbian

Message between bash and JavaScript via named pipes


I have a JavaScript application that needs to start a Linux application.

Since I did not find any way to start the application and get when it ends, I made a bash script which launches the application, and sends a message via a named pipe when the app closes.

Until here, all's good, but I can't find a way to catch this message in the JavaScript.

Did someone know how to get the message in the JavaScript?

I did search, but I only found how to do this in C# and C++.

Sample from the JavaScript:

var test = spawn('sh', ['home/pi/play.sh', data.video_id]);

Just spawn a bash command which starts the script with the name of the video

Sample from the bash:

mkfifo btjpipe
if pgrep omxplayer
then
    echo "AR">btjpipe
else
    clear
    omxplayer $1 > dev/null
    echo "VE">btjpipe

Created the pipe, seeking if the player is already running, then either send AR ("Already Running") or start the player and send VE ("Video End").


Solution

  • use child_process module and child.stdout to pipe the output where you want

    var spawn = require('child_process').spawn;
    var test = spawn('sh', ['home/pi/play.sh', data.video_id]);
    
    
    test.stdin.pipe(process.stdin);
    test.stdout.pipe(process.stdout);
    test.stderr.pipe(process.stderr);
    

    on this case to the current process

    Maybe you can also trying using "exec" instead of spawn, you will get the output in the callback function.