问题标签 [coproc]

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 回答
968 浏览

bash - 如何在 Mac OS X 11 上使用 coproc?

我试图在两个进程之间交叉 io 并且 coproc 似乎没有安装在 OS X 10.11.x 中。

我得到:bash:coproc:找不到命令

我的 bash 版本是:GNU bash,版本 4.3.42(1)-release (x86_64-apple-darwin15.3.0)

如何安装 coproc?

0 投票
3 回答
1165 浏览

bash - 在 Bash 脚本中启动和停止进程

我正在寻找一种干净的方法来启动和停止基于标准输出的 java 进程。基本上我想通过 Bash 中的一个 for 循环,它启动一个带有输入变量的 java 命令,监视 stdout 中的特定字符串“结果:”,然后杀死同一个进程,然后进入下一个进程,启动一个新的 java 进程和继续。

我曾尝试与 coproc 合作,但未能按预期工作。

0 投票
1 回答
934 浏览

shell - 如何在shellscript中执行psql时添加shell命令

目前我正在编写一个在数据库上执行批处理作业的 shell 脚本,我想在执行 psql 时将 shell 脚本操作,如写入日志文件或在某些条件下回滚。像这样

有没有办法找回它?

UPDATE 使用协同进程应该可以正常工作。对于那些遇到同样问题的 UNIX Co 进程

0 投票
1 回答
203 浏览

python - 如何启动后台 shell 或内核(例如 python)、连接到它并检索输出

这似乎很明显,但经过大量搜索后,无法找到正确的搜索词来获得答案。搜索诸如“连接到 python 内核”之类的东西只会找到关于 Jupyter 和 IPython 的页面和页面。

重击

我发现与使用协程的方法很接近。

我的理想是:

然后以某种方式向proc1发送命令并获取输出,然后向 proc2 发送命令获取输出。然后用更多的命令再做一遍。

Python

我确实找到了 Pythonsubprocess和 bash 子shell。但不知道如何让那些在后台继续运行并连接到他们。例如,我可以做

但是我认为如果我杀死启动子进程的进程,那么子进程就会死掉。(一位评论者说使用Shell=True将导致进程保持活动状态,但不确定我将如何访问它。他们删除了评论)。

另外,如何将更多命令传递给进程?文档中没有类似的内容。

请注意这篇文章包含编辑。

0 投票
0 回答
46 浏览

bash - 如何从打开协同进程的父进程的子进程写入协同进程

我在我的主父进程中使用协同进程将命令生成到否则无法解决的 shell(我在协同进程中打开的 shell 不是由我维护的,而是执行阻止我的“newgrp”和“exec”命令只需从我的脚本向该外壳发送命令......所以我需要协进程能够从脚本执行该外壳中的命令)。到目前为止,我一直在使用一个线程,即父进程将命令推送到协进程,但现在我也需要从多个子进程生成命令,因为有一个优化步骤。bash 文档说,文件描述符不被子进程继承,这实际上是真的,当我打开一个子 shell 时,我从 bash 收到以下错误消息:

[...]/automated_integration/clif_ai_common.sh:第 396 行:${!clifAi_sendCmdToCoproc_varName}:错误的文件描述符

使此消息出现的代码如下:

如果我将这段代码移动到一个函数中并使用 & 不带 ( ) 调用它,那么 Bash 会报告相同的错误,因此没有子 shell。这也是可以理解的;它仍然会产生一个子进程,无论是否在子shell中运行它。

我的问题是,我如何也可以从子进程写入父进程拥有的协同进程?最佳做法是什么?

非常感谢, Geza Balazs

0 投票
1 回答
88 浏览

bash - 间接 bash 命令执行无法与 coproc 一起按预期工作

我对 linux shell 脚本很陌生并且有一个问题:

1.) 为什么命令

test1="leafpad" && coproc exec "$test1"

在 bash 中工作(命令行,debian 衍生版 linux 上的 GNU bash 4.4.12),但是命令

test1="coproc" && exec "$test1" leafpad

