10. Execution
This section describes how to set up a Spring Shell to work in interactive mode.
10.1. Interaction Mode
Version 2.1.x introduced built-in support to distinguish between interactive and non-interactive modes. This makes it easier to use the shell as a simple command-line tool without requiring customization.
Currently, interactive mode is entered if any command line options are passed when starting or running a shell from a command line. This works especially well when a shell application is compiled with Native Support.
Some commands may not have any useful meanings when they run in interactive mode
or (conversely) in non-interactive mode. For example, a built-in exit command would
have no meaning in non-interactive mode, because it is used to exit interactive mode.
The @ShellMethod annotation has a field called interactionMode that you can use to inform
shell about when a particular command is available.
10.2. Shell Runners
ShellApplicationRunner is a main interface where Boot’s ApplicationArguments are passed
and its default implementation makes a choice which ShellRunner is used. There can be
only one ShellApplicationRunner but it can be redefined if needed for some reason.
Three ShellRunner implementation exists, named InteractiveShellRunner,
NonInteractiveShellRunner and ScriptShellRunner. These are enabled on default but
can be disable if needed using properties spring.shell.interactive.enabled,
spring.shell.noninteractive.enabled and spring.shell.script.enabled respecively.