我有一个使用coprocess的gawk程序。然而,有时我没有数据写入coprocess,我的原始脚本会在等待coprocess输出时挂起。
下面的代码从STDIN读取每行内容,并将其写入作为coprocess运行的“cat”程序。然后它读取coprocess输出并将其写入STDOUT。如果将if条件更改为1==0,则不会向coprocess写入任何内容,该程序将在while循环中挂起。
从手册中看来,只有第一次使用|&运算符进行IO操作时,coprocess和双向通信通道才会启动。也许我们可以在实际上没有写任何内容的情况下启动它们(例如写入空字符串)?或者有没有一种方法可以检查coprocess是否启动了?
下面的代码从STDIN读取每行内容,并将其写入作为coprocess运行的“cat”程序。然后它读取coprocess输出并将其写入STDOUT。如果将if条件更改为1==0,则不会向coprocess写入任何内容,该程序将在while循环中挂起。
从手册中看来,只有第一次使用|&运算符进行IO操作时,coprocess和双向通信通道才会启动。也许我们可以在实际上没有写任何内容的情况下启动它们(例如写入空字符串)?或者有没有一种方法可以检查coprocess是否启动了?
#!/usr/bin/awk -f
BEGIN {
cmd = "cat"
## print "" |& cmd
}
{
if (1 == 1) {
print |& cmd
}
}
END {
close (cmd, "to")
while ((cmd |& getline line)>0) {
print line
}
close(cmd)
}
out
和"to"
是什么?在尝试读取其输出之前,您似乎关闭了协处理器 - 这似乎不明智? - Mark Setchellout
是什么意思?你试图通过多余的1 == 1
实现什么目的? - oogawhile( condition && ((cmd |&... )
的内容。 - n0741337