问题标签 [process-substitution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
207 浏览

vim - 在 vim 中使用 bash 进程替换

我想从 vim 使用 bash 进程替换,我该怎么做?我需要我可以输入如下内容:

该特定表格无效。如何让 vimgit show mybranch:mydir/myfile.txt在新选项卡中打开命令的输出。

0 投票
2 回答
490 浏览

python - 两次使用进程替换作为 Python 的输入文件

考虑以下python脚本

现在我想test.py在一个替代进程上运行,例如,

似乎第二个f.readlines返回空。为什么会这样,有没有办法在不必指定两个输入文件的情况下做到这一点?

0 投票
2 回答
95 浏览

bash - 模拟“命名”进程替换

假设我有一个很大的 gzip 文件data.txt.gz,但通常需要将未压缩的版本提供给程序。当然,data.txt可以使用进程替换语法,而不是创建一个独立的 unpacked :

./program <(zcat data.txt.gz)

但是,根据具体情况,这可能令人厌烦且容易出错。

有没有办法模拟命名进程替换?也就是说,创建一个伪文件data.txt,该文件在被访问时会“展开”为进程替换zcat data.txt.gz。与符号链接将读取操作转发到另一个文件不同,但在这种情况下,它需要是一个临时命名管道。

谢谢。

PS。有点类似的问题


编辑(来自评论)实际用例有一个大型 gzip 语料库,除了以原始形式使用外,有时还需要使用一系列轻量级操作(标记化、小写等)进行处理,然后馈送到一些“更重”的代码。存储经过预处理的副本会浪费磁盘空间,并且重复重新键入完整的预处理管道可能会引入错误。同时,动态运行管道会产生很小的计算开销,因此需要一个长期存在的伪文件来隐藏细节。

0 投票
2 回答
546 浏览

diff - 使用进程替换补丁到标准输出

我正在尝试做类似的事情:

我得到的结果是:

如何使用进程替换生成修补文件?

0 投票
1 回答
122 浏览

bash - pipe STDOUT of a command to several programs at once (bash)

According process substitution in bash, stdout of one command can be piped into several programs at once using the following template:

So, you could do:

And get the output of all three commands.

Now I tried storing the output of all these commands, but with no success:

You will see $n1 and $n2 are empty! Why? Is there a way to make this work?

Thank you.

0 投票
1 回答
45 浏览

bash - tee >(cat -n) < tmpfile 在重复之前完全打印 tmpfile

tmpfile 包含以下内容:

问题标题中的命令输出如下:

由于 tee 和 cat 是通过命名管道连接的,所以我希望 cat 在 tee 打印下一行之前完成向终端发送输出。像这样的东西:

有人可以解释一下这里发生了什么吗?我考虑了竞争条件的可能性,其中 tee 刚刚获胜,但这也发生在大小等于几 KB 的文件中。我觉得这里还有更多的东西。

谢谢。

0 投票
2 回答
385 浏览

bash - 如何拒绝 bash 进程替换

要将命令的 stderr 重定向到 syslog,我使用了一个帮助程序,例如

with_logger 在哪里

这里 2 个exec调用和进程替换用于避免 bash 进程等待命令或记录器命令完成。然而,这会产生一个僵尸。也就是说,当命令退出关闭其标准错误后,记录器进程退出时,没有人等待该进程。这会导致父进程收到关于未知子进程的意外信号。

为了解决这个问题,我想我必须以某种方式否认这个>()过程。有没有办法做到这一点?

更新以澄清问题

我需要从另一个程序调用我的包装脚本,而不是从 bash 脚本。

更新 2 - 这是一个错误的问题

请参阅下面的答案。

0 投票
1 回答
194 浏览

bash - 循环在具有 eval 和进程替换的函数之后停止

语境

我有一个迭代列表的脚本。在每次迭代中,它应该调用一个构造一个“diff”命令的函数,用于通过“eval”比较两个远程文件。

“diff”命令通过两个进程替换获取其输入,其中每个进程替换通过执行无密码身份验证(通过公钥/私钥)的“ssh”捕获远程文件。

'diff' 和 'ssh' 执行已经在脚本之外进行了测试,它们工作正常。

代码

在这里,我发布了我的脚本的一个非常简短的版本,但是它产生了同样的问题:

预期结果

问题

脚本在第一次迭代后停止:

问题

你知道为什么循环会停止吗?以及如何解决?

0 投票
1 回答
810 浏览

bash - bash 进程替换中的 GNU 并行参数占位符

我有以下 GNU 并行命令。

我想在写入磁盘之前压缩输出。通常我只是将它通过管道传输到gzip -c,但不幸的是,这个特定的 Python 脚本没有将输出发送到标准输出的选项。然后我想我可以改用进程替换。我尝试了以下。

但是,后一个示例中的花括号被子进程逐字解释,而不是作为 GNU 并行参数的占位符。有什么办法可以让它工作吗?

0 投票
2 回答
911 浏览

linux - BASH 嵌套过程替换

我正在尝试在这样的while循环中使用进程替换的标准输出:

它应该做的是在将新数据添加到文件时合并 FILE_1 和 FILE_2 的最后几行。显然,我想做的不仅仅是在 while 循环中打印该行,但这是一个很好的例子。

不幸的是,当我运行这个脚本时,它只是坐在终端上,什么也不做。

只运行这一行:

完美运行,当我将数据添加到文件中时,我可以在终端上看到输出。

是否需要使用一些特殊语法才能将标准输出通过管道传输到另一个进程?

我试过做

但它仍然只是坐在终端上。