在 Bash 中调用 Node 运行 JS 文件的数据通信机制

Bash 中调用 Node 运行 JS 文件是一种常见的操作,它允许我们在命令行环境中执行JavaScript 代码。这种机制不仅使得 JavaScript 能够在服务器端运行 ,还使得脚本化和自动化任务变得更加容易。

这篇文章探讨在 Bash 中调用 Node 运行 JS 文件时如何进行数据通信,即如何在执行之前将参数从 Shell 传递给 JS ,以及如何在 JS 执行完毕后将输出回传给调用它的 Shell

一、从 Shell 传递参数给 JS

Bash 中调用 Node 执行 JS 文件时,我们可以通过命令行参数的方式将数据从 Shell 传递给 JS 。这些参数可以在JS文件中通过process.argv数组获取。process.argv是一个包含命令行参数的数组,其中process.argv[0]是'node'的路径,process.argv[1]JS 文件的路径,之后的元素则是传递给 JS 文件的参数。

下面是一个简单的示例来说明这个过程:

  1. 创建一个名为example.jsJavaScript 文件,内容如下:
javascript 复制代码
// example.js
const args = process.argv.slice(2); // 去除 node 和脚本路径,获取传递的参数
console.log('Received arguments:', args);
  1. Bash 中调用 Node 执行这个 JS 文件,并传递一些参数:
bash 复制代码
# bash命令
node example.js arg1 arg2 arg3
  1. 执行上述Bash命令后,你将看到以下输出:
bash 复制代码
# 输出
Received arguments: [ 'arg1', 'arg2', 'arg3' ]

在这个例子中,我们通过在命令行中指定arg1arg2arg3作为参数,并将它们传递给example.js文件。在JS文件中,我们使用process.argv.slice(2)来获取这些参数,并通过console.log将它们打印出来。

二、从 JS 回传输出给 Shell

当JS文件执行完毕后,它的输出(通常是通过console.logprocess.stdout.write等方式产生的)会被直接发送到标准输出流(stdout)。在Bash中,这个标准输出流可以被捕获并用于后续的处理。

以下是如何捕获JS文件输出的示例:

  1. 假设我们有以下的example.js文件:
javascript 复制代码
// example.js
const message = 'Hello from Node.js!';
console.log(message);
  1. 在Bash中调用Node执行这个JS文件,并将输出捕获到一个变量中:
bash 复制代码
# bash命令
output=$(node example.js)
  1. 随后,你可以在Bash脚本中使用这个output变量:
bash 复制代码
# bash命令
echo "The output from the script is: $output"

执行上述Bash命令后,你将看到以下输出:

bash 复制代码
# 输出
The output from the script is: Hello from Node.js!

在这个例子中,JS文件example.js通过console.log输出了一个字符串。当我们在Bash中使用$(node example.js)时,这个输出被捕获并存储在output变量中。然后,我们通过echo命令打印了这个变量的内容。

疑问与解答

那么如果 js 代码在执行过程中调用了多次 console.log 会发生什么样的事情呢?

答案就是,这些所有的输出会被【堆成】一个文件,统一输出,也就是如果你先 console.log(2) 然后 console.log(1) 那么 shell 中接受到的就是:

txt 复制代码
2
1

此外,如果想要输出数组或者对象的话有该怎么做呢?

这很简单,使用 JSON.stringify() 序列化一下就可以了,相信聪明的你一下子就想到了。

三、总结

Bash 中调用 Node 运行 JS 文件时,数据通信主要通过命令行参数和标准输入输出流来实现。通过命令行参数,我们可以将数据从 Shell 传递给 JS 文件;而通过标准输出流,JS 文件可以将其输出发送回 Shell ,供后续处理使用。这种机制使得 BashNode 之间的交互变得简单而直接,为自动化脚本和服务器端应用的开发提供了极大的便利。

相关推荐
病树前头2 天前
一些以前使用的linux及shell命令,gnuplot脚本
linux·shell
promise5247 天前
MySQL实现按分秒统计数据量
linux·运维·数据库·sql·mysql·shell
DoubleCui8 天前
记一次Mac 匪夷所思终端常用网络命令恢复记录
网络·macos·shell·terminal
飞的肖10 天前
在Linux实时监控某个应用是否运行,未运行,执行运行命令
linux·运维·shell
花花花114 天前
秒变 Vim 高手:必学的编辑技巧与隐藏功能大揭秘
linux·ubuntu·编辑器·vim·excel·shell
喵个咪14 天前
Windows使用PowerShell批量修改文件后缀
shell
持续更新中~15 天前
有关shell指令练习2
shell
只对您心动16 天前
【C高级】有关shell脚本的一些练习
linux·c语言·shell·脚本
DieSnowK16 天前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
promise5241 个月前
Linux下载压缩包:tar.gz、zip、tar.bz2格式全攻略
linux·运维·服务器·后端·bash·shell