public void commandLoop() throws IOException
    {
        for (Object handler : allHandlers)
        {
            if (handler instanceof ShellManageable)
            {
                ((ShellManageable)handler).cliEnterLoop();
            }
        }
        output.output(appName, outputConverter);
        String command = "";
        while (!command.trim().equals("exit"))
        {
            try
            {
                command = input.readCommand(path);
                processLine(command);
            }
            catch (TokenException te)
            {
                lastException = te;
                output.outputException(command, te);
            }
            catch (CLIException clie)
            {
                lastException = clie;
                if (!command.trim().equals("exit"))
                {
                    output.outputException(clie);
                }
            }
        }
        for (Object handler : allHandlers)
        {
            if (handler instanceof ShellManageable)
            {
                ((ShellManageable)handler).cliLeaveLoop();
            }
        }
    }