相关疑难解决方法(0)

bash coproc和剩余的coproc输出

我需要在bash脚本中将一些配置数据读入环境变量中.

"明显的"(但不正确)模式是:

egrep "pattern" config-file.cfg | read VAR1 VAR2 VAR3 etc...
Run Code Online (Sandbox Code Playgroud)

这会失败,因为read它在子shell中运行,因此无法在调用shell中设置变量.所以我想出了这个作为替代方案

coproc egrep "pattern" config-file.cfg
read -u ${COPROC[0]} VAR1 VAR2 VAR3 etc...
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

为了测试如果协同进程返回多行会发生什么,我尝试了这个:

coproc cat config-file.cfg
read -u ${COPROC[0]} VAR1 VAR2 VAR3 etc...
Run Code Online (Sandbox Code Playgroud)

其中config-file.cfg包含三行.

$ cat config-file.cfg
LINE1 A1 B1 C1
LINE2 A2 B2 C2
LINE3 A3 B3 C3
Run Code Online (Sandbox Code Playgroud)

我希望这会处理文件中的第一行,然后是某种"破管"错误消息.虽然它确实处理了第一行,但没有任何错误消息,也没有任何协同进程继续运行.

所以我在脚本中尝试了以下内容:

$ cat test.sh
coproc cat config-file.cfg
read -u ${COPROC[0]} VAR1 VAR2 VAR3 VAR4
echo $VAR1 $VAR2 $VAR3 $VAR4
wait
echo $? …
Run Code Online (Sandbox Code Playgroud)

bash coproc

10
推荐指数
1
解决办法
3920
查看次数

标签 统计

bash ×1

coproc ×1