bashlex icon indicating copy to clipboard operation
bashlex copied to clipboard

won't parse 'rm -f !(file.sh)'

Open blurrymoi opened this issue 9 years ago • 4 comments

bashlex.errors.ParsingError: unexpected token '(' (position 7)

May be caused by the fact that '!' is interpreted as WORD instead of BANG.

blurrymoi avatar Feb 28 '16 08:02 blurrymoi

Huh. I recognize the ! for history expansion, but what does !(file.sh) do?

idank avatar Mar 01 '16 00:03 idank

It's for pattern matching to exclude a single file so that it removes everything but the file. http://wiki.bash-hackers.org/syntax/pattern#extended_pattern_language

blurrymoi avatar Mar 01 '16 09:03 blurrymoi

Oh, nice. Hmm, guess we have to debug bash again to see where we go wrong.

idank avatar Mar 07 '16 02:03 idank

In a Python interactive session with the following setup:

Python 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bashlex
>>> bashlex.parse('rm -f !(file.sh)')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/.local/lib/python3.10/site-packages/bashlex/parser.py", line 610, in parse
    parts = [p.parse()]
  File "/home/user/.local/lib/python3.10/site-packages/bashlex/parser.py", line 691, in parse
    tree = theparser.parse(lexer=self.tok, context=self)
  File "/home/user/.local/lib/python3.10/site-packages/bashlex/yacc.py", line 537, in parse
    tok = self.errorfunc(errtoken)
  File "/home/user/.local/lib/python3.10/site-packages/bashlex/parser.py", line 548, in p_error
    raise errors.ParsingError('unexpected token %r' % p.value,
bashlex.errors.ParsingError: unexpected token '(' (position 7)

Error is still persisting, no additional revelations, just additional test data.

samlikins avatar May 17 '23 21:05 samlikins