更多 coproc 问题

2024-03-03

这是后续bash coproc 和剩余的 coproc 输出 https://stackoverflow.com/questions/7651946

我最终决定一次一行处理文件的习惯用法是:

coproc cat auto/etc/build.cfg
while read -u ${COPROC[0]} BRANCH TARGET SVNSRC SVNTAG BUILDTYPE DISTTYPE DISTARGS
do
    ... commands ...
done

我知道一个简单的情况cat我可以使用输入重定向。这是一个简化版本,真正的版本使用egrep来选择行的子集。

不幸的是这不起作用。

$ cat test.sh
coproc cat auto/etc/build.cfg
while read -u ${COPROC[0]} BRANCH TARGET SVNSRC SVNTAG BUILDTYPE DISTTYPE DISTARGS
do
    echo hello
done

$ bash -x test.sh
+ read -u 63 BRANCH TARGET SVNSRC SVNTAG BUILDTYPE DISTTYPE DISTARGS
+ cat auto/etc/build.cfg
+ echo hello
hello
+ read -u BRANCH TARGET SVNSRC SVNTAG BUILDTYPE DISTTYPE DISTARGS
test.sh: line 2: read: BRANCH: invalid file descriptor specification

看来,即使文件中有 4 行,到第二次迭代时,协进程及其文件描述符和${COPROC[*]}变量已取消设置(请注意第二次读取中缺少的 fd)。

让事情变得复杂的是,我在 Cygwin 和 Linux (Fedora) 中工作,这在两种环境中表现出略有不同的行为。在 Linux 中我得到了上面描述的行为。在 Cygwin 中一些命令(即echo,它是 bash 内置函数)不会导致此问题。在这两种环境中,运行任何外部命令都会终止协进程并丢弃其描述符。

我想这里真正的问题是:

在 bash 中,我该如何完成

while read (list of vars) from file
do
    one or more commands
done

配置文件很短,因此如果我必须将整个文件加载到数组中,那就可以了。

我真的很惊讶这在 bash 中是如此困难。


我不确定你为什么使用coproc不管用。你的例子对我有用bashMac OS X 上的 4.2.8。也许某些版本bash这里有越野车。

听起来您可以从进程替换重定向,而不是使用协进程。

while read foo bar baz quux; do
    : use foo, bar, baz, quux in various commands
done < <(commands | that | generate --your lines-to-read)

当您的输入尚未位于可以使用普通重定向的简单文件中时,这会很方便。


如果你想坚持coproc,您也许可以使用替代公式:

coproc { commands | that | generate --your lines-to-read ; }
while read foo bar baz quux; do
    : use foo, bar, baz, quux in various commands
done <&${COPROC[0]}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更多 coproc 问题 的相关文章

