module Language.Bash.Lib where
import Data.Monoid
import Data.ByteString.Char8 (ByteString, pack)
import Language.Bash.Syntax
cmd :: Expression t -> [Expression t] -> Statement t
cmd expr exprs = SimpleCommand expr exprs
esed :: (Monoid m) => Identifier -> Bool -> Annotated m
esed ident d | not d = setGNUorBSD
| otherwise = ann_ (Sequence decl setGNUorBSD)
where
[sed, fgrep, decl, setr, setE, checkGNU, setGNUorBSD] = fmap ann_
[ cmd "sed" ["--version"]
, cmd "fgrep" ["-q", "GNU"]
, ArrayDecl ident []
, ArrayAssign ident ["sed", "-r"]
, ArrayAssign ident ["sed", "-E"]
, Pipe sed fgrep
, IfThenElse checkGNU setr setE ]
for
:: (Monoid m, Integral i, Show i)
=> Identifier -> i -> i -> Annotated m -> Statement m
for ident a z ann = For ident [EvalUnquoted (ann_ (seqAZ a z))] ann
seqAZ :: (Integral i, Show i) => i -> i -> Statement t
seqAZ a z = SimpleCommand "seq" [lshow a, lshow z]
where
lshow = literal . pack . show . toInteger
setSafe :: Statement t
setSafe = SimpleCommand "set" [ "-o", "errexit"
, "-o", "nounset"
, "-o", "pipefail" ]
sudo_write :: (Monoid m) => Expression m -> Statement m
sudo_write path = Redirect (ann_ tee) Out 1 (Left "/dev/null")
where
tee = SimpleCommand "sudo" ["tee", path]
ann_ :: (Monoid m) => Statement m -> Annotated m
ann_ = Annotated mempty