才不是?错误消息:bash:exec:coproc:未找到。

coproc leafpad 确实按预期工作。

该命令必须如何正确引用才能使其工作?我已经试过了

test1=`coproc` && exec "$test1" leafpad

test1='coproc' && exec "$test1" leafpad

test1="'coproc'" && exec "$test1" leafpad

test1=`coproc` && exec '$test1' leafpad

test1=`coproc` && exec `$test1` leafpad

test1="coproc" && exec $test1 leafpad

test1=`coproc` && exec $test1 leafpad

还有一些变体,但它们都不起作用。

2.) 这只是命令行测试。但我更需要的是在脚本中执行此操作:所以我确信需要做一些额外的引用或伪装特殊字符。

背景:我必须执行一个命令,其中包含许多参数,其中一些被变量替换。想想像 yad 这样的东西,它的所有可能的参数都在几行中,但让我们创建一个更简单的例子:

其中给定的变量是变化的主题,作为之前用户交互的函数。

现在这个完整的命令(原来大约有 6 行代码)需要以两种变体执行:一次由 coproc 领导,另一次不是,作为条件分支的函数。

所以我想要的是:

代替

我已经尝试过另一种方式来管理它,即将完整的冗长命令放在一个变量中,并在一个条件分支中执行它:

这也停止了错误消息“未找到”。不同的引用方式并没有解决它,而只会产生不同的错误消息。我没能找到这个任务的正确引用。如何正确阅读此引用?

当然,我可以重复代码中的 6 行命令,但我很确定这样做会更方便。

如开头所述:只要不涉及 coproc,间接命令执行就可以在命令行(也可以在脚本内)工作。我无法让它与 coproc 一起使用。

任何帮助和提示表示赞赏。


在@Socowi 第一次回答后更新:

感谢您全面而快速的回答,Socowi。你显然是对的,coproc不服从命令。所以我现在明白为什么我的尝试必须失败。该exec命令仅在我的实验期间添加。我开始时没有这个,但在没有成功之后,我认为它会有所帮助。这只是一种绝望的行为。该行中的反向引号my_command=`lengthy command with some arguments $arg1 $arg2 ...`是一个错字,应该有正常的引号,正如你所指出的,因为我打算在if当然中执行命令。我可能会按照您指示我的方式前往,function {...}在脚本中使用。但与此同时,在对这个问题进行了实验后,我得出了一个惊人的解决方案:对我来说很惊讶,因为coproc不听命令和不听命令之间的区别leafpad用它的二进制作为一个命令。所以应该很清楚,这test1='coproc' && test2='leafpad' && "$test1 $test2"将失败并显示错误消息bash: coproc leafpad: command not found.,这是真的。但是现在:为什么test1='coproc' && test2='leafpad' && /bin/bash -c "$test1 $test2"要做这项工作,启动 Leafpad,允许在 bash 中并行输入更多命令,就像我只输入一样leafpad &?但是这次从一个变量执行内置函数(或关键字?)和命令,当尝试直接在第一个 bash 实例中输入它时被拒绝。bash 的第一个实例是正确的,第二个实例也应该是正确的,还是我有一个错误的观点?为什么它会这样工作?该-c选项除了执行命令之外还有什么作用吗?

0 投票
1 回答
63 浏览

bash - Bash:通过管道进行进程的相互交互

环境: Linux/Docker,bash 4.2 版。

问题:

  • server-app接受带有交互式 shell 的命令。
  • server-appclient.sh通过管道接收来自 a 的命令。
  • server-app写入由 接收的标准输出client.sh
  • client.sh考虑server-app的输出以确定进一步的命令。
  • server-app可能还要求输入密码 => 也就是说,终端的标准输入必须server-appclient.sh.

我尝试了多种设置coproc。但是,我要么陷入停滞状态,要么没有收到数据。如何实现如下所示的设置bash

我的尝试:

最后三行仅演示了对server-app' 输出的可能处理。这又有什么问题呢?怎么可能带去上班。