Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Using exec to Run Shell Commands in Node.js
📖 Scenario: You are building a simple Node.js script that runs a shell command to list files in a folder. This is useful when you want your program to interact with the system shell to get information or run tools.
🎯 Goal: Create a Node.js script that uses exec from the child_process module to run the ls -l command and handle its output.
📋 What You'll Learn
Import the exec function from the child_process module
Create a variable command with the exact string ls -l
Use exec to run the command variable
Handle the callback to print the command output or error
💡 Why This Matters
🌍 Real World
Running shell commands from Node.js scripts helps automate system tasks, gather system info, or run external tools.
💼 Career
Many backend developers use exec to integrate system commands or scripts into their Node.js applications.
Progress0 / 4 steps
1
Import exec from child_process
Write a line to import exec from the child_process module using destructuring assignment.
Node.js
Hint
Use const { exec } = require('child_process'); to import exec.
2
Create the command variable
Create a variable called command and set it to the string 'ls -l'.
Node.js
Hint
Use const command = 'ls -l'; to store the shell command.
3
Run the command with exec
Use exec to run the command variable. Provide a callback with parameters error, stdout, and stderr.
Node.js
Hint
Call exec(command, (error, stdout, stderr) => { ... }) to run the command.
4
Handle output and errors
Inside the exec callback, add code to check if error exists. If yes, return early. Otherwise, log stdout to the console.
Node.js
Hint
Use if (error) { return; } to stop on error, then console.log(stdout); to show output.
Practice
(1/5)
1. What does the exec function in Node.js primarily do?
easy
A. Runs shell commands from within a Node.js program
B. Creates a new HTTP server
C. Reads files from the filesystem
D. Starts a database connection
Solution
Step 1: Understand the purpose of exec
The exec function is designed to run shell commands from Node.js code.
Step 2: Compare with other options
Creating servers, reading files, or database connections are unrelated to exec.
Final Answer:
Runs shell commands from within a Node.js program -> Option A
Quick Check:
exec runs shell commands = B [OK]
Hint: Remember exec runs shell commands, not servers or files [OK]
Common Mistakes:
Confusing exec with file reading functions
Thinking exec creates servers
Assuming exec manages databases
2. Which is the correct way to import and use exec from the child_process module in Node.js?
easy
A. import exec from 'child_process';
B. const exec = require('child_process').exec;
C. const exec = require('exec');
D. import { exec } from 'child_process';
Solution
Step 1: Recall Node.js import syntax for exec
In Node.js CommonJS, exec is imported as const exec = require('child_process').exec;.
Step 2: Check other options for correctness
import exec from 'child_process'; uses ES module default import incorrectly; const exec = require('exec'); tries to require a non-existent module; import { exec } from 'child_process'; is ES module named import but Node.js needs special config.
Final Answer:
const exec = require('child_process').exec; -> Option B
Quick Check:
CommonJS import for exec = A [OK]
Hint: Use require('child_process').exec for standard Node.js [OK]
Common Mistakes:
Using import without Node.js ES module setup
Requiring wrong module name
Confusing default and named imports
3. What will the following Node.js code output if the current directory contains a file named test.txt?
C. Missing error return causes stdout to print even on error
D. exec is not imported correctly
Solution
Step 1: Check error handling logic
The code logs error but does not return or stop, so stdout logs even if error occurs.
Step 2: Understand impact of missing return
This can cause confusing output mixing error and stdout, which is not ideal.
Final Answer:
Missing error return causes stdout to print even on error -> Option C
Quick Check:
Missing error return causes stdout to print even on error = D [OK]
Hint: Return after error to avoid printing stdout [OK]
Common Mistakes:
Not returning after error check
Assuming exec import is wrong
Thinking command syntax is incorrect
5. You want to run a shell command that lists all files but only print those containing the word 'log'. Which exec usage correctly achieves this in Node.js?
hard
A. exec('ls > grep log', (err, stdout) => { if (!err) console.log(stdout); });
B. exec('ls && grep log', (err, stdout) => { if (!err) console.log(stdout); });
C. exec('ls | find log', (err, stdout) => { if (!err) console.log(stdout); });
D. exec('ls | grep log', (err, stdout) => { if (!err) console.log(stdout); });
Solution
Step 1: Understand shell command chaining
The pipe | sends output of ls to grep log to filter lines containing 'log'.
Step 2: Evaluate each option's command
ls | grep log correctly pipes output to grep for filtering; ls > grep log uses redirection to create a file; ls && grep log runs sequentially without piping; ls | find log pipes to filesystem search tool unsuitable for text filtering.
Final Answer:
exec('ls | grep log', (err, stdout) => { if (!err) console.log(stdout); }); -> Option D
Quick Check:
Pipe output to grep for filtering = C [OK]
Hint: Use pipe (|) to filter command output with grep [OK]