How to execute shell commands in Node.js?
Introduction
If you ever wanted to run system commands in Node.js? Obviously, the answer is a big “Yes”. If You want to reduce your workload then you have to automate stuff in your production environment. One way to use Bash script to automate things but what will happen if you are not good at Bash or Shell scripting.
With Nodejs, You can execute shell commands and then process their output using javascript. Nodejs provides diffent APIs for doing these operations and there are lot of npm modules to ease the pain creating shell or terminal based CLI’s using Node.js.
In this article, we will go through various ways to execute shell commands in Node.js.
Let’s have a look.
The child_process Module:
As we know, Node.js runs in a single thread. Although You can, take advantage of multiple processes.
child_process module allows us to create child processes in Nodejs. These processes can communicate with each other using a built-in communication channel.
There are 4 different ways to create a child process in Node.
- exec
- spawn
- fork
- execFile
The exec function
The exec() function creates a new shell and buffers the execution output in memory which can be accessible in the callback function.
The syntax of exec fuction is:
child_process.exec(command[, options][, callback])
Let’s play with exec function to list out all the stuff present in the current directory.
const { exec } = require('child_process'); exec('ls -lrt', (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`stdout: ${stdout}`); console.error(`stderr: ${stderr}`); });
To use child_process module we need to import via require() function call. Next, we call the exec()
function with two parameters:
- A string of command to run, with space-separated arguments.
- A callback function with three parameters: error, stdout and stderr
The shell command we are running is ls -lrt, which lists out all the files and folders in our current directory line by line. The callback function logs whether we got an error while trying to execute the command or output on the shell’s stdout or stderr streams.
Note: Never pass unsanitized user input to this function. Any input containing shell metacharacters may be used to trigger arbitrary command execution
If you execute the above code snippet then you will get output as following.
$ node demo.js stdout: total 120 drwxr-xr-x 5 topcode staff 160 4 May 12:30 public drwxr-xr-x 5 topcode staff 160 4 May 12:30 views drwxr-xr-x 3 topcode staff 96 4 May 12:30 bin -rw-r--r-- 1 topcode staff 330 4 May 12:31 package.json drwxr-xr-x 4 topcode staff 128 4 May 12:32 routes -rw-r--r-- 1 topcode staff 1071 4 May 12:33 app.js drwxr-xr-x 143 topcode staff 4576 4 May 12:33 node_modules -rw-r--r-- 1 topcode staff 41149 4 May 12:33 package-lock.json -rw-r--r-- 1 topcode staff 691 4 May 12:58 collector.js -rw-r--r-- 1 topcode staff 239 9 May 11:49 demo.js stderr:
That is how can we use exec() function to run a system command in Node.js. Similar to exec() function there are spawn(), execFile(), fork() also do the same thing.
If you want to learn more about the functions then please complete documentation here
If you want to use, third-party npm modules, then check out:
Now you can do shell scripting in Node.js as well. Let me know which application you want to build by using this utilities. Thanks for reading😊
#Happy Coding #topcode #topcode.in
#child_process in nodejs #child process nodejs # child process module in node.js #execute shell commands in node.js #execute system call in node.js #nodejs child_process module #node.js childprocess module #node.js child_process module #child_process APIs #node.js child_process explained #node.js child_process #nodejs child_process #child process in node.js #exec function node.js #spawn in node.js #nodejs exec function #execute shell commands in javascript #execute system commands in node.js #nodejs shell command module #node.js execute #Executing Shell Commands with Node.js #How To Execute Shell Command in Nodejs #How To Execute Shell Command in Node.js #execute command using child process #How to run shell script file or command using Nodejs #How to run shell script file or command using Node.js #run shell command node.js #run shell script node.js
May 11, 2021 at 2:28 pm |
[…] per shown in example code, We have replaced the actual function definition of child_process.exec() to our own version of child_process.exec(). In the modified version of exec() method call, We have […]
June 25, 2021 at 11:07 am |
[…] other ways to delete folders in Node.js one common way is to use a system command. Node.js provides child_process module to execute shell commands. It is not advisable to use child_process module which does a […]