问题标签 [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 回答
748 浏览

bash - 某些程序是否不接受输入文件的进程替换?

我正在尝试对程序的输入文件使用进程替换,但它不起作用。是因为某些程序不允许进程替换输入文件吗?

以下不起作用:

但以下控件确实有效:

这表明进程替换本身有效,但 clustalw 程序本身不喜欢进程替换 - 可能是因为它创建了一个非标准文件,或者创建了具有不寻常文件名的文件。

程序不接受进程替换是否很常见?我将如何检查这是否是问题所在?

我在 Ubuntu 9.10 上运行 GNU bash 版本 4.0.33(1)-release (x86_64-pc-linux-gnu)。Clustalw 是 2.0.10 版。

0 投票
3 回答
4516 浏览

bash - Bash 进程替换和同步

(可能与Do some programs not accept process substitution for input files有关?

在一些 Bash 单元测试脚本中,我使用以下技巧来记录显示命令的标准输出和标准错误:

这个过程产生一些输出到标准输出,所以$stdoutF文件得到一些数据。然后我运行另一个不输出任何数据的命令:

但是,在运行空性测试之前,这个过程并不总是成功完成(使用shunit-ng):

在 100 次运行测试中,这失败了 25 次。

sync在测试文件是否为空之前调用是否足够:

...和/或它是否应该通过强制命令的顺序来工作:

...和/或是否有可能以tee某种方式assertNull直接而不是文件?

更新sync不是答案 - 请参阅下面 Gilles 的回复。

更新 2:进一步讨论Save stdout、stderr 和 stdout+stderr synchronously。感谢您的回答!

0 投票
0 回答
318 浏览

shell - 进程替换 tcpdump 脚本错误

如果我在终端中编写以下命令,它将完美运行

如果我把它放在一个脚本中,我会得到一个错误,比如“unexpected”(“ in line ...”我没有确切的错误行,因为我正在通过 ssh 在服务器上工作,现在我没有访问权限到它。服务器应该在BSD上运行,现在我不知道使用哪个shell。我需要将这些行放在脚本中,因为我需要对大量pcap.gz文件执行此命令。

0 投票
2 回答
18501 浏览

bash - Bash 在循环内设置全局变量并保留其值 - 或处理假人的替代

我是一名 C/C++ 程序员,而且总的来说非常愚蠢(或者至少 bash 做事的方式让我感到困惑)。我无法理解进程替换

我需要定义一个全局布尔值,将其设置在循环中的某个位置,并在全局范围内使用它。有人可以以最简单的方式解释如何调整下面的代码以允许我实现我的用例,足够简单,这样我明天就不必再次扭曲我的大脑来尝试掌握进程替换。

老实说,我不认为 bash 能胜任任务....下一个块看起来像这样。

我现在需要的是一个全局结构数组,这样我就可以遍历它们并采取条件操作来正确初始化我的守护进程:/。

可能只使用 libc 并在 lua 中做这些事情,我阻止的唯一原因是必须安装 Rocks,我不喜欢临时代码存储库在我的机器上吐出他们想要的任何东西:D

0 投票
5 回答
1887 浏览

bash - bash:如何确保终止与 exec 一起使用的进程替换?

如果我跑

那么结果不是同步的;它可能是这样的:

如何确保>(...)在进行下一次迭代之前完成流程替换?

sleep 0.1在帮助之后插入exec 3>&-,但它不优雅,效率低下,并且不能保证始终有效。

编辑:这个例子可能看起来很傻,但这只是为了说明。我正在做的是在循环中读取输入流,将每一行馈送到一个在循环期间偶尔会发生变化的进程。在代码中更容易解释:

0 投票
1 回答
393 浏览

bash - Bash 退出和进程替换

如果函数失败,我想退出脚本。通常这不是问题,但如果您使用过程替代,它就会成为问题。

根据CodeGnome 的回答,这似乎可行

0 投票
1 回答
1053 浏览

bash - Bash 进程替换:`echo >(ls)` 有什么作用?

以下是 Bash 进程替换的示例:

然后我得到一个等待命令的光标。

/dev/fd/63不存在。我认为发生的事情是:

  1. 输出使用的文件名/dev/fd
  2. 执行lsin>(ls)

这是正确的吗?为什么会有光标等待输入?

0 投票
4 回答
7168 浏览

linux - 带有进程替换的 shell 脚本中的语法错误

我有这个 shell 脚本,我用它来备份我的系统。有一行:

如您所见,我一直在尝试使用此博客文章过滤掉 tar 中烦人的、无用的“套接字忽略”错误。

我在执行时从 shell 得到的是:

/bin/sysback:第 45 行:意外标记>' /bin/sysback: line 45:tar -Pzcpf /backups/backup --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups --exclude附近的语法错误=var/log / 2> >(grep -v 'socket被忽略' >&2)'

0 投票
5 回答
41436 浏览

bash - 将标准输出捕获到变量,但仍将其显示在控制台中

我有一个 bash 脚本,它调用了几个长时间运行的进程。出于处理原因,我想将这些调用的输出捕获到变量中。但是,因为这些是长时间运行的进程,我希望 rsync 调用的输出实时显示在控制台中,而不是事后显示。

为此,我找到了一种方法,但它依赖于将文本输出到 /dev/stderr。我觉得输出到 /dev/stderr 不是一个好的做事方式。

在上面的示例中,我调用了 rsync 几次,我想在处理文件名时查看它们,但最后我仍然希望将输出放在变量中,因为稍后我将对其进行解析。

有没有一种“更清洁”的方式来实现这一点?

如果有什么不同,我使用的是 Ubuntu 12.04,bash 4.2.24。

0 投票
2 回答
4428 浏览

bash - bash进程替换拒绝文件描述符权限?

我有一个 bash 脚本,我想在标准输出中与用户通信,但也通过文件描述符将命令发送到子进程 - 如下所示:

所以我想我可以通过首先启动这样的子流程来“设置”:

但这会产生一个错误:

这是可以预料的吗?

我不明白发生了什么事。(我做错了什么吗?可能是我的系统有一些特殊的安全设置,不允许我尝试做的事情吗?(运行 Ubuntu Linux 12.10。))

“解决方法” - 以下似乎与我正在尝试做的相同,并且可以正常工作:

或者,作为单行:

为什么这行得通,但初始版本却不行?

非常感谢任何帮助。