public synchronized void addCommand(@NonNull String[] commands, int code,
                                        @Nullable OnCommandLineListener onCommandLineListener) {
      this.commands.add(new Command(commands, code, null, onCommandLineListener));
      runNextCommand();
    }
<p>Add commands to execute, with a callback. This callback gobbles the output line by line without buffering
it and also returns the result code on completion.</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 onCommandLineListener
    Callback
imitate/src/main/java/com/engineer/imitate/shell/Shell.java