public synchronized void addCommand(@NonNull String[] commands, int code,
                                        @Nullable OnCommandResultListener resultListener) {
      this.commands.add(new Command(commands, code, resultListener, null));
      runNextCommand();
    }
<p>Add commands to execute, with a callback to be called on completion (of all commands)</p>

<p>The thread on which the callback executes is dependent on various factors, see {@link Shell.Interactive}
for further details</p>

@param commands
    Commands to execute
@param code
    User-defined value passed back to the callback
@param resultListener
    Callback to be called on completion (of all commands)
imitate/src/main/java/com/engineer/imitate/shell/Shell.java