Суть вопроса сформулирована достаточно сумбурно, поясню на примере. Есть примерно такая команда:
git diff --diff-filter=AM --name-only origin/master | grep app/ > ./log
Проблема в том, что сам grep, в случае, если не находит переданную строку (/app), возвращает код 1. Соответственно, используя команду выше, мы вынуждены подавлять его вывод об ошибках примерно так:
git diff --diff-filter=AM --name-only origin/master | grep app/ > ./log || true
Но тут возникает другая проблема. Если например первая часть команды (git diff --diff-filter=AM --name-only origin/master) захочет вернуть какую-либо ошибку, мы подавляем и ее тоже. Пробовал первое, что пришло в голову:
git diff --diff-filter=AM --name-only origin/master | (grep app/ > ./log || true)
и даже так:
git diff --diff-filter=AM --name-only origin/master | (grep app/ || true) > ./log
но ошибка первой команды все равно подавляется. Подскажите, как переписать команду так, чтобы в случае, если первая ее часть выводила ошибку, вызов команды целиком падал с той же ошибкой, а если ошибку выводил grep (1 – строки не найдены), то это подавлялось.