execline
Software
skarnet.org
The forbacktickx program
forbacktickx runs a program and uses its output as loop elements to
run another program.
Interface
In an execlineb script:
forbacktickx [ -p | -o okcodes | -x breakcodes ] [ -N | -n ] [ -C | -c ] [ -0 | -d delim ] variable { gen... } loop...
- forbacktickx reads a
block,
gen..., and unquotes it.
- It runs gen... as a child process. gen's
output must not contain a null character.
- It reads gen's output as it needs,
splitting it automatically.
- For every argument x in the split output,
forbacktickx runs loop... as a child process, with
variable=x added to its environment.
- forbacktickx then exits 0.
Options
- -p : parallel mode. Do not wait for a loop...
instance to finish before spawning the next one. forbacktickx will
still wait for all instances of loop to terminate before
exiting, though.
- -o okcodes : okcodes must
be a comma-separated list of exit codes. If the -p flag
hasn't been given and loop exits with one of the codes in
okcodes,
forbacktickx will run the following instances of the loop, but if the exit code is
not listed in okcodes, forbacktickx will exit immediately with an
approximation of the same exit code.
- -x breakcodes : like the previous
option, but with inverted meaning - the listed exit codes are codes
that will make forbacktickx break the loop and exit, and the unlisted exit
codes will make it keep looping.
Other options are similar (in name and functionality) to the switches
passed to control a substitution mechanism,
on purpose; however, forbacktickx does not call the substitution
mechanism and has its own semantics for those options.
- -N : store the whole line in variable,
including the terminating newline (or other delimiter).
- -n : chomp a terminating delimiter from the line from
stdin before storing it into variable. This is the default.
- -C : crunch. If there is an empty line (i.e. that
only contains a delimiter), do not call loop. If this option is
given, and chomping is active, and the last line of stdin
is not terminated by a delimiter, then this last line will not be processed.
- -c : do not crunch, call loop even if
the line is empty. This is the default.
- -0 : accept null characters on its stdin,
using them as delimiters. If this option and a -d option are
used simultaneously, the rightmost one wins.
- -d delim : use the characters in string
delim as delimiters for a line. Default is "\n", meaning
the input is only split on newlines.
Notes
- You can start loop... with "importas -u variable variable"
to perform variable substitution.
- forbacktickx is now implemented as a wrapper around the
pipeline and
forstdin commands, with calls to
fdmove to ensure that loop... is called
with the proper standard input.