struct
let glob ?(null=false) (args:filexpr) =
let shopt = ("shopt "^(if null then "-s" else "-u")^" nullglob\n") in
let cmd = shopt^"for i in \"$@\"; do echo $i; done" in
make ~at:Treat.identity ~ot:String.Text.of_string cmd ~script:true ~args:(Some args) ();;
let cat ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "cat" ~opt ~args:(Some arg) ();;
let cut ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "cut" ~opt ~args:(Some arg) ();;
let head ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "head" ~opt ~args:(Some arg) ();;
let nl ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "nl" ~opt ~args:(Some arg) ();;
let sort ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "sort" ~opt ~args:(Some arg) ();;
let tac ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "tac" ~opt ~args:(Some arg) ();;
let tail ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "tail" ~opt ~args:(Some arg) ();;
let uniq ?(opt="") (arg:filexpr) =
make ~at:Treat.identity ~ot:String.Text.of_string "uniq" ~opt ~args:(Some arg) ();;
end