@WorkerThread
    public static CommandResult run(@NonNull String... commands) {
      try {
        Console console = SU.getConsole();
        return console.run(commands);
      } catch (ShellNotFoundException e) {
        return new CommandResult(
            Collections.<String>emptyList(), Collections.<String>emptyList(), ShellExitCode.SHELL_NOT_FOUND);
      }
    }
<p>Runs commands as root (if available) and return output.</p>

<p>The commands are run in an interactive shell that remains open after the commands finish execution. This is
done so the superuser management app does not continually show toast messages for granting root access. If you
want to run commands in a shell that exits on completion use {@link Shell#run(String, String...)} or
{@link Shell#run(String, String[], String[])}. You can also open your own interactive shell using {@link
Builder} or {@link Console.Builder}.</p>

@param commands
    The commands to run
@return Output of the commands, or null if root isn't available or in case of an error
imitate/src/main/java/com/engineer/imitate/shell/Shell.java