Invoke shell commands
- (run COMMAND ...) syntax
Invokes each COMMAND as a shell command. COMMAND may be of any data type and is flattened and converted to a string. COMMAND is also implicitly quasiquoted so subexpressions may be computed at run-time by unquoting them. Returns an unspecified value.
Note that expressions and subforms are not automatically escaped, so
(run (ls a "b c"))
will pass 3 arguments to the ls command.
- (run* COMMAND ...) syntax
Similar to run but returns the return status of each command as multiple result values.
- (capture COMMAND ...) syntax
Similar to run but captures everything written by the subprocess to stdout and returns the output as a string. In case the command fails, an empty string is returned (there is currently no way to distinguish between a failed command and one that produces no output).
- (shell COMMAND ...) syntax
Returns a procedure that, when invoked will run the given shell commands. The procedure accepts the same keyword arguments as execute. Note that unquoted subexpressions in the command-list are evaluated when the procedure is invoked, not when it is created.
- (execute COMMANDLIST #!key status verbose) procedure
Converts COMMANDLIST to a string by flattening the list-structure of each command and interspersing it with whitespace (" ") and invokes it as a shell command. If status is given and true, then execute returns the exit status, with one result value for each element in COMMANDLIST. If verbose is given and true, it overrides the current setting of shell-verbose.
This is the underlying primitive used by run[*] and shell.
- shell-verbose parameter
When true, shell commands invoked via run, run* and shell are displayed on the port given by (current-output-port).
This code is in the public domain
- added capture
- initial version