A tool to execute commands in parallel (something like GNU parallel).
Written to try out the Little language. And also Rust.
ljobs [OPTIONS...] COMMAND [CMD-ARGS...] ::: TASKS...
ljobs [OPTIONS...] COMMAND [CMD-ARGS...] < TASKS
ljobs will run the given command for each task. Multiple commands can run in parallel.
Each task is an arbitrary string, commonly a file name or other input.
If the ::: form is used then tasks are given directly on the command
line.  Otherwise, tasks are read from standard input, one line per task.
These strings are replaced in command arguments:
{}      replaced by the task argument
{.}     replaced by task without extension
{/}     replaced by basename of task
{//}    replaced by dirname of task
{/.}    replaced by basename of task without extension
{#}     replaced by the task number, counting from 0
If none of the strings occur in a command argument then the task is
appended as the last argument of the command, i.e. {} is implied.
These are the options to ljobs itself.
- 
-j NUM,--jobs NUMSpecify number of job slots. Defaults to number of processors detected. 
- 
-k,--keep-goingContinue starting tasks even if a previous task failed. 
- 
-cExecute command with the shell interpreter given by the SHELLenvironment variable, or else/bin/sh. The command arguments are passed as positional parameters $1, $2, etc.
- 
-v,--verboseEnable verbose output. 
- 
-n,--dry-runPrint commands to be executed but do not run them. 
- 
-h,--helpShow usage message. 
- 
--End option processing. 
The standard output and standard error outputs of a running command are buffered in temporary files, and only output once the command stops. This prevents interleaving of outputs for different tasks.
With -k or --keep-going the exit status is
0       all tasks executed successfully
1-253   number of failed tasks
254     more than 253 failed tasks
255     other error
Without -k or --keep-going the exit status is
0       all tasks executed successfully
1-255   exit status of a failed task
ljobs oggenc ::: *.flac
ljobs lame {} {.}.mp3 ::: *.wav
- Does not catch signals. This seems to require a Tcl extension.
Peter Wang