📜  节点执行本地 bin - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:27:45.822000             🧑  作者: Mango

节点执行本地 bin - Shell/Bash

简介

在编写程序或脚本时,我们常常需要调用本地的二进制可执行文件或脚本文件。Node.js 提供了可以调用本地二进制文件的能力。本文将介绍如何在 Node.js 中使用 Child Process 模块中的 exec 方法执行本地的二进制可执行文件或脚本文件。

执行本地 bin

例如,我们有一个名为 ./bin/hello 的可执行文件,我们可以使用以下代码执行该文件并输出结果:

const { exec } = require('child_process');

exec('./bin/hello', (error, stdout, stderr) => {
  if (error) {
    console.error(`执行错误: ${error}`);
    return;
  }
  console.log(`执行结果: ${stdout}`);
});

在上面的代码中,我们调用了 exec 方法,并传递了要执行的命令作为第一个参数。该命令可以是可执行文件、Shell 脚本,甚至是一个命令链。第二个参数是一个回调函数,用于处理命令执行后的输出。

如果命令执行成功,则回调函数的 stdout 参数将包含该命令的输出。如果命令执行失败,则回调函数的 error 参数将包含错误信息,stderr 参数将包含错误输出。

执行本地 Shell/Bash

除了执行本地二进制可执行文件之外,我们还可以使用 exec 方法执行本地 Shell/Bash 脚本。例如,我们有一个名为 ./bin/hello.sh 的 Shell 脚本文件,我们可以使用以下代码执行该文件并输出结果:

const { exec } = require('child_process');

exec('./bin/hello.sh', (error, stdout, stderr) => {
  if (error) {
    console.error(`执行错误: ${error}`);
    return;
  }
  console.log(`执行结果: ${stdout}`);
});

在上面的代码中,我们调用了 exec 方法,并传递了要执行的 Shell/Bash 脚本作为第一个参数。同样,第二个参数是一个回调函数,用于处理命令执行后的输出。

执行命令链

除了执行单个命令或脚本之外,我们还可以在 Node.js 中使用 exec 方法执行命令链。例如,我们有以下命令链:

echo "Hello" | awk '{print $1}'

我们可以使用以下代码在 Node.js 中执行该命令链并输出结果:

const { exec } = require('child_process');

exec('echo "Hello" | awk \'{print $1}\'', (error, stdout, stderr) => {
  if (error) {
    console.error(`执行错误: ${error}`);
    return;
  }
  console.log(`执行结果: ${stdout}`);
});

在上面的代码中,我们将要执行的命令链作为第一个参数传递给 exec 方法。在命令链中使用单引号包裹 print $1,以避免与 JavaScript 字符串中的 $ 符号冲突。

总结

在 Node.js 中使用 Child Process 模块的 exec 方法执行本地二进制可执行文件或 Shell/Bash 脚本非常容易。如果要执行命令链,则将要执行的命令链作为字符串传递给 exec 方法即可。记住,在处理输出时要调用回调函数。