Run commands from a user in an interactive fashion until fini() or EOFError is raised.

async def runCmdLoop(self):
        '''
        Run commands from a user in an interactive fashion until fini() or EOFError is raised.
        '''
        while not self.isfini:

            # FIXME completion

            self.cmdtask = None

            try:

                line = await self.prompt()
                if not line:
                    continue

                line = line.strip()
                if not line:
                    continue

                coro = self.runCmdLine(line)
                self.cmdtask = self.schedCoro(coro)
                await self.cmdtask

            except KeyboardInterrupt:

                if self.isfini:
                    return

                self.printf('<ctrl-c>')

            except (s_exc.CliFini, EOFError):
                await self.fini()

            except Exception:
                s = traceback.format_exc()
                self.printf(s)

            finally:
                if self.cmdtask is not None:
                    self.cmdtask.cancel()
                    try:
                        self.cmdtask.result()
                    except asyncio.CancelledError:
                        # Wait a beat to let any remaining nodes to print out before we print the prompt
                        await asyncio.sleep(1)
                    except Exception:
                        pass