Если запустить из bash:
./MyProgram && echo True || echo False
То для Halt(0) сработает echo True, а для Halt(1) сработает echo False
Ещё так можно в bash писать:
set -e
./Generate_ORM ...
gprbuild ...
7z a ...
sftp ...
ssh ...
Здесь set -e устанавливает режим нетерпимости к ошибкам. Каждый перенос строки или точка с запятой работают как два амперсанда. В этой цепочке если что-то не отработало нормально, дальше исполнение не продолжается. Если исходники не сгенерились, нет смысла их компилировать, а если не скомпилировались, то нет смысла упаковывать скомпилированное, а не если не упаковалось, то нет смысла заливать на сервер, а если не залилось на сервер, то нет смысла удалённо перезапускать сервер. Как правило, кодом завершения процесса программа сообщает, что она не справилась.