给定一个类似于“A|B|C|D|E”的管道,我想让步骤 C 以步骤 B 的结果为条件。如下所示:
A | B | if [ $? -ne 0 ]; then C; else cat; fi | D | E
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用;无论 B 的结果如何,C 都不会被执行。我正在寻找更好的解决方案。
据我了解,管道的每个步骤都在其自己的子 shell 中运行。所以我无法将环境变量传递回管道。但这个管道处于 Gnu Parallel 环境中,其中许多这样的管道同时运行,并且它们都不知道任何唯一值(它们只是处理数据流,不需要知道源,父脚本处理必要的分离)。这意味着使用临时文件也不实用,因为没有任何方法可以使文件名唯一。即使 $$ 似乎也没有给我每个步骤中相同的值。