summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-08-22 23:19:45 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-08-22 23:19:45 +0200
commit7a0c86835b8bd34c5bbaa0194e298c431d8b2c05 (patch)
treeeed0a5bba816a6581d5c20f25e16d289d142def2 /src
parent9fb76c74b5d30b592bad60de5955b9efa2e6cd65 (diff)
Shell: fix parsing of redirection and pipes followed by some symbols
Diffstat (limited to 'src')
-rw-r--r--src/Parser/Shell.hs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs
index 105edfa..c6c2a40 100644
--- a/src/Parser/Shell.hs
+++ b/src/Parser/Shell.hs
@@ -71,21 +71,23 @@ parseTextArgument = lexeme $ fmap (App AnnNone (Pure T.concat) <$> foldr (liftA2
parseRedirection :: TestParser (Expr ShellArgument)
parseRedirection = choice
[ do
- osymbol "<"
+ rsymbol "<"
fmap ShellRedirectStdin <$> parseTextArgument
, do
- osymbol ">"
+ rsymbol ">"
fmap (ShellRedirectStdout False) <$> parseTextArgument
, do
- osymbol ">>"
+ rsymbol ">>"
fmap (ShellRedirectStdout True) <$> parseTextArgument
, do
- osymbol "2>"
+ rsymbol "2>"
fmap (ShellRedirectStderr False) <$> parseTextArgument
, do
- osymbol "2>>"
+ rsymbol "2>>"
fmap (ShellRedirectStderr True) <$> parseTextArgument
]
+ where
+ rsymbol str = void $ try $ (string str <* notFollowedBy (satisfy $ (`elem` [ '<', '>', '|' ]))) <* sc
parseArgument :: TestParser (Expr ShellArgument)
parseArgument = choice
@@ -115,12 +117,14 @@ parsePipeline mbupper = do
Just upper -> liftA2 (\ecmd eupper -> ShellPipeline ecmd (Just eupper)) cmd upper
choice
[ do
- osymbol "|"
+ psymbol "|"
parsePipeline (Just pipeline)
, do
return pipeline
]
+ where
+ psymbol str = void $ try $ (string str <* notFollowedBy (satisfy $ (`elem` [ '<', '>', '|', '&' ]))) <* sc
parseStatement :: TestParser (Expr [ ShellStatement ])
parseStatement = do