gpt4 book ai didi

javascript - 拆分标准输出并将每个部分通过管道传输到命令

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:50 26 4
gpt4 key购买 nike

我有一个如下所示的 javascript 文件。

var val = "foo"
console.log(val)
//EVALMD-STDOUT-FILE-DELIMETER
if (!val) var val = "bar"
console.log(val)
//EVALMD-STDOUT-FILE-DELIMETER
console.log(val)

我可以通过两种方式运行它。

node example.js 

或者我可以使用 cat 将其输入。

cat example.js | node 

我正在尝试弄清楚如何在我的情况下用分隔符//EVALMD-STDOUT-FILE-DELIMETER分割像cat example.js这样的标准输出,并将每个 Node 与node作为单独的进程进行管道传输,所以我应该得到foobar,而不是记录foofoofoo,然后一个错误。

上面的文件应该被分割并解释为 3 个“ block ”

一:

var val = "foo"
console.log(val)

两个:

if (!val) var val = "bar"
console.log(val)

三:

console.log(val)

最佳答案

如果您提前知道分割数量,则可以扩展的部分解决方案如下:

cat example.js | tee >(sed -n '1,_//EVALMD-STDOUT-FILE-DELIMETER_p' | node) >(sed -n '_//EVALMD-STDOUT-FILE-DELIMETER_,$p' | node) >/dev/null

使用最后一个 >/dev/null 来防止 tee 将其打印到标准输出

如果您事先不知道以下脚本,您可以使用 perl 来完成此操作:

open(my $out, "| node");
while(<>) {
if(/\/\/EVALMD-STDOUT-FILE-DELIMETER/) {
close($out);
open($out, "| node");
next;
}
print $out $_;
}

所以你可以将一个文件放入其中,你可以将其作为 Perl 脚本,也可以折叠成一个字符串并像这样运行它

cat example.js | perl -nle 'open(my $out, "| node");while(<>) {if(/\/\/EVALMD-STDOUT-FILE-DELIMETER/) {close($out);open($out, "| node");next;}print $out $_;}'

或者当然你可以简单地修改perl来读取文件本身,这样就不需要cat

关于javascript - 拆分标准输出并将每个部分通过管道传输到命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32233480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com