summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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