【发布时间】:2017-01-18 07:56:50
【问题描述】:
给定一个类似于“A|B|C|D|E”的管道,我想让步骤 C 以步骤 B 的结果为条件。像这样:
A | B | if [ $? -ne 0 ]; then C; else cat; fi | D | E
但这似乎不起作用;无论 B 的结果如何,C 都不会执行。我正在寻找更好的解决方案。
我了解管道的每个步骤都在其自己的子外壳中运行。所以我不能将环境变量传递回管道。但是这个管道是在一个 Gnu Parallel 环境中,其中许多这样的管道同时运行并且它们都不知道任何唯一值(它们只处理数据流并且不需要知道源,父脚本处理必要的分离)。这意味着使用临时文件也不可行,因为没有任何方法可以使文件名唯一。甚至 $$ 似乎也没有在每个步骤中给我一个相同的值。
【问题讨论】:
-
您可能会查看
set -o pipefail,但更现实的是,您只需要分解命令而不是使用单个管道。
标签: bash pipeline environment