diff --git a/CHANGES.rst b/CHANGES.rst index aba2f966a..bbbe3a808 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -29,6 +29,8 @@ New Features in 0.5.0 - Support for QEMU Q35 machine added. - `UBootDriver` now handles idle console, allowing driver activation on an interupted U-Boot. +- `ShellDriver` now handles bracketed-paste mode (default in bash >= 5.1, + readline >= 8.1) Bug fixes in 0.5.0 ~~~~~~~~~~~~~~~~~~ diff --git a/labgrid/driver/shelldriver.py b/labgrid/driver/shelldriver.py index 3ed728aa8..cf1aa2a48 100644 --- a/labgrid/driver/shelldriver.py +++ b/labgrid/driver/shelldriver.py @@ -95,8 +95,9 @@ def _run(self, cmd, *, timeout=30.0, codec="utf-8", decodeerrors="strict"): # hide marker from expect cmp_command = f'''MARKER='{marker[:4]}''{marker[4:]}' run {shlex.quote(cmd)}''' self.console.sendline(cmp_command) + # match output by run function, bracketed-paste escape sequence (optionally), prompt _, _, match, _ = self.console.expect( - rf'{marker}(.*){marker}\s+(\d+)\s+{self.prompt}', + rf'{marker}(.*){marker}\s+(\d+)\s+(\x1b\[\?2004h)?{self.prompt}', timeout=timeout ) # Remove VT100 Codes, split by newline and remove surrounding newline @@ -200,8 +201,9 @@ def _check_prompt(self): # hide marker from expect self.console.sendline(f"echo '{marker[:4]}''{marker[4:]}'") try: + # match marker, bracketed-paste escape sequence (optionally), prompt self.console.expect( - rf"{marker}\s+{self.prompt}", + rf"{marker}\s+(\x1b\[\?2004h)?{self.prompt}", timeout=5 ) self._status = 1