从bash进程替换部分消耗,暂停它并从另一个函数中读取其余部分

时间:2015-07-23 08:34:33

标签: bash process-substitution

是否有办法仅使用Bash进程替换的一部分数据,暂停进程替换并从另一个函数中读取剩余数据。我想这样做而不将结果存储到中间文件中。我尝试了显而易见的事情:将流程替换存储在变量中并从中读取,这不起作用。

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

2 个答案:

答案 0 :(得分:1)

如果将命令的结果存储在变量中,它应该可以正常工作,除了你需要通过两个函数解析整个数据:

data=$(first_command)
function-1 <(echo "$data")
function-2 <(echo "$data")

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

first_command | tee >(function-1 /dev/stdin) | function-2 /dev/stdin

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

如果您只想给function-2function-1未处理的输出部分,我不知道如果功能不在您的控制范围内,该怎么做。如果它确实是一个shell函数,那么你可以这样做:

function-1() {
    while need_to_process_more; do
        read line
        ...
    done
    cat
}

function-2() {
    ...
}

...

first_command | function-1 | function-2

答案 1 :(得分:1)

我会使用显式命名管道。

mkfifo pipe
first_command > pipe &
function-1 pipe
function-2 pipe
rm pipe

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