Ответ акцептора правильный, но он не охватывает потенциальный случай использования, чтобы не иметь выход A
в качестве входа D
. Для этого вам понадобится перенаправление потока на A
в зависимости от ваших потребностей.
Если вы хотите отбросить вывод A
в любом случае:
{ A >/dev/null && B || C; } | D
Если вы хотите увидеть вывод A
на терминале:
{ A >/dev/tty && B || C; } | D
Если вам нужен вывод A
как вход последующей команды E
, вам понадобится дополнительная группа команд и перенаправление потока:
{ { A >&3 && B || C; } | D; } 3>&1 | E
Если все это кажется вам слишком заумным (как и мне), я рекомендую использовать специальную переменную shell для статуса выхода A
и работать с ней:
A
if [ $? -eq 0 ]; then
B
else
C
fi |
D
Если вы хотите быть более кратким, но не слишком заумным, я предлагаю следующее:
A; { [ $? -eq 0 ] && B || C; } | D
(См. также последнюю часть ответа hvd, которую я не заметил, когда писал свой первоначальный ответ)
.