Учитывая трубопроводную что-то вроде "A | B | C | D | E", я хочу сделать шаг C обусловливающие результат шага B. Что-то вроде этого:Условный шаг в трубопроводе
A | B | if [ $? -ne 0 ]; then C; else cat; fi | D | E
Но это, похоже, не работает; C никогда не выполняется независимо от результата B. Я ищу лучшее решение.
Я понимаю, что каждый шаг конвейера работает в собственной подоболочке. Поэтому я не могу передать переменную среды обратно в конвейер. Но этот конвейер находится в среде Gnu Parallel, где многие такие конвейеры работают одновременно, и ни один из них не знает какого-либо уникального значения (они просто обрабатывают поток данных и не нуждаются в источнике, родительский скрипт обрабатывает необходимое разделение). Это означает, что использование временного файла также нецелесообразно, так как нет никакого способа сделать имена файлов уникальными. Даже $$, похоже, не дает мне значения, которое одинаково для каждого из шагов.
Вы можете посмотреть 'set -o pipefail', но более реалистично вам просто нужно разбить свои команды, а не использовать один конвейер. –