आवश्यकताएँ
इसके लिए Node.js 7 या बाद में Promises और Async / Await के समर्थन की आवश्यकता होगी।
उपाय
एक आवरण फ़ंक्शन बनाएं जो child_process.exec
कमांड के व्यवहार को नियंत्रित करने का वादा करता है ।
व्याख्या
वादों और एक अतुल्यकालिक फ़ंक्शन का उपयोग करके, आप कॉलबैक नरक में और एक सुंदर स्वच्छ एपीआई के साथ गिरने के बिना, आउटपुट को वापस करने वाले शेल के व्यवहार की नकल कर सकते हैं। await
कीवर्ड का उपयोग करके , आप एक स्क्रिप्ट बना सकते हैं जो आसानी से पढ़ती है, जबकि अभी भी काम child_process.exec
पूरा करने में सक्षम है।
कोड नमूना
const childProcess = require("child_process");
/**
* @param {string} command A shell command to execute
* @return {Promise<string>} A promise that resolve to the output of the shell command, or an error
* @example const output = await execute("ls -alh");
*/
function execute(command) {
/**
* @param {Function} resolve A function that resolves the promise
* @param {Function} reject A function that fails the promise
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
*/
return new Promise(function(resolve, reject) {
/**
* @param {Error} error An error triggered during the execution of the childProcess.exec command
* @param {string|Buffer} standardOutput The result of the shell command execution
* @param {string|Buffer} standardError The error resulting of the shell command execution
* @see https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
*/
childProcess.exec(command, function(error, standardOutput, standardError) {
if (error) {
reject();
return;
}
if (standardError) {
reject(standardError);
return;
}
resolve(standardOutput);
});
});
}
प्रयोग
async function main() {
try {
const passwdContent = await execute("cat /etc/passwd");
console.log(passwdContent);
} catch (error) {
console.error(error.toString());
}
try {
const shadowContent = await execute("cat /etc/shadow");
console.log(shadowContent);
} catch (error) {
console.error(error.toString());
}
}
main();
नमूना आउटपुट
root:x:0:0::/root:/bin/bash
[output trimmed, bottom line it succeeded]
Error: Command failed: cat /etc/shadow
cat: /etc/shadow: Permission denied
इसे ऑनलाइन आज़माएं।
रिप्लाई करें ।
बाहरी संसाधन
वादा करता है ।
child_process.exec
।
Node.js समर्थन तालिका ।