首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分从bash进程替换中消耗,挂起它,并在另一个函数中读取其馀部分。

部分从bash进程替换中消耗,挂起它,并在另一个函数中读取其馀部分。
EN

Stack Overflow用户
提问于 2015-07-23 08:34:33
回答 2查看 77关注 0票数 1

是否有一种方法只使用来自Bash进程替换的部分数据,挂起进程替换并在另一个函数中读取其馀数据。我想在不将结果存储到中间文件的情况下这样做。我尝试了一个显而易见的方法:将进程替换存储在一个变量中并从中读取,这是行不通的。

我有一个进程,它生成已经包装在进程替换中的数据。让我们说它是<(first_command)。我希望在function-1中部分使用它,然后将其余的数据(由first_command生成)传递给function-2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-23 14:43:39

我会使用显式命名管道代替。

代码语言:javascript
复制
mkfifo pipe
first_command > pipe &
function-1 pipe
function-2 pipe
rm pipe

您还可以在bash 4中使用协进程。

票数 1
EN

Stack Overflow用户

发布于 2015-07-23 11:12:03

如果您将命令的结果存储在一个变量中,那么它应该工作得很好,只是需要通过这两个函数来解析整个数据:

代码语言:javascript
复制
data=$(first_command)
function-1 <(echo "$data")
function-2 <(echo "$data")

或者你可以像下面这样实现它:

代码语言:javascript
复制
first_command | tee >(function-1 /dev/stdin) | function-2 /dev/stdin

我不知道您是否正在实现这些函数,但是如果它在您的控制之下,那么您可以简单地从stdin读取,而不必使用进程替换。但是,如果这些是shell函数,那么请记住,在本例中,您正在子shell中运行它们,并且您在其中更改的任何变量都将丢失。

如果您只想给function-2提供function-1没有处理的部分输出,那么如果函数不在您的控制之下,我就不知道该如何做。如果它确实是一个shell函数,那么您可以这样做:

代码语言:javascript
复制
function-1() {
    while need_to_process_more; do
        read line
        ...
    done
    cat
}

function-2() {
    ...
}

...

first_command | function-1 | function-2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31582161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档