def parse_line(self, line):
        """Parse a line of input.

        The input line is tokenized using the same rules as the way bash shell
        tokenizes inputs. All quoting and escaping rules from the bash shell
        apply here too.

        The following cases are handled by __exec_line__():
            1.  Empty line.
            2.  The input line is completely made of whitespace characters.
            3.  The input line is the EOF character.
            4.  The first token, as tokenized by shlex.split(), is '!'.
            5.  Internal commands, i.e., commands registered with internal =
                    True

        Arguments:
            The line to parse.

        Returns:
            A tuple (cmd, args). The first element cmd must be a python3 string.
            The second element is, by default, a list of strings representing
            the arguments, as tokenized by shlex.split().

        How to overload parse_line():
            1.  The signature of the method must be the same.
            2.  The return value must be a tuple (cmd, args), where the cmd is
                a string representing the first token, and args is a list of
                strings.
        """
        toks = shlex.split(line)
        # Safe to index the 0-th element because this line would have been
        # parsed by __exec_line__ if toks is an empty list.
        return ( toks[0], [] if len(toks) == 1 else toks[1:] )
Parse a line of input.

        The input line is tokenized using the same rules as the way bash shell
        tokenizes inputs. All quoting and escaping rules from the bash shell
        apply here too.

        The following cases are handled by __exec_line__():
            1.  Empty line.
            2.  The input line is completely made of whitespace characters.
            3.  The input line is the EOF character.
            4.  The first token, as tokenized by shlex.split(), is '!'.
            5.  Internal commands, i.e., commands registered with internal =
                    True

        Arguments:
            The line to parse.

        Returns:
            A tuple (cmd, args). The first element cmd must be a python3 string.
            The second element is, by default, a list of strings representing
            the arguments, as tokenized by shlex.split().

        How to overload parse_line():
            1.  The signature of the method must be the same.
            2.  The return value must be a tuple (cmd, args), where the cmd is
                a string representing the first token, and args is a list of
                strings.