diff --git a/errors.go b/errors.go
index <HASH>..<HASH> 100644
--- a/errors.go
+++ b/errors.go
@@ -85,10 +85,8 @@ func HandleExitCoder(err error) {
 	}
 
 	if multiErr, ok := err.(MultiError); ok {
-		for _, merr := range multiErr.Errors {
-			fmt.Fprintln(ErrWriter, merr)
-		}
-		OsExiter(1)
+		code := handleMultiError(multiErr)
+		OsExiter(code)
 		return
 	}
 
@@ -97,3 +95,18 @@ func HandleExitCoder(err error) {
 	}
 	OsExiter(1)
 }
+
+func handleMultiError(multiErr MultiError) int {
+	code := 1
+	for _, merr := range multiErr.Errors {
+		if multiErr2, ok := merr.(MultiError); ok {
+			code = handleMultiError(multiErr2)
+		} else {
+			fmt.Fprintln(ErrWriter, merr)
+			if exitErr, ok := merr.(ExitCoder); ok {
+				code = exitErr.ExitCode()
+			}
+		}
+	}
+	return code
+}
Exit with the code of ExitCoder if exists