Append a raw command to the scrim. This text will be appeneded to
        the output of :meth:`scrim.to_string` verbatim. Use required_shell to
        specify the shell which this raw command is applicable to.

        Examples:
            >>> scrim = Scrim()
            >>> scrim.raw('cat text.txt', 'bash')
            >>> scrim.raw('type text.txt', 'cmd.exe')
            >>> scrim.raw('Get-Content text.txt', 'powershell.exe')
            >>> scrim.to_bash()
            'cat text.txt'
            >>> scrim.to_cmd()
            'type text.txt'
            >>> scrim.to_powershell()
            'Get-Content text.txt'

def raw(self, command, required_shell):
        '''Append a raw command to the scrim. This text will be appeneded to
        the output of :meth:`scrim.to_string` verbatim. Use required_shell to
        specify the shell which this raw command is applicable to.

        Examples:
            >>> scrim = Scrim()
            >>> scrim.raw('cat text.txt', 'bash')
            >>> scrim.raw('type text.txt', 'cmd.exe')
            >>> scrim.raw('Get-Content text.txt', 'powershell.exe')
            >>> scrim.to_bash()
            'cat text.txt'
            >>> scrim.to_cmd()
            'type text.txt'
            >>> scrim.to_powershell()
            'Get-Content text.txt'
        '''

        if not isinstance(command, basestring):
            raise TypeError(f('{command} must be a string'))

        if required_shell not in SHELLS:
            raise ValueError(f('{required_shell} must be one of {SHELLS}'))

        self.commands.append(RawCommand(command, required_shell))