如何使用nodejs运行shell脚本文件?

vatpfxk5  于 2022-12-26  发布在  Node.js
关注(0)|答案(4)|浏览(399)

我需要使用nodeJS运行一个shell脚本文件,它执行一组Cassandra DB命令。有人能帮我吗?

在db.sh文件中:

create keyspace dummy with   replication = {'class':'SimpleStrategy','replication_factor':3}

create table dummy (userhandle text, email text primary key , name text,profilepic)
euoag5mw

euoag5mw1#

您可以使用nodejs的"child process"模块在nodejs中执行任何shell命令或脚本。让我举一个例子,我正在nodejs中运行一个shell脚本(hi.sh)。
"嗨,嘘"

echo "Hi There!"
    • 节点程序. 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}`);
            }
        });

在这里,当我运行nodejs文件时,它将执行shell文件,输出将是:

    • 快跑**
node node_program.js
    • 输出**
Hi There!

只要在exec回调中提到shell命令或shell脚本,就可以执行任何脚本。

pftdvrlh

pftdvrlh2#

您可以使用shelljs module执行任何shell命令

const shell = require('shelljs')

 shell.exec('./path_to_your_file')
2cmtqfgy

2cmtqfgy3#

你可以去:

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`
});
jecbmhm3

jecbmhm34#

另外,你也可以使用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

相关问题