在 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
文件的参数。
下面是一个简单的示例来说明这个过程:
- 创建一个名为
example.js
的JavaScript
文件,内容如下:
// example.js
const args = process.argv.slice(2); // 去除 node 和脚本路径,获取传递的参数
console.log('Received arguments:', args);
- 在
Bash
中调用Node
执行这个JS
文件,并传递一些参数:
# bash命令
node example.js arg1 arg2 arg3
- 执行上述Bash命令后,你将看到以下输出:
# 输出
Received arguments: [ 'arg1', 'arg2', 'arg3' ]
在这个例子中,我们通过在命令行中指定arg1
、arg2
和arg3
作为参数,并将它们传递给example.js
文件。在JS文件中,我们使用process.argv.slice(2)
来获取这些参数,并通过console.log
将它们打印出来。
二、从 JS
回传输出给 Shell
当JS文件执行完毕后,它的输出(通常是通过console.log
、process.stdout.write
等方式产生的)会被直接发送到标准输出流(stdout
)。在Bash中,这个标准输出流可以被捕获并用于后续的处理。
以下是如何捕获JS文件输出的示例:
- 假设我们有以下的
example.js
文件:
// example.js
const message = 'Hello from Node.js!';
console.log(message);
- 在Bash中调用Node执行这个JS文件,并将输出捕获到一个变量中:
# bash命令
output=$(node example.js)
- 随后,你可以在Bash脚本中使用这个
output
变量:
# bash命令
echo "The output from the script is: $output"
执行上述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
中接受到的就是:
2
1
此外,如果想要输出数组或者对象的话有该怎么做呢?
这很简单,使用 JSON.stringify()
序列化一下就可以了,相信聪明的你一下子就想到了。
三、总结
在 Bash
中调用 Node
运行 JS
文件时,数据通信主要通过命令行参数和标准输入输出流来实现。通过命令行参数,我们可以将数据从 Shell
传递给 JS
文件;而通过标准输出流,JS
文件可以将其输出发送回 Shell
,供后续处理使用。这种机制使得 Bash
和 Node
之间的交互变得简单而直接,为自动化脚本和服务器端应用的开发提供了极大的便利。
原文链接:https://juejin.cn/post/7350971114971217939 作者:垂慕容