Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

  1. Outdated egg!
  2. shell
    1. Introduction
    2. run
    3. run*
    4. capture
    5. shell
    6. execute
    7. shell-verbose
    8. Authors
    9. License
    10. Version History



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] (capture COMMAND ...)

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).


[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

added capture
initial version