# rerun
**Repository Path**: mirrors_PavanTatikonda/rerun
## Basic Information
- **Project Name**: rerun
- **Description**: Core rerun. See also http://github.com/rerun-modules
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-09
- **Last Updated**: 2026-03-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
% RERUN(1) RERUN User Manual | 1.4.x
# NAME
rerun - a modular shell automation framework to organize your keeper scripts.
# SYNOPSIS
rerun [-h][-v][-V] [-M
] [--loglevel <>] [module:[command [options]]]
# DESCRIPTION
Rerun is a simple framework that turns loose shell scripts
into modular automation. Rerun will help you
organize your scripts into user friendly commands.
Collections of rerun modules can be archived and delivered as
a single executable or as RPMs or Debian packages to facilitate handoffs between teams.
The included "stubbs" module, helps you develop your own rerun modules,
generating option parsing code, documentation even unit tests for each of your commands.
End users can browse and execute commands via its two modes of operation:
1. *Listing*: Rerun lists modules and commands. Listing
information includes name, description and command line usage syntax.
2. *Execution*: Rerun provides option processing (possibly defaulting
unspecified arguments) and executes a script for the specified module command.
For the module developer, rerun is a trivial framework following
simple conventions that easily fit in a shell environment.
The "stubbs" module development tool
helps create and enhance your rerun modules. Stubbs contains
commands to generate option processing code, metadata definition,
execute unit tests and generate documentation.
Internally, `rerun` implements a simple dispatching mechanism to look up named
commands and execute them. *Commands* are logically named and
have a corresponding script.
Commands reside in a module and can have named
parameters called *options*. Each option is named,
described and can also be defined to use a default value
or say whether it is required or not.
Rerun modules can also declare metadata describing name, description
and other aspects of each command. Rerun makes use of this metadata
to support a listing mode, a feature where modules and command usage
are summarized for end users.
See the [project wiki](https://github.com/rerun/rerun/wiki)
for additional documentation including:
* [Getting started](https://github.com/rerun/rerun/wiki)
* [Installation](https://github.com/rerun/rerun/wiki/Installation)
* [Stubbs module tool](https://github.com/rerun/rerun/tree/master/modules/stubbs)
* [Why rerun?](https://github.com/rerun/rerun/wiki/Why-rerun%3F)
# OPTIONS
`-h`
: Print help and usage then exit.
`--loglevel` *level*
: Set the default log level (debug info warn error fatal). See rerun_log API.
`-M` *DIRECTORY*
: Module library directory path.
`-v`
: Execute _command_ in verbose mode.
`-V`
: Execute `rerun` and _command_ in verbose mode.
# USING
## Help
For command line syntax and example usage execute `rerun` using the `--help` flag:
$ ./rerun --help
_ __ ___ _ __ _ _ _ __
| '__/ _ \ '__| | | | '_ \
| | | __/ | | |_| | | | |
|_| \___|_| \__,_|_| |_|
Version: 1.4.x. License: Apache 2.0.
Usage: rerun [-h][-v][-V] [-M ] [module:[command [options]]]
## Listing
Without arguments, `rerun` will list existing modules and
their description and version:
$ rerun
stubbs: "Simple rerun module builder" - 1.1.2
To list the commands available in a module specify the module
name too. Here the commands are listed for the 'stubbs' module:
$ rerun stubbs
add-command: "add command to module"
--command|-c <>: "the command name"
--description <>: "the brief description"
--module|-m <>: "the module name"
[ --overwrite ]: "should overwrite?"
add-module: "add a new module"
--description <>: "the brief description"
--module|-m <>: "the module name"
[ --template <>]: "the template name or path"
.
.
.
The command listing includes the command description and
any options assigned to the command.
Options that declare a default value are shown
with a string between the "<>" characters.
For example, notice how "--overwrite" option shows ``.
The "false" is the default value assigned to the "--overwrite" option.
See the "Environment" section below to learn about the
`RERUN_MODULES` environment variable. This variable
specifies the directory/ies where rerun modules exist.
### Bash completion
If you are a Bash shell user, be sure to source the `bash_completion.sh` file.
It provides listing via the tab key.
Type `rerun` and then the tab key. The shell will generate
a list of existing modules.
$ rerun[TAB][TAB]
stubbs:
Rerun shows the module "stubbs".
Typing the `s` character and the tab key again
will show the commands inside the "stubbs" module:
$ rerun stubbs: [TAB]
add-command add-module add-option archive docs edit migrate rm-option test
Several commands are listed. Press tab again
and choose a command. You can specify the first few characters
and the command name will be completed, too.
After accepting a command, typing the tab key will list the command options.
$ rerun stubbs: add-module -[TAB]
--description --module --template
The `stubbs:add-module` command accepts three options
(--description <> --module <> --template <>).
You can continue using command completion to cycle through
the remaining options.
## Command execution
Commands are executed by stating the module,
command and any command options. The basic usage form is
"`rerun` _module_:_command_ [ _options_ ]".
To run the "archive" command in the stubbs module, type:
$ rerun stubbs:archive
Wrote self extracting archive script: /tmp/rerun.sh
Command options are passed after the "module:command" string.
Run the "stubbs:archive" command but specify where the archive file is written.
$ rerun stubbs:archive --modules waitfor --file $HOME/rerun.sh
If modules are stored in `/var/rerun`, then the command usage
would be:
$ rerun -M /var/rerun stubbs:archive
You can also declare the `RERUN_MODULES` environment variable to sepcify the modules directory path.
### Archives
After arching your rerun modules, you get a single executable file
containing a copy of rerun and one or more modules
(you might have a library of them). The archive uses
the same exact interface as rerun,... all in one file!
Specifically, an archive is a set of modules
and `rerun` itself packaged into a self extracting
script (by default in a file named "rerun.sh").
Archives can be useful if you want
to share a single self contained executable that contains all the needed modules.
Run an archive script like you would run `rerun`.
You can execute an archive via `bash` like so:
$ rerun.sh : --your options
If the execute bit is not set, invoke the archive using bash (e.g., `bash rerun.sh :`).
When the archive is executed without arguments you get module and command listings:
$ ./rerun.sh
waitfor: "utility commands that wait for a condition."
.
. listing output ommitted
Note, ".sh" is just a suffix naming convention for a self-extracting script.
The archive file can be named anything you wish.
Run the `waitfor:ping` command in the archive:
$ ./rerun.sh waitfor:ping --server remoteserver
*Archive special options*
Shell archives can be executed using special parameters of its own.
Below is a list of these optional arguments:
* `--archive-version-release`: Print the archive version and release info and exit.
* `--extract-only|-N <>`: Extract the archive to the specified directory and exit.
* `--extract-dir|-D <>`: Extract the archive to the specified directory and then execute the specified command. By default, the `TMPDIR` environment variable is used to create a directory to extract the archive.
Besies the self extractive archive format, stubbs can also generate RPM and Debian packages.
See `stubbs:archive` for further information about creating and
understanding rerun archives.
# MODULES
## Layout
A rerun module assumes the following structure:
|-- commands
|-- `-- cmdA (each command gets its own subdirectory)
|-- |-- metadata (command metadata containing name, description and options uses)
|-- |-- options.sh (option parsing script)
|-- `-- script (script implementing the command)
|-- lib
|-- `-- functions.sh (module function library)
|-- metadata (module metadata)
|-- options (module options)
| `-- optyY ("optY" option)
| `-- metadata (declares metadata for "optY" option)
`-- tests
`-- cmdA-1-test.sh (unit tests for cmdA)
The "stubbs" module creates this directory structure for you but once you know
the conventions you can create and edit these files directly (if you prefer).
## Command Execution
Rerun's internal dispatch logic uses the directory and file convention
described above to find and execute scripts for each command.
Once the user specifies the module and command to execute, rerun finds the
command's script and executes it.
## Command Line Arguments
Optionally, additional the remaining command line may be accessed via the `_CMD_LINE` environment variable. This may be used in the command's script if required.
For example, assume you have a command which sets up and runs an ubuntu Docker image and maps `./subdirectory` in as the `/opt` directory within the container. Your module name is `docker` and your command is `run-ubuntu`. You have defined a required option named `dir` that specifies which directory to map into the container.
In your `modules/docker/commands/run-ubuntu/script`, you implement your script as follows:
CMD_LINE=${_CMD_LINE:-bash}
IMAGE="ubuntu:16.04"
HOME="-v $(pwd)/$DIR:/opt"
PARAMS="-it -a stdin -a stdout -u 1000"
docker run $PARAMS $HOME $IMAGE $CMD_LINE
If your rerun command line were:
rerun docker:run-ubuntu --dir subdirectory/ ls -l
This will effectively run:
docker run -it -a stdin -a stdout -u 1000 -v /home/me/subdirectory:/opt ubuntu:16.04 ls -l
(assuming you are currently in the /home/me directory)
## Metadata
The metadata file format uses line separated _KEY=value_
pairs to define module attributes. The module metadata
file declares two properties:
* `NAME`: Declare name displayed to user.
* `DESCRIPTION`: Brief explanation of use.
For example, a module named `waitfor` is
declared in a file called `RERUN_MODULES/waitfor/metadata`:
NAME="waitfor"
DESCRIPTION="utility commands that wait for a condition."
Command metadata is described in a file called
`RERUN_MODULES//commands//metadata`.
It uses NAME and DESCRIPTION properties like a module but
adds, OPTIONS.
* `OPTIONS`: List of options assigned to the command.
Here's the command metadata for the "ping" command:
NAME="ping"
DESCRIPTION="wait for ping response from a host"
OPTIONS="host interval"
Each command can have options assigned to it. The
example above shows that the "ping" command has
options called "host" and "interval".
Options are described in their own metadata files
following the naming convention:
`RERUN_MODULES//options/