Я бы поместил инструкции по компиляции в скрипт bash и использовал бы его функцию pipefail:
Состояние выхода конвейера - это состояние выхода последней команды в конвейере, если толькоопция pipefail включена.Если pipefail включен, состояние возврата конвейера - это значение последней (самой правой) команды для выхода с ненулевым статусом или ноль, если все команды завершаются успешно.
Давайте попробуем это спростой тест:
$ cat bash_pipe.sh
#!/bin/bash
set -o pipefail
ls $1 2>&1 | perl -ne '{print;}'
Если мы запустим его с существующим файлом, код выхода будет равен 0 (передается через канал):
$ ./bash_pipe.sh bash_pipe.sh
bash_pipe.sh
$ echo $?
0
С другой сторонысбой команды с несуществующим файлом:
./bash_pipe.sh inexistent
ls: cannot access inexistent: No such file or directory
echo $?
2
Так что в вашем случае вам нужно поместить инструкции компиляции в скрипт типа
$ cat compilation_script.sh
#!/bin/bash
set -o pipefail
cc166.exe SOME_FLAGS_HERE $1 2>&1 | TaskingVXToVisualReformat.exe
и вызвать его напрямую (если вы можете) или косвенно через
bash -c "compilation_script.sh MyCFile.c"
Примечание: опция pipefail была введена в bash версии 3.