úÎv«r+J      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI Safe-Infered< "variadic argument version of run. X The syntax is more convenient but it also allows the use of a FilePath as an argument. * An argument can be a Text or a FilePath. & a FilePath is converted to Text with  . 4 You will need to add the following to your module: $ {-# LANGUAGE OverloadedStrings #-} ' {-# LANGUAGE ExtendedDefaultRules #-} - {-# OPTIONS_GHC -fno-warn-type-defaults #-}  import Shelly  import Data.Text.Lazy as LT  default (LT.Text) Euses System.FilePath.CurrentOS, but can automatically convert a Text Euses System.FilePath.CurrentOS, but can automatically convert a Text )silently uses the Right or Left value of  Filesystem.Path.CurrentOS.toText )A helper to catch any exception (same as  ... J (e :: SomeException) -> ...). &Catch an exception in the ShIO monad. &Catch an exception in the ShIO monad. EChange current working directory of ShIO. This does *not* change the I working directory of the process we are running it. Instead, ShIO keeps J track of its own workking directory and builds absolute paths internally C instead of passing down relative paths. This may have performance D repercussions if you are doing hundreds of thousands of filesystem N operations. You will want to handle these issues differently in those cases. cdY, execute a ShIO action in the new directory and then pop back to the original directory )makes an absolute path. Same as canonic. * TODO: use normalise from system-filepath makes an absolute path. path will also normalize  Currently a  renameFile) wrapper. TODO: Support cross-filesystem F move. TODO: Support directory paths in the second parameter, like in cp. Get back [Text] instead of [FilePath] ,List directory contents. Does *not* include "." and "..", but it does  include (other) hidden files. 3List directory recursively (like the POSIX utility find). -Obtain the current (ShIO) working directory. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. GEcho text to standard (error, when using _err variants) output. The _n ( variants do not print a final newline. !fail that takes a Text "a print lifted into ShIO #8Create a new directory (fails if the directory exists). $ECreate a new directory, including parents (succeeds if the directory  already exists). %$Get a full path to an executable on PATH, if exists. FIXME does not  respect setenv'd environment and uses PATH inherited from the process  environment. &IObtain a (reasonably) canonic file path to a filesystem object. Based on  canonicalizePath in FileSystem. '%A monadic-conditional version of the when guard. (%A monadic-conditional version of the unless guard. )4Does a path point to an existing filesystem object? *'Does a path point to an existing file? +,Does a path point to an existing directory? , Does a path point to a symlink? -KA swiss army cannon for removing things. Actually this goes farther than a K normal rm -rf, as it will circumvent permission problems for the files we  own. Use carefully. .IRemove a file. Does not fail if the file already is not there. Does fail  if the file is not a file. /CSet an environment variable. The environment is maintained in ShIO D internally, and is passed to any external commands to be executed. 0,add the filepath onto the PATH env variable 1CFetch the current value of an environment variable. Both empty and 7 non-existent variables give empty string as a result. 2CFetch the current value of an environment variable. Both empty and ; non-existent variables give the default value as a result 3HCreate a sub-ShIO in which external command outputs are not echoed. See sub. 4DCreate a sub-ShIO in which external command outputs are echoed. See sub. 5DCreate a sub-ShIO in which external command outputs are echoed. See sub. 6EEnter a sub-ShIO that inherits the environment and working directory B The original state will be restored when the sub-ShIO completes. $Exceptions are propagated normally. 7IEnter a ShIO from (Monad)IO. The environment and working directories are K inherited from the current process-wide values. Any subsequent changes in G processwide working directory or environment are not reflected in the  running ShIO. 8GExecute an external command. Takes the command name (no shell allowed, 0 just a name of something that can be found via PATH; FIXME: setenv'd  PATHC is not taken into account, only the one inherited from the actual . outside environment). Nothing is provided on stdin of the process, and  stdout and stderr are collected and stored. The stdout is returned as  a result of run?, and complete stderr output is available after the fact using   lastStderr 4All of the stdout output will be loaded into memory : You can avoid this but still consume the result by using run', + or if you need to process the output than  runFoldLines 9&bind some arguments to run for re-use  Example: monit = command monit [-c, monitrc] :bind some arguments to run_ for re-use  Example: monit_ = command_ monit [-c, monitrc] ;=bind some arguments to run for re-use, and expect 1 argument  Example: git = command1 git []; git pull [origin, master] <=bind some arguments to run for re-use, and expect 1 argument  Example: git_ = command1_ git []; git+ pull [origin, master] >)The output of last external command. See run. ?1set the stdin to be used and cleared by the next run. @LPipe operator. set the stdout the first command as the stdin of the second. AJRun a ShIO computation and collect timing (TODO: and memory) information. B)Copy a file, or a directory recursively. CECopy a file. The second path could be a directory, in which case the 0 original file name is used, in that directory. DCLike filter, but more conveniently used with String lists, where a O substring match (TODO: also provide regexps, and maybe globs) is expressed as  grep "needle" [ "the", "stack", "of", "hay" ] . Boolean  predicates just like with filter are supported too:  grep ("fun"  isPrefixOf) [...]. E(A functor-lifting function composition. FBCreate a temporary directory and pass it as a parameter to a ShIO 1 computation. The directory is nuked afterwards. GWrite a Lazy Text to a file. HAppend a Lazy Text to a file. I"(Strictly) read file into a Text. $ All other functions use Lazy Text. h So Internally this reads a file as strict text and then converts it to lazy text, which is inefficient S  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIKLMNOPQRSTUVWJ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ763458= @>?9:;</120")*+,% .-CB#$IGHF !ED'(&A Q  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIKLMNOPQRSTUVWX       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ shelly-0.6Shellybase Data.Functor<$> Control.Monadunlesswhentransformers-0.3.0.0Control.Monad.IO.ClassliftIOMemTime RunFailedShIOcmd<.> toTextIgnore toTextWarnfromTextcatchanycatch_sh catchany_shcdchdirpathabsPathmvls'lsfindpwdechoecho_necho_err echo_n_errexit errorExitterrorinspectmkdirmkdir_pwhichcanonicwhenMunlessMtest_etest_ftest_dtest_srm_rfrm_fsetenv appendToPathgetenv getenv_defsilently verboselyprint_commandssubshellyruncommandcommand_command1 command1_run_ lastStderrsetStdin-|-timecp_rcpgrep<$$> withTmpDir writefile appendfilereadfileControl.Exception.Basecatch$fPredicateLike[][]$fPredicateLike(->)a$fExceptionRunFailed$fShowRunFailed$fShellCommand(->)$fShellCommandReaderT$fShellCommandReaderT0$fShellArgFilePath$fShellArgText$fToFilePath[]$fToFilePathText$fToFilePathText0$fToFilePathFilePath