问题标签 [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 投票
1 回答
101 浏览

bash - How do these process substitutions work?

Can someone please explain how these process substitutions are working.

Output

1:2:3:YES:three:two:first

I've figured out, that the 'ssstr'-Substitution got FD 60, sstr FD 61 and str FD 62. (right to left)

But how is (echo "YES") connected to input of FD60, and output of FD60 with input FD61 and so on and finally FD62 prints out on Terminal ?

All against the direction of the two redirections.

How are they nested, and how connected ? Makes me crazy. Ty.

0 投票
0 回答
176 浏览

bash - 使用 pv 进行进程替换会导致空文件

我在让pv命令tar使用 Bash 进程替换时遇到问题。

我可以pv这样使用,它的工作原理:

使用进程替换cat也可以:

但是这个命令导致一个空的file.tar

我也尝试tar cvf >(pv - > file.tar) dir过同样的结果。

我的目标是pv打印出进度,并将tar(即文件列表和任何错误)的输出通过管道传输到其他命令以进行额外处理。上面的第一个示例命令仅产生 2 个输出流:stdout包含二进制 tar 数据,并stderr包含文件列表和任何错误消息。使用进程替换将产生 3 个输出流:二进制 tar 数据进入新进程,stdout包含文件列表,并stderr包含任何错误消息。

我可以将该pv命令与 Bash 进程替换一起使用,如果可以,如何使用?

我正在使用pv 1.6.0GNU bash, version 4.3.46(1)-release

有趣的是,如果我使用stracetry and debug pv,它可以工作:

0 投票
1 回答
242 浏览

linux - 理解 bash 中的 exec

在阅读了关于 exec 内置如何在 bash 中工作的解释后,我了解到它的基本功能是在不分叉的情况下替换当前进程。它似乎也用于在当前进程中重定向 I/O 和关闭文件描述符,这让我感到困惑。这是一些不相关的额外事情exec吗?可以在“替换当前流程”的背景下理解吗?当与流程替换结合使用时,它是如何工作的,例如exec 3< <(my program)

0 投票
5 回答
5233 浏览

bash - 如何在 Bash 中找到下一个可用的文件描述符?

如何确定 Bash 当前是否正在使用文件描述符?例如,如果我有一个读取、写入和关闭 fd 3 的脚本,例如

确保我不会干扰在脚本运行之前可能已设置的描述符的其他用途的最佳方法是什么?我需要把我的整个脚本放在一个子shell中吗?

0 投票
1 回答
79 浏览

r - 使用进程替换从 R 中的 system() 调用 comm

出于效率原因,我想通过 system() 在 R 中调用 comm。我已经习惯于使用如下语法:

但是当从系统中使用这种语法时,如

我得到了熟悉的错误:

从上面很明显 system() 使用的是 sh 而不是 bash,并且不支持进程替换。阅读其他文章后,我尝试使用

也就是说,根据需要转义双引号和反斜杠。但是,这会返回相同的错误:

我猜这与系统()中双引号字符串中 bash -c 中的单引号转义有关。我对如何在 system() 中的双引号字符串中管理 bash -c中的单引号感到有些困惑。我应该如何导航所有这些转义?

0 投票
1 回答
581 浏览

bash - Tee 与流程替代误解

我正在尝试为 LDAP 条目编写一个漂亮的打印机,它只获取一次根 LDAP 记录,然后将输出通过管道传输到tee每个部分调用漂亮的打印机。

为了便于说明,假设我的group_entry函数返回特定 LDAP DN 的 LDIF。其中的细节并不重要,所以假设它总是返回:

grep我可以通过一些'ing 和'ing轻松地分别提取所有者和成员cut。然后,我可以将这些辅助 DN 传送到另一个 LDAP 搜索查询中以获取它们的真实姓名。例如,假设我有一个pretty_print函数,它在 LDAP 属性名称上进行了参数化,它完成了我刚才提到的所有操作,然后使用 AWK 很好地格式化了所有内容:

这些单独工作正常,但是当我尝试将tee它们一起使用时,没有任何反应:

显然,我对这应该如何工作有一些误解,但它逃脱了我。我究竟做错了什么?


编辑为了完整起见,这是我的完整脚本:

0 投票
2 回答
812 浏览

bash - 为什么 `cat <(cat)` 会产生 EIO?

我有一个同时从两个输入文件中读取的程序。我想让这个程序从标准输入中读取。我想我会使用这样的东西:

但我刚刚发现

生产

同样,

read所以... Linux在系统调用级别上失败了。那很有意思。不是bash将标准输入连接到子外壳吗?:(

有针对这个的解决方法吗?我特别需要使用进程替换(... <(...)格式),因为$program1(tail顺便说一句) 需要文件,并且我需要od对标准输入进行一些预处理 (with ),然后才能将其传递给tail- 我不能只指定/dev/stdin等。

编辑:

我真正想做的是从文件中读取(另一个进程将写入),同时我从标准输入中读取,这样我就可以接受命令等。我希望我能做到

同时从标准输入FIFO 中读取并将其放入可以通过 awk(或类似方法)运行的单个 stdout 流中。我知道我可以用任何脚本语言轻松解决这个问题,但我喜欢学习如何bash做所有事情:P

编辑 2:我问了一个新问题,更充分地解释了我刚才描述的上下文。

0 投票
2 回答
639 浏览

bash - 处理替换为 grep 缺少预期输出

假设我有一个输出的程序:

我将用printf 'abcd\nl33t\n1234\n'. 我想同时将此输出提供给两个程序。我的想法是使用tee. 假设我想将输出的副本提供给grep

我使用 Bash 4.1.2(Linux,CentOS 6.5)得到以下信息,这很好:

但是如果进程替换没有重定向到stderr(即没有>&2),像这样:

然后我得到:

这就像来自进程替换的标准输出(第一个 grep)被管道(第二个 grep)之后的进程使用。除了第二个 grep 已经在自己阅读内容,所以我想它不应该考虑第一个 grep 中的内容。除非我弄错了(我肯定是这样)。

我错过了什么?

0 投票
4 回答
2789 浏览

bash - 使用管道获取进程替换的退出代码进入while循环

以下脚本调用另一个程序在 while 循环中读取其输出(请参阅Bash - 如何将输入通过管道传输到 while 循环并在循环结束后保留​​变量):

如何检查退出代码other_program以查看循环是否正确执行?

0 投票
1 回答
339 浏览

linux - 如何打印命令的结果以及结果的计数?

我必须打印包含作为控制台参数给出的查询的所有文件,以下行这样做

但是我也想获得总文件数,但是这样做:

会给我计数,但不是这些文件的名称,这不是预期的结果。如何用一个衬垫(如果可能)修复它?