diff --git a/shellcheck.hs b/shellcheck.hs
index 3ec71b8..9f7c9b7 100644
--- a/shellcheck.hs
+++ b/shellcheck.hs
@@ -211,8 +211,12 @@ getOption (_:rest) flag def = getOption rest flag def
 main = do
     args <- getArgs
     parsedArgs <- parseArguments args
-    status <- process parsedArgs
-    if status then exitSuccess else exitFailure
+    do
+        status <- process parsedArgs
+        if status then exitSuccess else exitWith (ExitFailure 1)
+    `catch` \err -> do
+        printErr $ show err
+        exitWith $ ExitFailure 2
 
 process Nothing = return False
 process (Just (options, files)) =