当前位置: 首页 > 面试题库 >

如何检测Node.js脚本是否通过外壳管道运行?

梁丘凯定
2023-03-14
问题内容

我的问题与此相似:如何检测我的shell脚本是否正在通过管道运行?。区别在于我正在使用的Shell脚本是用Node.js编写的。

假设我输入:

echo "foo bar" | ./test.js

然后,我怎么能得到的价值"foo bar"test.js

我已经阅读了Unix和Node:管道和流,但这似乎只能提供异步解决方案(除非我误会了)。我正在寻找一个同步解决方案。同样,通过这种技术,检测脚本是否正在通过管道传输似乎不是很简单。

TL; DR我的问题有两个方面:

  1. 例如,如何检测Node.js脚本是否通过外壳管道运行echo "foo bar" | ./test.js
  2. 如果是这样,如何在Node.js中读出管道值?

问题答案:

管道用于处理小的输入(例如“ foo bar”),也可以处理巨大的文件。

流API确保您可以开始处理数据,而无需等待巨大的文件完全通过管道传输(这对于速度和内存来说更好)。它的方法是为您提供数据块。

没有用于管道的同步API。如果您确实想在做某件事之前将整个管道输入都掌握在手中,则可以使用

注意:仅使用 节点> =0.10.0,因为该示例使用stream2
API

var data = '';
function withPipe(data) {
   console.log('content was piped');
   console.log(data.trim());
}
function withoutPipe() {
   console.log('no content was piped');
}

var self = process.stdin;
self.on('readable', function() {
    var chunk = this.read();
    if (chunk === null) {
        withoutPipe();
    } else {
       data += chunk;
    }
});
self.on('end', function() {
   withPipe(data);
});

用…测试

echo "foo bar" | node test.js

node test.js


 类似资料:
  • 问题内容: 我有一个Node.js脚本所需的脚本,我想保持JavaScript引擎独立。 例如,我只想在Node.js下运行。如何执行此测试? 发布此问题时,我不知道Node.js模块功能是否基于CommonJS。 对于我给出的具体示例,一个更准确的问题是: 脚本如何判断是否已将其作为CommonJS模块使用? 问题答案: 通过寻求CommonJS支持 ,这是Underscore.js库的实现方式

  • 问题内容: 有没有一种方法可以检测go中的命令是否通过管道传输? 例: 我正在从Stdin阅读。 问题答案: 您可以使用进行此操作。 (改编自https://www.socketloop.com/tutorials/golang-check-if-os-stdin-input-data- is-piped-or-from-terminal )

  • 问题内容: 当使用* nix外壳程序(通常是bash)时,我经常产生一个子外壳程序,可以用它处理一个小任务(通常在另一个目录中),然后退出该外壳程序以继续父外壳程序的会话。 偶尔,我会失去对运行嵌套shell还是在顶层shell中的跟踪,并且会不小心产生其他的子shell或错误地退出顶层shell。 。 有没有一种简单的方法可以确定我是否在嵌套shell中运行?还是我以完全错误的方式解决问题(通过

  • 问题内容: 我有一些需要环境变量的仪器,我想从python代码中自动设置。所以我尝试了几种方法来实现它,但是没有一个成功。这里有些例子: 我在我的python脚本中插入以下代码 os.system(“export ENV_VAR=/some_path”) 我创建了bash脚本(env.sh)并从python运行它: export ENV_VAR=some_path os.system(“sourc

  • 例如,我的脚本将使用生成大量输出。我知道我可以通过将其作为

  • 我正在尝试比较两个存储库中的文件列表,以尝试标记哪些文件已更改。问题是,我的代码说它们都是不同的。但是检查每个哈希摘要表明许多摘要是相同的。 如何修复此bug并仅获取要报告的不同文件? 编辑 另外,请注意使用而不是,如 产生完全相同的错误输出。 编辑2 评论建议使用引号。这也不管用。