You are looking at historical revision 22805 of this page. It may differ significantly from its current revision.



Invoke shell commands


[syntax] (run COMMAND ...)

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.


[syntax] (run* COMMAND ...)

Similar to run but returns the return status of each command as multiple result values.


[syntax] (shell COMMAND ...)

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.


[procedure] (execute COMMANDLIST #!key status verbose)

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.


[parameter] shell-verbose

When true, shell commands invoked via run, run* and shell are displayed on the port given by (current-output-port).


Felix Winkelmann


 This code is in the public domain

Version History

initial version