This version is still in development and is not considered stable yet. For the latest stable version, please use Spring Shell 3.2.4!

Exit Code Mappings

Default behaviour of an exit codes is as:

  • Errors from a command option parsing will result code of 2

  • Any generic error will result result code of 1

  • Obviously in any other case result code is 0

Every CommandRegistration can define its own mappings between Exception and exit code. Essentially we’re bound to functionality in Spring Boot regarding exit code and simply integrate into that.

Assuming there is an exception show below which would be thrown from a command:

static class MyException extends RuntimeException {

	private final int code;

	MyException(String msg, int code) {
		super(msg);
		this.code = code;
	}

	public int getCode() {
		return code;
	}
}

It is possible to define a mapping function between Throwable and exit code. You can also just configure a class to exit code which is just a syntactic sugar within configurations.

CommandRegistration.builder()
	.withExitCode()
		.map(MyException.class, 3)
		.map(t -> {
			if (t instanceof MyException) {
				return ((MyException) t).getCode();
			}
			return 0;
		})
		.and()
	.build();
Exit codes cannot be customized with annotation based configuration