{-# Language OverloadedStrings #-} {-# Language ExtendedDefaultRules #-} {-# Language ScopedTypeVariables #-} {-# OPTIONS_GHC -fno-warn-type-defaults #-} import Shelly import Shelly.Background import Data.Text.Lazy (Text, stripEnd) import Test.HUnit default (Text) shIOUnit :: ShIO () shIOUnit = do cmd "pwd" chdir ".." $ cmd "pwd" main :: IO () main = do -- stdin shelly $ do setStdin "in" let overStdin = "override stdin" setStdin overStdin over <- run "cat" ["-"] liftIO $ stripEnd over @?= overStdin -- various uses of cmd shelly $ do recho <- cmd "echo" "cmd" _<-cmd "echo" "bar" "baz" echo recho (res :: Text) <- cmd "pwd" liftIO $ putStrLn $ show res inspect res inspect =<< (cmd "echo" "compose" :: ShIO Text) inspect =<< (cmd "pwd") -- this somehow forces more evaluation shIOUnit -- waiting on background jobs shelly $ do jobs 2 $ \job -> do _<- background job $ cmd "sleep" "2" echo "immediate" _<- background job $ cmd "sleep" "2" echo "immediate2" _<- background job $ cmd "sleep" "2" echo "blocked by background " echo "blocked by jobs"