digitalmars.com                        
Last update Sun Mar 4 11:58:08 2018

SHELL: Run scripts

shell is an unusual script runner. It's unique properties make it much superior than commonly used batch files for things like test scripts:

Script files are text files with a .sh extension, consisting of a sequence of lines. Lines are \ line spliced. Each line is one of:

Lines
Blank Line nothing on the line
Comment Line first non-blank character is a #
Macro Line line of the form NAME=VALUE
Command Line a command to be executed

Blank lines are used to separate command lines into groups. Groups of commmand lines are executed multiple times, once for each combination of options. Comment and macro lines are not group separators.

Commands can be prefixed with a special character to control how it is executed (just like makefiles for make):

Command Prefixes
+ Force use of COMMAND.COM or CMD.EXE to execute the rule. This is useful for .BAT files or commands using I/O redirection.
- Ignore exit status from this rule.
% Exit status must be non-zero.
@ Do not echo this rule when it's executed.
* Use _CMDLINE environment variable to pass long command lines.

Macros are expanded like in make, i.e. one letter macros are expanded by $M, multi-letter macros by $(ABC).

Options are specified as lists of | separated choices enclosed by parentheses, such as:

del *.(c|h)

means execute the command twice, once using the c and the other time using the h. Blank options, like (c|), are allowed. Multiple options can be used:

dir *.(c|) /(w|d)

will execute the command 4 times with:

dir *.c /w
dir *. /w
dir *.c /d
dir *. /d

The substitutions are stored as numbered macros, and are available for expansion in the subsequent lines in the group as well:

dmc -m(s|n) test (-g|-o)
link lib$1

causes these to be executed:

dmc -ms test -g
link libs
dmc -mn test -g
link libn
dmc -ms test -o
link libs
dmc -mn test -o
link libn

Command Line Switches

Shell is invoked by:

shell [-man] [-j [numthreads]] filename.sh { macro definitions }
Commands
Command Description
-man open browser on this page
-j start 4 threads, run each group in its own thread
-j numthreads start numthreads threads, run each group in its own thread

If no filename.sh is given, shell looks for and runs test.sh.

macro definitions are of the form NAME=VALUE.

Bugs

Home | Runtime Library | IDDE Reference | STL | Search | Download | Forums