如何读取并行第一步的结果?

如何读取并行第一步的结果?

问题

在 bash 中,您可以通过管道数据逐步传递数据:

program1 | program2 | program3 | ...

或者您可以使用变量来执行此操作(取决于每个程序的工作方式):

RES1=$(program1)
RES2=$(program2 $RES1)
...

我正在寻找这种并行传递数据的对应物。

例子

我尝试将我的“线性”脚本转换为令人惊叹的并行脚本(这个工具仍然为我创造奇迹:-D),但我在阅读和使用第一步的输出时遇到问题。原始版本:

for fn in $(ls $REV *)
do
   DATA=$(sh script1.sh ${fn})
   sh script2.sh $DATA
done

这是我尝试使用以下方法执行此操作的方法parallel

ls $REV * | parallel -j+0 DATA=$(sh script1.sh {}) \; sh script2.sh $DATA

然而,使用此代码myscript会在输入时得到一些损坏的数据。删除了读取结果和第二步的版本可以正常工作:

ls $REV * | parallel -j+0 sh script1.sh {}

那么如何读取第一步的输出parallel并在下一步中使用它呢?

问题

为了更轻松地调试,假设我的第一个脚本 (script1.sh) 是:

echo "RECEIVED THIS ${1}"

主要脚本是:

ls * | parallel -j+0 RES="$(sh script1.sh {})"

(我在这里跳过了 script2 以测试捕获 script1 的输出)。那么整个执行的结果是这样的:

/bin/bash: THIS: command not found
/bin/bash: THIS: command not found
/bin/bash: THIS: command not found
...

相关内容