আমি একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে চাই যা সিস্টেম শেল কমান্ডগুলি কার্যকর করবে ( lsউদাহরণস্বরূপ) এবং মানটি ফিরিয়ে দেবে।
আমি কীভাবে এটি অর্জন করব?
আমি একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে চাই যা সিস্টেম শেল কমান্ডগুলি কার্যকর করবে ( lsউদাহরণস্বরূপ) এবং মানটি ফিরিয়ে দেবে।
আমি কীভাবে এটি অর্জন করব?
উত্তর:
এখানে অন্যান্য অনেক উত্তর ব্রাউজারে চলমান একটি জাভাস্ক্রিপ্ট ফাংশনের দৃষ্টিকোণ থেকে এই সমস্যাটিকে সম্বোধন করছে বলে মনে হচ্ছে। আমি শুটিং করব এবং ধরে নিয়ে উত্তর দেব যে প্রশ্নকারী যখন "শেল স্ক্রিপ্ট" বলেছেন তখন তার অর্থ নোড.জেস ব্যাকএন্ড জাভাস্ক্রিপ্ট। আপনার কোড ফ্রেম ব্যবহার করার জন্য সম্ভবত কমান্ডার.জে ব্যবহার করা হবে :)
আপনি নোডের এপিআই থেকে চাইল্ড_প্রসেস মডিউলটি ব্যবহার করতে পারেন । আমি নীচের উদাহরণ কোডটি পেস্ট করেছি।
var exec = require('child_process').exec, child;
child = exec('cat *.js bad_file | wc -l',
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
child();
আশাকরি এটা সাহায্য করবে!
... কয়েক বছর পরে ...
ES6 মান হিসাবে গ্রহণ করা হয়েছে এবং ES7 কোণার কাছাকাছি তাই এটি আপডেট উত্তর প্রাপ্য। আমরা উদাহরণ হিসাবে ES6 + async / নোডেজ + বাবেলের সাথে অপেক্ষা করব, পূর্বশর্তগুলি হ'ল:
আপনার উদাহরণ foo.jsফাইলটি দেখতে পারে:
import { exec } from 'child_process';
/**
* Execute simple shell command (async wrapper).
* @param {String} cmd
* @return {Object} { stdout: String, stderr: String }
*/
async function sh(cmd) {
return new Promise(function (resolve, reject) {
exec(cmd, (err, stdout, stderr) => {
if (err) {
reject(err);
} else {
resolve({ stdout, stderr });
}
});
});
}
async function main() {
let { stdout } = await sh('ls');
for (let line of stdout.split('\n')) {
console.log(`ls: ${line}`);
}
}
main();
আপনি বাবল করেছেন তা নিশ্চিত করুন:
npm i babel-cli -g
সর্বশেষ প্রিসেট ইনস্টল করুন:
npm i babel-preset-latest
এর মাধ্যমে চালান:
babel-node --presets latest foo.js
আমি জানি না কেন পূর্ববর্তী উত্তরগুলি সমস্ত ধরণের জটিল সমাধান দিয়েছে। যদি আপনি কেবল একটি দ্রুত কমান্ড কার্যকর lsকরতে চান , আপনার অ্যাসিঙ্ক / অপেক্ষার বা কলব্যাকস বা কোনও কিছুর প্রয়োজন নেই। এখানে আপনার যা যা দরকার তা হ'ল এক্সিকিউটিসিঙ্ক :
const execSync = require('child_process').execSync;
// import { execSync } from 'child_process'; // replace ^ if using ES modules
const output = execSync('ls', { encoding: 'utf-8' }); // the default is 'buffer'
console.log('Output was:\n', output);
ত্রুটি পরিচালনার জন্য, বিবৃতিটির চারপাশে একটি try/ catchব্লক যুক্ত করুন ।
যদি আপনি একটি কমান্ড চালাচ্ছেন যা সম্পূর্ণ হতে দীর্ঘ সময় নেয়, তবে হ্যাঁ, অ্যাসিনক্রোনাসexec ফাংশনটি দেখুন।
এটি পুরোপুরি জাভাস্ক্রিপ্ট পরিবেশের উপর নির্ভর করে। সম্প্রসারিত করুন.
উদাহরণস্বরূপ, উইন্ডোজ স্ক্রিপ্টিংয়ে আপনি এমন কাজগুলি করেন:
var shell = WScript.CreateObject("WScript.Shell");
shell.Run("command here");
সংক্ষেপে:
// Instantiate the Shell object and invoke its execute method.
var oShell = new ActiveXObject("Shell.Application");
var commandtoRun = "C:\\Winnt\\Notepad.exe";
if (inputparms != "") {
var commandParms = document.Form1.filename.value;
}
// Invoke the execute method.
oShell.ShellExecute(commandtoRun, commandParms, "", "open", "1");
নোডজেএস এর মতো সহজ! এবং আপনি যদি নিজের সার্ভারের প্রতিটি বুটে এই স্ক্রিপ্টটি চালাতে চান তবে চিরকালের জন্য পরিষেবা অ্যাপ্লিকেশনটি একবার দেখতে পারেন!
var exec = require('child_process').exec;
exec('php main.php', function (error, stdOut, stdErr) {
// do what you want!
});
দ্রষ্টব্য: এই উত্তরগুলি ব্রাউজার ভিত্তিক ক্লায়েন্ট থেকে ইউনিক্স ভিত্তিক ওয়েব সার্ভারে।
ক্লায়েন্ট উপর কমান্ড চালান
আপনি মূলত পারেন না। সুরক্ষা বলে যে কেবল একটি ব্রাউজারের মধ্যেই এটি চালিত হয় এবং কমান্ড এবং ফাইল সিস্টেমে এর অ্যাক্সেস সীমিত।
সার্ভারে এলএস চালান
আপনি জিইটি এর মাধ্যমে আপনার প্যারামিটারগুলিতে গতিশীল পৃষ্ঠাটি পুনরুদ্ধার করতে একটি এজেএক্স কল ব্যবহার করতে পারেন।
সচেতন হোন যে এটি একটি সুরক্ষা ঝুঁকিও খুলেছে কারণ আপনারা মিঃ রাউজ হ্যাকার আপনার অ্যাপ্লিকেশনটি রান: / দেব / নাল এবং & আরএম-আরএফ / বলতে না পেয়ে তা নিশ্চিত করতে কিছু করতে হবে have
সুতরাং সংক্ষেপে, জেএস থেকে চালানো কেবল একটি খারাপ, খারাপ ধারণা .... ওয়াইএমএমভি
একটি চমৎকার jQuery / Ajax / পিএইচপি সমাধান সহ এই বিষয়ে আরও একটি পোস্ট:
এখানে একটি সহজ কমান্ড যা ifconfigলিনাক্সের শেল কমান্ড কার্যকর করে
var process = require('child_process');
process.exec('ifconfig',function (err,stdout,stderr) {
if (err) {
console.log("\n"+stderr);
} else {
console.log(stdout);
}
});
function exec(cmd, handler = function(error, stdout, stderr){console.log(stdout);if(error !== null){console.log(stderr)}})
{
const childfork = require('child_process');
return childfork.exec(cmd, handler);
}
এই ফাংশনটি সহজেই ব্যবহার করা যেতে পারে:
exec('echo test');
//output:
//test
exec('echo test', function(err, stdout){console.log(stdout+stdout+stdout)});
//output:
//testtesttest
সঙ্গে nashorn আপনি ভালো একটি স্ক্রিপ্ট লিখতে পারেন:
$EXEC('find -type f');
var files = $OUT.split('\n');
files.forEach(...
...
এবং এটি চালান:
jjs -scripting each_file.js
আপনি যদি এনপিএম ব্যবহার করেন তবে শেলজ প্যাকেজটি ব্যবহার করতে পারেন
স্থাপন করা: npm install [-g] shelljs
var shell = require('shelljs');
shell.ls('*.js').forEach(function (file) {
// do something
});
আরও দেখুন: https://www.npmjs.com/package/shelljs