По мотивам треда на ЛОРе. Оказывается, есть встроенная функция, вызываемая, если шелл не находит команду – которую, в принципе, можно переопределить:
rain@walkbook:~$ cmd
bash: cmd: команда не найдена
rain@walkbook:~$ command_not_found_handle() { echo 404; }
rain@walkbook:~$ cmd
404
Не знал. Не забываем, кстати, про коды выхода. Если штатно в такой ситуации код выхода != 0, то в примере выше функция завершится со вполне корректным статусом. Т.е., надо что-то вроде command_not_found_handle() { echo 404; exit 1; }