随机推荐

  • 领域模型模式示例

    我只是想找一些 Martin Fowler 的例子领域模型 http martinfowler com eaaCatalog domainModel html模式 而我不能 根据我在互联网领域模型上发现的内容 只是向类添加一些 逻辑 方法
  • 如何防止 PyCharm 覆盖 matplotlib 中设置的默认后端?

    我已将默认后端设置为Qt5Agg in config matplotlib matplotlibrc 如果我使用常规 ssh 提示符并打开 这会起作用ipython并运行import matplotlib as mpl 我正确地得到 mpl
  • 带时间戳零的 PHP 日期返回 1 小时

    如果我执行以下操作 date H i s 0 它返回01 00 00 同时它should give 00 00 00 它可能与我的本地主机的时区有关吗 世界标准时间 1 如果是这样 我该如何解决这个问题 致电前设置时区date 你将使用da
  • 为什么在SciPy中使用integrate.odeint时不调用Dfun(gradient)?

    任何人都可以提供一个向 a 提供雅可比行列式的示例吗 integrate odeintSciPy 中的函数 我尝试从 SciPy 教程运行此代码代码示例 http docs scipy org doc scipy dev reference
  • gwt 中的会话管理

    我正在开发 GWT ext 应用程序 在此应用程序中 我管理客户端会话 为此我写了下面的代码 管理会话 导入 com google gwt user client Timer public class ClientTimers privat
  • 创建霍夫曼树时增加权重时哪个节点向左或向右

    我正在尝试创建一棵霍夫曼树 但阅读互联网上的几个链接时我有点困惑 有些在左侧添加较大 就权重而言 的子节点 有些在右侧添加 所以我的问题是 1 在哪里添加节点 左边还是右边 真的有问题吗 2 我可以在右侧添加权重较大的节点还是在左侧添加权重
  • 使用映射与记录之间的差异以及何时使用

    我正在尝试将一些使用 Map 的 Java 代码映射到 Typescript 代码 我最初的想法是在 Typescript 中使用 Map 但对于我创建的界面来说这并没有成功 相反 我发现 Records 似乎完美地模拟了 Java 的 M
  • Nodejs API 调用将未定义返回到 lambda 函数

    这是将调用 api 的 aws lambda 函数 use strict var request require request exports handler function event context callback let url
  • 添加对旧变更日志文件的更改。液体碱

    我有很多包含数据库初始数据的变更日志文件 之前所有表都位于 Postgres 公共模式中 但现在我已将它们分布在不同模式之间 以便初始数据的更改无法到达表 我可以用初始数据更改所有旧文件并添加 schemaName my schema 还是
  • 从电子邮件标头转换数据

    有谁可以帮助我如何转换电子邮件标题中的数据 我有电子邮件标题中的下一个日期格式 Wed 28 Apr 2010 21 59 49 0400 我需要将它们转换为 mysql 日期或时间戳 谢谢 你应该使用DateTime http php n
  • 让其他人可以在 Xcode 中访问我的开发团队

    我有一个 单一会员 Apple 会员资料 与我合作的一位开发人员需要访问我的开发团队来测试他在其设备上构建的应用程序 Xcode 不允许他在没有该资料的情况下构建应用程序 我怎样才能让他访问开发团队 而不必向他提供我帐户的登录凭据 由于您拥
  • 如何从另一张表中获取精确匹配的数据?

    我在 数据库 工作表中有数据 如下所示 我编写了一个简短的代码来获取与 数据库 工作表中的某些条件匹配的数据 并将其粘贴到另一张 选定记录 工作表上 这是我的代码 Sub CopyData Dim db As Worksheet Dim r
  • 我应该将私有类方法设置为静态吗?

    是否有将类中的私有方法设为静态的最佳实践 我有一堂有几种方法的课 其中一些可以很容易地静态化 因为它们只是处理数据 我应该让它们静态还是让它们保持原样 这更多的是风格问题吗 有性能方面的考虑吗 Edit 方法可以变成静态的 但是应该吗 ht
  • 为什么 strdup 被认为是邪恶的

    我看过一些海报说strdup是邪恶的 对此有共识吗 我使用它时没有任何负罪感 并且看不出为什么它比使用它更糟糕malloc memcpy 我唯一能想到的可能是赚钱strdup众所周知 调用者可能会滥用它 例如 没有意识到他们必须释放返回的内
  • 将秒转换为分钟、小时和天的函数

    问题 编写一个程序 要求用户输入秒数 其工作原理如下 一分钟有 60 秒 如果用户输入的秒数大于或等于 60 则程序应显示该秒数中的分钟数 一小时有 3600 秒 如果用户输入的秒数大于或等于 3600 则程序应显示该秒数内的小时数 一天有
  • 添加 Sprite 的多个实例?

    我正在构建一个自定义图像选择器 它显示 6 个替代版本 然而 照片只显示在第 6 件商品上 model selectedPhoto返回一个 Sprite 并且不会让应用程序正常运行 但是当我使用 model photos ii 每个项目都添
  • 何时在 TypeScript / Angular 中使用接口和模型

    我最近观看了有关 Angular 2 with TypeScript 的教程 但不确定何时使用接口以及何时使用数据结构模型 接口示例 export interface IProduct ProductNumber number Produc
  • Blazor 服务器端应用程序上的子 Blazor 应用程序

    将客户端 Blazor 应用添加到服务器端 Blazor 应用 Hi 继续这里的有用答案 升级到预览版 6 后 Blazor 子应用程序出现 404 错误 https stackoverflow com questions 56586677
  • 如何在新的 AppDomain 中运行 WPF 应用程序?执行程序集失败

    我正在尝试使用应用程序域从控制台应用程序启动 WPF 应用程序 但当我这样做时 我会收到意想不到的错误 独立运行 WPF 应用程序可以正常工作 这段代码也有效 var baseDirectory AppDomain CurrentDomai
  • 更多 coproc 问题

    这是后续bash coproc 和剩余的 coproc 输出 https stackoverflow com questions 7651946 我最终决定一次一行处理文件的习惯用法是 coproc cat auto etc build c