我需要使用nodeJS运行一个shell脚本文件,执行一系列的Cassandra数据库命令。请问有人可以帮我吗。
在db.sh文件中:
create keyspace dummy with replication = {'class':'SimpleStrategy','replication_factor':3}
create table dummy (userhandle text, email text primary key , name text,profilepic)
我需要使用nodeJS运行一个shell脚本文件,执行一系列的Cassandra数据库命令。请问有人可以帮我吗。
在db.sh文件中:
create keyspace dummy with replication = {'class':'SimpleStrategy','replication_factor':3}
create table dummy (userhandle text, email text primary key , name text,profilepic)
hi.sh
echo "Hi There!"
node_program.js
const { exec } = require('child_process');
var yourscript = exec('sh hi.sh',
(error, stdout, stderr) => {
console.log(stdout);
console.log(stderr);
if (error !== null) {
console.log(`exec error: ${error}`);
}
});
当我运行Node.js文件时,它会执行Shell文件并输出:
运行
node node_program.js
输出
Hi There!
只需在exec
回调中提及 shell 命令或 shell 脚本,即可执行任何脚本。
const shell = require('shelljs')
shell.exec('./path_to_your_file')
你可以去:
var cp = require('child_process');
然后:
cp.exec('./myScript.sh', function(err, stdout, stderr) {
// handle err, stdout, stderr
});
在您的$SHELL中运行命令。cp.spawn('./myScript.sh', [args], function(err, stdout, stderr) {
// handle err, stdout, stderr
});
不使用shell运行文件。
或者直接执行
cp.execFile();
这与cp.exec()相同,但不会在$PATH中查找。
您也可以执行以下操作:
cp.fork('myJS.js', function(err, stdout, stderr) {
// handle err, stdout, stderr
});
为了在 node.js 中运行 JavaScript 文件,可以使用子进程(适用于大型程序)。
你可能还需要使用事件监听器访问 stdin 和 stdout。例如:
var child = cp.spawn('./myScript.sh', [args]);
child.stdout.on('data', function(data) {
// handle stdout as `data`
});
此外,您可以使用 shelljs
插件。
它易于使用且跨平台。
安装命令:
npm install [-g] shelljs
什么是 shellJS
ShellJS 是一个基于 Node.js API 实现 Unix shell 命令的跨平台程序(Windows/Linux/OS X)。使用它可以消除你的 shell 脚本对 Unix 的依赖,同时保留熟悉和强大的命令。你还可以全局安装它,这样你就可以在 Node 项目之外运行它,不再需要编写混乱的 Bash 脚本了!
以下是其工作原理的示例:
var shell = require('shelljs');
if (!shell.which('git')) {
shell.echo('Sorry, this script requires git');
shell.exit(1);
}
// Copy files to release dir
shell.rm('-rf', 'out/Release');
shell.cp('-R', 'stuff/', 'out/Release');
// Replace macros in each .js file
shell.cd('lib');
shell.ls('*.js').forEach(function (file) {
shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file);
});
shell.cd('..');
// Run external tool synchronously
if (shell.exec('git commit -am "Auto-commit"').code !== 0) {
shell.echo('Error: Git commit failed');
shell.exit(1);
}
此外,您还可以从命令行中使用:
$ shx mkdir -p foo
$ shx touch foo/bar.txt
$ shx rm -rf foo
spawn
。 - Dimitri Kopriwa