mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/parallel
Conflicts: doc/release_new_version
This commit is contained in:
commit
4fb086c285
|
@ -219,7 +219,7 @@ cc:Tim Cuthbertson <tim3d.junk@gmail.com>,
|
||||||
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
||||||
Jesse Alama <jesse.alama@gmail.com>
|
Jesse Alama <jesse.alama@gmail.com>
|
||||||
|
|
||||||
Subject: GNU Parallel 20160622 ('Orlando') released <<[stable]>>
|
Subject: GNU Parallel 20160722 ('Brexit') released <<[stable]>>
|
||||||
|
|
||||||
GNU Parallel 20160722 ('Brexit') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
GNU Parallel 20160722 ('Brexit') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
||||||
|
|
||||||
|
@ -227,11 +227,18 @@ GNU Parallel 20160722 ('Brexit') <<[stable]>> has been released. It is available
|
||||||
|
|
||||||
Haiku of the month:
|
Haiku of the month:
|
||||||
|
|
||||||
|
<<>>
|
||||||
-- Ole Tange
|
-- Ole Tange
|
||||||
|
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
|
* env_parallel is now ready for wider testing. It is still beta quality.
|
||||||
|
|
||||||
|
* env_parallel is heavily modified for all shells and testing has been increased.
|
||||||
|
|
||||||
|
* Selectively choosing what to export using --env now works for env_parallel (bash, csh, fish, ksh, pdksh, tcsh, zsh).
|
||||||
|
|
||||||
* <<Possibly http://link.springer.com/chapter/10.1007%2F978-3-319-22053-6_46>>
|
* <<Possibly http://link.springer.com/chapter/10.1007%2F978-3-319-22053-6_46>>
|
||||||
|
|
||||||
* <<Possibly http://link.springer.com/article/10.1007/s12021-015-9290-5>>
|
* <<Possibly http://link.springer.com/article/10.1007/s12021-015-9290-5>>
|
||||||
|
@ -258,6 +265,32 @@ for Big Data Applications https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumb
|
||||||
|
|
||||||
* <<link No citation: Next-generation TCP for ns-3 simulator http://www.sciencedirect.com/science/article/pii/S1569190X15300939>>
|
* <<link No citation: Next-generation TCP for ns-3 simulator http://www.sciencedirect.com/science/article/pii/S1569190X15300939>>
|
||||||
|
|
||||||
|
* <<No citation: Argumentation Models for Cyber Attribution http://arxiv.org/pdf/1607.02171.pdf>>
|
||||||
|
|
||||||
|
* <<Possible: http://link.springer.com/article/10.1007/s12021-015-9290-5 http://link.springer.com/protocol/10.1007/978-1-4939-3578-9_14>>
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: HybPiper: Extracting Coding Sequence and Introns for Phylogenetics from High-Throughput Sequencing Reads Using Target Enrichment http://www.bioone.org/doi/full/10.3732/apps.1600016
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: StrAuto - Automation and Parallelization of STRUCTURE Analysis http://www.crypticlineage.net/download/strauto/strauto_doc.pdf
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Tools and techniques for computational reproducibility http://gigascience.biomedcentral.com/articles/10.1186/s13742-016-0135-4
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: FlashPCA: fast sparse canonical correlation analysis of genomic data http://biorxiv.org/content/biorxiv/suppl/2016/04/06/047217.DC1/047217-1.pdf
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Computational Design of DNA-Binding Proteins http://link.springer.com/protocol/10.1007/978-1-4939-3569-7_16
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Math Indexer and Searcher under the Hood: Fine-tuning Query Expansion and Unification Strategies http://research.nii.ac.jp/ntcir/workshop/OnlineProceedings12/pdf/ntcir/MathIR/05-NTCIR12-MathIR-RuzickaM.pdf
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: The Evolution and Fate of Super-Chandrasekhar Mass White Dwarf Merger Remnants http://arxiv.org/pdf/1606.02300.pdf
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Evaluation of Coastal Scatterometer Products https://mdc.coaps.fsu.edu/scatterometry/meeting/docs/2016/Thu_AM/coastal-poster.pdf
|
||||||
|
|
||||||
|
* GNU Parallel was used in: https://github.com/splitice/bulkdnsblcheck
|
||||||
|
|
||||||
|
* The iconv slurp misfeature http://www.openfusion.net/linux/iconv_slurp_misfeature
|
||||||
|
|
||||||
|
* แบบว่า CPU เหลือ https://veer66.wordpress.com/2016/06/15/gnu-parallel/
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
GNU Parallel - For people who live life in the parallel lane.
|
GNU Parallel - For people who live life in the parallel lane.
|
||||||
|
|
|
@ -52,12 +52,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run \"parallel --record-env\" in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -- "$@"
|
' -- "$@"
|
||||||
|
@ -87,7 +87,7 @@ env_parallel() {
|
||||||
local _variable_NAMES="$(compgen -A variable |
|
local _variable_NAMES="$(compgen -A variable |
|
||||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||||
grep -vFf <(readonly) |
|
grep -vFf <(readonly) |
|
||||||
egrep -v '^(BASHOPTS|BASHPID|EUID|GROUPS|FUNCNAME|DIRSTACK|_|PIPESTATUS|PPID|SHELLOPTS|UID|USERNAME|BASH_[A-Z_]+)$')"
|
grep -Ev '^(BASHOPTS|BASHPID|EUID|GROUPS|FUNCNAME|DIRSTACK|_|PIPESTATUS|PPID|SHELLOPTS|UID|USERNAME|BASH_[A-Z_]+)$')"
|
||||||
local _list_variable_VALUES="typeset -p $_variable_NAMES"
|
local _list_variable_VALUES="typeset -p $_variable_NAMES"
|
||||||
if [[ "$_variable_NAMES" = "" ]] ; then
|
if [[ "$_variable_NAMES" = "" ]] ; then
|
||||||
# no variables selected
|
# no variables selected
|
||||||
|
|
|
@ -57,12 +57,12 @@ else
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run 'parallel --record-env' in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'EOF'
|
'EOF'
|
||||||
|
|
|
@ -46,7 +46,8 @@ function env_parallel
|
||||||
begin;
|
begin;
|
||||||
set _grep_REGEXP (
|
set _grep_REGEXP (
|
||||||
begin;
|
begin;
|
||||||
perl -e 'for(@ARGV){
|
perl -e '
|
||||||
|
for(@ARGV){
|
||||||
/^_$/ and $next_is_env = 0;
|
/^_$/ and $next_is_env = 0;
|
||||||
$next_is_env and push @envvar, split/,/, $_;
|
$next_is_env and push @envvar, split/,/, $_;
|
||||||
$next_is_env = /^--env$/;
|
$next_is_env = /^--env$/;
|
||||||
|
@ -66,12 +67,12 @@ function env_parallel
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run \"parallel --record-env\" in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(nO,VaRs)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -- $argv;
|
' -- $argv;
|
||||||
|
|
|
@ -52,12 +52,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run \"parallel --record-env\" in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -- "$@"
|
' -- "$@"
|
||||||
|
@ -86,7 +86,7 @@ env_parallel() {
|
||||||
# Grep variable names
|
# Grep variable names
|
||||||
_variable_NAMES="$(typeset +p | perl -pe 's/^typeset .. //' |
|
_variable_NAMES="$(typeset +p | perl -pe 's/^typeset .. //' |
|
||||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||||
egrep -v '^(PIPESTATUS)$')"
|
grep -Ev '^(PIPESTATUS)$')"
|
||||||
_list_variable_VALUES="typeset -p $_variable_NAMES"
|
_list_variable_VALUES="typeset -p $_variable_NAMES"
|
||||||
if [[ "$_variable_NAMES" = "" ]] ; then
|
if [[ "$_variable_NAMES" = "" ]] ; then
|
||||||
# no variables selected
|
# no variables selected
|
||||||
|
|
|
@ -52,12 +52,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run \"parallel --record-env\" in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -- "$@"
|
' -- "$@"
|
||||||
|
|
|
@ -15,25 +15,36 @@ B<env_parallel> [options for GNU Parallel]
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
B<env_parallel> is a shell function that exports the current
|
B<env_parallel> is a shell function that exports the current
|
||||||
environment to GNU Parallel.
|
environment to GNU B<parallel>.
|
||||||
|
|
||||||
If the shell function is not loaded, a dummy script will be run
|
If the shell function is not loaded, a dummy script will be run
|
||||||
instead that explains how to install the function.
|
instead that explains how to install the function.
|
||||||
|
|
||||||
B<env_parallel> is alpha quality and not production ready.
|
B<env_parallel> is beta quality and not production ready.
|
||||||
|
|
||||||
|
B<env_parallel> is 0.1 sec slower at startup than pure GNU
|
||||||
|
B<parallel>, and takes up to 15 ms to start a job.
|
||||||
|
|
||||||
=head2 Environment space
|
=head2 Environment space
|
||||||
|
|
||||||
B<env_parallel> only works if the size of the current environment is
|
By default B<env_parallel> will export all environment variables,
|
||||||
smaller than the maximal length of a command and smaller than half of
|
arrays, aliases, functions and shell options (see details for the
|
||||||
the max if running remotely. E.g. The max size of Bash's command is
|
individual shells below).
|
||||||
128 KB, so B<env_parallel> will fail if B<set | wc -c> is bigger than
|
|
||||||
128 KB. Technically the limit is in execve(1) which IPC::open3 uses.
|
But this only works if the size of the current environment is smaller
|
||||||
|
than the maximal length of a command and smaller than half of the max
|
||||||
|
if running remotely. E.g. The max size of Bash's command is 128 KB, so
|
||||||
|
B<env_parallel> will fail if B<set | wc -c> is bigger than 128
|
||||||
|
KB. Technically the limit is in execve(1) which IPC::open3 uses.
|
||||||
|
|
||||||
Bash completion functions are well-known for taking up well over 128
|
Bash completion functions are well-known for taking up well over 128
|
||||||
KB of environment space and the primary reason for causing
|
KB of environment space and the primary reason for causing
|
||||||
B<env_parallel> to fail.
|
B<env_parallel> to fail.
|
||||||
|
|
||||||
|
Instead you can use B<--env> to specify which variables, arrays,
|
||||||
|
aliases and functions to export as this will only export those with
|
||||||
|
the given name.
|
||||||
|
|
||||||
|
|
||||||
=head1 OPTIONS
|
=head1 OPTIONS
|
||||||
|
|
||||||
|
@ -93,6 +104,268 @@ E.g. by doing:
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
=head2 csh
|
||||||
|
|
||||||
|
B<--env> is supported to export only the variable, alias, function, or
|
||||||
|
array with the given name. Multiple B<--env>s can be given.
|
||||||
|
|
||||||
|
B<env_parallel> for B<csh> breaks B<$PARALLEL>, so do not use
|
||||||
|
B<$PARALLEL>.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
|
||||||
|
Put this in $HOME/.cshrc:
|
||||||
|
|
||||||
|
source `which env_parallel.csh`
|
||||||
|
|
||||||
|
E.g. by doing:
|
||||||
|
|
||||||
|
echo 'source `which env_parallel.csh`' >> $HOME/.cshrc
|
||||||
|
|
||||||
|
=over 8
|
||||||
|
|
||||||
|
=item aliases
|
||||||
|
|
||||||
|
alias myecho echo
|
||||||
|
env_parallel myecho ::: test
|
||||||
|
env_parallel -S server myecho ::: test
|
||||||
|
env_parallel --env myecho myecho ::: work
|
||||||
|
env_parallel --env myecho -S server myecho ::: work
|
||||||
|
|
||||||
|
=item functions
|
||||||
|
|
||||||
|
Not supported by B<csh>.
|
||||||
|
|
||||||
|
=item variables
|
||||||
|
|
||||||
|
set myvar=test
|
||||||
|
env_parallel echo "\$myvar" ::: test
|
||||||
|
env_parallel -S csh@server echo "\$myvar" ::: test
|
||||||
|
env_parallel --env myvar echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||||
|
|
||||||
|
|
||||||
|
=item arrays with no special chars
|
||||||
|
|
||||||
|
set myarray=(foo bar baz)
|
||||||
|
env_parallel echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
||||||
|
env_parallel -S csh@server echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
||||||
|
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
||||||
|
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
=head2 fish
|
||||||
|
|
||||||
|
B<--env> is supported to export only the variable, alias, function, or
|
||||||
|
array with the given name. Multiple B<--env>s can be given.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
|
||||||
|
Put this in $HOME/.config/fish/config.fish:
|
||||||
|
|
||||||
|
source (which env_parallel.fish)
|
||||||
|
|
||||||
|
E.g. by doing:
|
||||||
|
|
||||||
|
echo 'source (which env_parallel.fish)' >> $HOME/.config/fish/config.fish
|
||||||
|
|
||||||
|
=over 8
|
||||||
|
|
||||||
|
=item aliases
|
||||||
|
|
||||||
|
alias myecho 'echo aliases'
|
||||||
|
env_parallel myecho ::: work
|
||||||
|
env_parallel -S server myecho ::: work
|
||||||
|
env_parallel --env myecho myecho ::: work
|
||||||
|
env_parallel --env myecho -S server myecho ::: work
|
||||||
|
|
||||||
|
=item functions
|
||||||
|
|
||||||
|
function myfunc
|
||||||
|
echo functions $argv
|
||||||
|
end
|
||||||
|
env_parallel myfunc ::: work
|
||||||
|
env_parallel -S server myfunc ::: work
|
||||||
|
env_parallel --env myfunc myfunc ::: work
|
||||||
|
env_parallel --env myfunc -S server myfunc ::: work
|
||||||
|
|
||||||
|
=item variables
|
||||||
|
|
||||||
|
set myvar variables
|
||||||
|
env_parallel echo '$myvar' ::: work
|
||||||
|
env_parallel -S server echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||||
|
|
||||||
|
=item arrays
|
||||||
|
|
||||||
|
set myarray arrays work, too
|
||||||
|
env_parallel -k echo '$myarray[{}]' ::: 1 2 3
|
||||||
|
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3
|
||||||
|
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3
|
||||||
|
env_parallel -k --env myarray -S server echo '$myarray[{}]' ::: 1 2 3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
=head2 ksh
|
||||||
|
|
||||||
|
B<--env> is supported to export only the variable, alias, function, or
|
||||||
|
array with the given name. Multiple B<--env>s can be given.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
|
||||||
|
Put this in $HOME/.kshrc:
|
||||||
|
|
||||||
|
source `which env_parallel.ksh`
|
||||||
|
|
||||||
|
E.g. by doing:
|
||||||
|
|
||||||
|
echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
|
||||||
|
|
||||||
|
=over 8
|
||||||
|
|
||||||
|
=item aliases
|
||||||
|
|
||||||
|
alias myecho='echo aliases'
|
||||||
|
env_parallel myecho ::: work
|
||||||
|
env_parallel -S server myecho ::: work
|
||||||
|
env_parallel --env myecho myecho ::: work
|
||||||
|
env_parallel --env myecho -S server myecho ::: work
|
||||||
|
|
||||||
|
=item functions
|
||||||
|
|
||||||
|
myfunc() { echo functions $*; }
|
||||||
|
env_parallel myfunc ::: work
|
||||||
|
env_parallel -S server myfunc ::: work
|
||||||
|
env_parallel --env myfunc myfunc ::: work
|
||||||
|
env_parallel --env myfunc -S server myfunc ::: work
|
||||||
|
|
||||||
|
=item variables
|
||||||
|
|
||||||
|
myvar=variables
|
||||||
|
env_parallel echo '$myvar' ::: work
|
||||||
|
env_parallel -S server echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||||
|
|
||||||
|
=item arrays
|
||||||
|
|
||||||
|
myarray=(arrays work, too)
|
||||||
|
env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
|
||||||
|
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
|
||||||
|
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
|
||||||
|
env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
=head2 pdksh
|
||||||
|
|
||||||
|
B<--env> is supported to export only the variable, alias, function, or
|
||||||
|
array with the given name. Multiple B<--env>s can be given.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
|
||||||
|
Put this in $HOME/.profile:
|
||||||
|
|
||||||
|
source `which env_parallel.pdksh`
|
||||||
|
|
||||||
|
E.g. by doing:
|
||||||
|
|
||||||
|
echo 'source `which env_parallel.pdksh`' >> $HOME/.profile
|
||||||
|
|
||||||
|
=over 8
|
||||||
|
|
||||||
|
=item aliases
|
||||||
|
|
||||||
|
alias myecho="echo aliases";
|
||||||
|
env_parallel myecho ::: work;
|
||||||
|
env_parallel -S server myecho ::: work;
|
||||||
|
env_parallel --env myecho myecho ::: work;
|
||||||
|
env_parallel --env myecho -S server myecho ::: work
|
||||||
|
|
||||||
|
=item functions
|
||||||
|
|
||||||
|
myfunc() { echo functions $*; };
|
||||||
|
env_parallel myfunc ::: work;
|
||||||
|
env_parallel -S server myfunc ::: work;
|
||||||
|
env_parallel --env myfunc myfunc ::: work;
|
||||||
|
env_parallel --env myfunc -S server myfunc ::: work
|
||||||
|
|
||||||
|
=item variables
|
||||||
|
|
||||||
|
myvar=variables;
|
||||||
|
env_parallel echo "\$myvar" ::: work;
|
||||||
|
env_parallel -S server echo "\$myvar" ::: work;
|
||||||
|
env_parallel --env myvar echo "\$myvar" ::: work;
|
||||||
|
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
||||||
|
|
||||||
|
=item arrays
|
||||||
|
|
||||||
|
myarray=(arrays work, too);
|
||||||
|
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
||||||
|
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
||||||
|
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
||||||
|
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
=head2 tcsh
|
||||||
|
|
||||||
|
B<--env> is supported to export only the variable, alias, function, or
|
||||||
|
array with the given name. Multiple B<--env>s can be given.
|
||||||
|
|
||||||
|
B<env_parallel> for B<tcsh> breaks B<$PARALLEL>, so do not use
|
||||||
|
B<$PARALLEL>.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
|
||||||
|
Put this in $HOME/.tcshrc:
|
||||||
|
|
||||||
|
source `which env_parallel.tcsh`
|
||||||
|
|
||||||
|
E.g. by doing:
|
||||||
|
|
||||||
|
echo 'source `which env_parallel.tcsh`' >> $HOME/.tcshrc
|
||||||
|
|
||||||
|
=over 8
|
||||||
|
|
||||||
|
=item aliases
|
||||||
|
|
||||||
|
alias myecho 'echo aliases'
|
||||||
|
env_parallel myecho ::: work
|
||||||
|
env_parallel -S server myecho ::: work
|
||||||
|
env_parallel --env myecho myecho ::: work
|
||||||
|
env_parallel --env myecho -S server myecho ::: work
|
||||||
|
|
||||||
|
=item functions
|
||||||
|
|
||||||
|
Not supported by B<tcsh>.
|
||||||
|
|
||||||
|
=item variables
|
||||||
|
|
||||||
|
set myvar=variables
|
||||||
|
env_parallel echo '$myvar' ::: work
|
||||||
|
env_parallel -S server echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar echo '$myvar' ::: work
|
||||||
|
env_parallel --env myvar -S server echo '$myvar' ::: work
|
||||||
|
|
||||||
|
=item arrays with no special chars
|
||||||
|
|
||||||
|
set myarray=(arrays work, too)
|
||||||
|
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3
|
||||||
|
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||||
|
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
||||||
|
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
=head2 Zsh
|
=head2 Zsh
|
||||||
|
|
||||||
B<--env> is supported to export only the variable, alias, function, or
|
B<--env> is supported to export only the variable, alias, function, or
|
||||||
|
@ -144,248 +417,6 @@ E.g. by doing:
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 fish
|
|
||||||
|
|
||||||
Installation
|
|
||||||
|
|
||||||
Put this in $HOME/.config/fish/config.fish:
|
|
||||||
|
|
||||||
source (which env_parallel.fish)
|
|
||||||
|
|
||||||
E.g. by doing:
|
|
||||||
|
|
||||||
echo 'source (which env_parallel.fish)' >> $HOME/.config/fish/config.fish
|
|
||||||
|
|
||||||
=over 8
|
|
||||||
|
|
||||||
=item aliases
|
|
||||||
|
|
||||||
alias myecho 'echo aliases'
|
|
||||||
env_parallel myecho ::: work
|
|
||||||
env_parallel -S server myecho ::: work
|
|
||||||
env_parallel --env myecho myecho ::: work
|
|
||||||
env_parallel --env myecho -S server myecho ::: work
|
|
||||||
|
|
||||||
=item functions
|
|
||||||
|
|
||||||
function myfunc
|
|
||||||
echo functions $argv
|
|
||||||
end
|
|
||||||
env_parallel myfunc ::: work
|
|
||||||
env_parallel -S server myfunc ::: work
|
|
||||||
env_parallel --env myfunc myfunc ::: work
|
|
||||||
env_parallel --env myfunc -S server myfunc ::: work
|
|
||||||
|
|
||||||
=item variables
|
|
||||||
|
|
||||||
set myvar variables
|
|
||||||
env_parallel echo '$myvar' ::: work
|
|
||||||
env_parallel -S server echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
|
||||||
|
|
||||||
=item arrays
|
|
||||||
|
|
||||||
set myarray arrays work, too
|
|
||||||
env_parallel -k echo '$myarray[{}]' ::: 1 2 3
|
|
||||||
env_parallel -k -S server echo '$myarray[{}]' ::: 1 2 3
|
|
||||||
env_parallel -k --env myarray echo '$myarray[{}]' ::: 1 2 3
|
|
||||||
env_parallel -k --env myarray -S server echo '$myarray[{}]' ::: 1 2 3
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 ksh
|
|
||||||
|
|
||||||
Installation
|
|
||||||
|
|
||||||
Put this in $HOME/.kshrc:
|
|
||||||
|
|
||||||
source `which env_parallel.ksh`
|
|
||||||
|
|
||||||
E.g. by doing:
|
|
||||||
|
|
||||||
echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
|
|
||||||
|
|
||||||
=over 8
|
|
||||||
|
|
||||||
=item aliases
|
|
||||||
|
|
||||||
alias myecho='echo aliases'
|
|
||||||
env_parallel myecho ::: work
|
|
||||||
env_parallel -S server myecho ::: work
|
|
||||||
env_parallel --env myecho myecho ::: work
|
|
||||||
env_parallel --env myecho -S server myecho ::: work
|
|
||||||
|
|
||||||
=item functions
|
|
||||||
|
|
||||||
myfunc() { echo functions $*; }
|
|
||||||
env_parallel myfunc ::: work
|
|
||||||
env_parallel -S server myfunc ::: work
|
|
||||||
env_parallel --env myfunc myfunc ::: work
|
|
||||||
env_parallel --env myfunc -S server myfunc ::: work
|
|
||||||
|
|
||||||
=item variables
|
|
||||||
|
|
||||||
myvar=variables
|
|
||||||
env_parallel echo '$myvar' ::: work
|
|
||||||
env_parallel -S server echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
|
||||||
|
|
||||||
=item arrays
|
|
||||||
|
|
||||||
myarray=(arrays work, too)
|
|
||||||
env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
|
|
||||||
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
|
|
||||||
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
|
|
||||||
env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 pdksh
|
|
||||||
|
|
||||||
Installation
|
|
||||||
|
|
||||||
Put this in $HOME/.profile:
|
|
||||||
|
|
||||||
source `which env_parallel.pdksh`
|
|
||||||
|
|
||||||
E.g. by doing:
|
|
||||||
|
|
||||||
echo 'source `which env_parallel.pdksh`' >> $HOME/.profile
|
|
||||||
|
|
||||||
=over 8
|
|
||||||
|
|
||||||
=item aliases
|
|
||||||
|
|
||||||
alias myecho="echo aliases";
|
|
||||||
env_parallel myecho ::: work;
|
|
||||||
env_parallel -S server myecho ::: work;
|
|
||||||
env_parallel --env myecho myecho ::: work;
|
|
||||||
env_parallel --env myecho -S server myecho ::: work
|
|
||||||
|
|
||||||
=item functions
|
|
||||||
|
|
||||||
myfunc() { echo functions $*; };
|
|
||||||
env_parallel myfunc ::: work;
|
|
||||||
env_parallel -S server myfunc ::: work;
|
|
||||||
env_parallel --env myfunc myfunc ::: work;
|
|
||||||
env_parallel --env myfunc -S server myfunc ::: work
|
|
||||||
|
|
||||||
=item variables
|
|
||||||
|
|
||||||
myvar=variables;
|
|
||||||
env_parallel echo "\$myvar" ::: work;
|
|
||||||
env_parallel -S server echo "\$myvar" ::: work;
|
|
||||||
env_parallel --env myvar echo "\$myvar" ::: work;
|
|
||||||
env_parallel --env myvar -S server echo "\$myvar" ::: work
|
|
||||||
|
|
||||||
=item arrays
|
|
||||||
|
|
||||||
myarray=(arrays work, too);
|
|
||||||
env_parallel -k echo "\${myarray[{}]}" ::: 0 1 2;
|
|
||||||
env_parallel -k -S server echo "\${myarray[{}]}" ::: 0 1 2;
|
|
||||||
env_parallel -k --env myarray echo "\${myarray[{}]}" ::: 0 1 2;
|
|
||||||
env_parallel -k --env myarray -S server echo "\${myarray[{}]}" ::: 0 1 2
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 csh
|
|
||||||
|
|
||||||
B<env_parallel> for B<csh> breaks B<$PARALLEL>, so do not use
|
|
||||||
B<$PARALLEL>.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
|
|
||||||
Put this in $HOME/.cshrc:
|
|
||||||
|
|
||||||
source `which env_parallel.csh`
|
|
||||||
|
|
||||||
E.g. by doing:
|
|
||||||
|
|
||||||
echo 'source `which env_parallel.csh`' >> $HOME/.cshrc
|
|
||||||
|
|
||||||
=over 8
|
|
||||||
|
|
||||||
=item aliases
|
|
||||||
|
|
||||||
alias myecho echo
|
|
||||||
env_parallel myecho ::: test
|
|
||||||
env_parallel -S server myecho ::: test
|
|
||||||
env_parallel --env myecho myecho ::: work
|
|
||||||
env_parallel --env myecho -S server myecho ::: work
|
|
||||||
|
|
||||||
=item functions
|
|
||||||
|
|
||||||
Not supported by B<csh>.
|
|
||||||
|
|
||||||
=item variables
|
|
||||||
|
|
||||||
set myvar=test
|
|
||||||
env_parallel echo "\$myvar" ::: test
|
|
||||||
env_parallel -S csh@server echo "\$myvar" ::: test
|
|
||||||
env_parallel --env myvar echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
|
||||||
|
|
||||||
|
|
||||||
=item arrays with no special chars
|
|
||||||
|
|
||||||
set myarray=(foo bar baz)
|
|
||||||
env_parallel echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
|
||||||
env_parallel -S csh@server echo "\${myarray\[\{\}\]}" ::: 1 2 3
|
|
||||||
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
|
||||||
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 tcsh
|
|
||||||
|
|
||||||
B<env_parallel> for B<tcsh> breaks B<$PARALLEL>, so do not use
|
|
||||||
B<$PARALLEL>.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
|
|
||||||
Put this in $HOME/.tcshrc:
|
|
||||||
|
|
||||||
source `which env_parallel.tcsh`
|
|
||||||
|
|
||||||
E.g. by doing:
|
|
||||||
|
|
||||||
echo 'source `which env_parallel.tcsh`' >> $HOME/.tcshrc
|
|
||||||
|
|
||||||
=over 8
|
|
||||||
|
|
||||||
=item aliases
|
|
||||||
|
|
||||||
alias myecho 'echo aliases'
|
|
||||||
env_parallel myecho ::: work
|
|
||||||
env_parallel -S server myecho ::: work
|
|
||||||
env_parallel --env myecho myecho ::: work
|
|
||||||
env_parallel --env myecho -S server myecho ::: work
|
|
||||||
|
|
||||||
=item functions
|
|
||||||
|
|
||||||
Not supported by B<tcsh>.
|
|
||||||
|
|
||||||
=item variables
|
|
||||||
|
|
||||||
set myvar=variables
|
|
||||||
env_parallel echo '$myvar' ::: work
|
|
||||||
env_parallel -S server echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar echo '$myvar' ::: work
|
|
||||||
env_parallel --env myvar -S server echo '$myvar' ::: work
|
|
||||||
|
|
||||||
=item arrays with no special chars
|
|
||||||
|
|
||||||
set myarray=(arrays work, too)
|
|
||||||
env_parallel -k echo \$'{myarray[{}]}' ::: 1 2 3
|
|
||||||
env_parallel -k -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
|
||||||
env_parallel -k --env myarray echo \$'{myarray[{}]}' ::: 1 2 3
|
|
||||||
env_parallel -k --env myarray -S server echo \$'{myarray[{}]}' ::: 1 2 3
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 EXIT STATUS
|
=head1 EXIT STATUS
|
||||||
|
|
||||||
|
@ -530,7 +561,10 @@ B<env_parallel> uses GNU B<parallel>.
|
||||||
|
|
||||||
=head1 SEE ALSO
|
=head1 SEE ALSO
|
||||||
|
|
||||||
B<parallel>(1), B<bash>(1), B<ksh>(1), B<zsh>(1), B<ksh>(1),
|
B<parallel>(1),
|
||||||
B<pdksh>(1)
|
|
||||||
|
B<bash>(1), B<csh>(1), B<fish>(1), B<ksh>(1), B<pdksh>(1) B<tcsh>(1),
|
||||||
|
B<zsh>(1).
|
||||||
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
|
@ -57,12 +57,12 @@ else
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run 'parallel --record-env' in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'EOF'
|
'EOF'
|
||||||
|
|
|
@ -52,12 +52,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
if(grep { /^_$/ } @envvar) {
|
if(grep { /^_$/ } @envvar) {
|
||||||
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
if(not open(IN, "<", "$ENV{HOME}/.parallel/ignored_vars")) {
|
||||||
print STDERR "parallel: Error: ",
|
print STDERR "parallel: Error: ",
|
||||||
"Run \"parallel --record-env\" in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
$vars = join "|",map { quotemeta $_ } "env_parallel", @ignored_vars;
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
' -- "$@"
|
' -- "$@"
|
||||||
|
@ -86,11 +86,11 @@ env_parallel() {
|
||||||
unset _function_NAMES
|
unset _function_NAMES
|
||||||
|
|
||||||
# Grep variable names
|
# Grep variable names
|
||||||
# The egrep -v is crap and should be better
|
# The grep -Ev is crap and should be better
|
||||||
_variable_NAMES="$(print -l ${(k)parameters} |
|
_variable_NAMES="$(print -l ${(k)parameters} |
|
||||||
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
grep -E "^$_grep_REGEXP"\$ | grep -vE "^$_ignore_UNDERSCORE"\$ |
|
||||||
egrep -v '^([-?#!$*@_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID)$' |
|
grep -Ev '^([-?#!$*@_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID)$' |
|
||||||
egrep -v 'terminfo|funcstack|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates'
|
grep -Ev 'terminfo|funcstack|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates'
|
||||||
)"
|
)"
|
||||||
_list_variable_VALUES="typeset -p "$(echo $_variable_NAMES|xargs)" |
|
_list_variable_VALUES="typeset -p "$(echo $_variable_NAMES|xargs)" |
|
||||||
grep -aFvf <(typeset -pr)
|
grep -aFvf <(typeset -pr)
|
||||||
|
|
|
@ -3734,7 +3734,7 @@ sub citation {
|
||||||
" url = {http://www.gnu.org/s/parallel},",
|
" url = {http://www.gnu.org/s/parallel},",
|
||||||
" year = {2011},",
|
" year = {2011},",
|
||||||
" pages = {42-47},",
|
" pages = {42-47},",
|
||||||
" doi = {10.5281/zenodo.16303}",
|
" doi = {http://dx.doi.org/10.5281/zenodo.16303}",
|
||||||
"}",
|
"}",
|
||||||
"",
|
"",
|
||||||
"(Feel free to use \\nocite{Tange2011a})",
|
"(Feel free to use \\nocite{Tange2011a})",
|
||||||
|
|
|
@ -266,6 +266,14 @@ shell quote a string
|
||||||
|
|
||||||
number of jobs in total
|
number of jobs in total
|
||||||
|
|
||||||
|
=item Z<> B<$job->slot()>
|
||||||
|
|
||||||
|
slot number of job
|
||||||
|
|
||||||
|
=item Z<> B<$job->seq()>
|
||||||
|
|
||||||
|
sequence number of job
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
@ -1476,7 +1484,7 @@ sequence numbers in B<--joblog> then the input, the command, and
|
||||||
B<--joblog> all have to remain unchanged; otherwise GNU B<parallel>
|
B<--joblog> all have to remain unchanged; otherwise GNU B<parallel>
|
||||||
may run wrong commands.
|
may run wrong commands.
|
||||||
|
|
||||||
See also B<--joblog>, B<--results>, B<--resume-failed>.
|
See also B<--joblog>, B<--results>, B<--resume-failed>, B<--retries>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--resume-failed>
|
=item B<--resume-failed>
|
||||||
|
@ -1489,7 +1497,7 @@ numbers in B<--joblog> then the input, the command, and B<--joblog>
|
||||||
all have to remain unchanged; otherwise GNU B<parallel> may run wrong
|
all have to remain unchanged; otherwise GNU B<parallel> may run wrong
|
||||||
commands.
|
commands.
|
||||||
|
|
||||||
See also B<--joblog>, B<--resume>.
|
See also B<--joblog>, B<--resume>, B<--retry-failed>, B<--retries>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--retry-failed>
|
=item B<--retry-failed>
|
||||||
|
@ -1497,10 +1505,66 @@ See also B<--joblog>, B<--resume>.
|
||||||
Retry all failed jobs in joblog. By reading B<--joblog> GNU
|
Retry all failed jobs in joblog. By reading B<--joblog> GNU
|
||||||
B<parallel> will figure out the failed jobs and run those again.
|
B<parallel> will figure out the failed jobs and run those again.
|
||||||
|
|
||||||
B<--retry-failed> ignore the command and arguments: It only looks at
|
B<--retry-failed> ignores the command and arguments on the command
|
||||||
the joblog.
|
line: It only looks at the joblog.
|
||||||
|
|
||||||
See also B<--joblog>, B<--resume>, B<--resume-failed>.
|
B<Differences between --resume, --resume-failed, --retry-failed>
|
||||||
|
|
||||||
|
In this example B<exit {= $_%=2 =}> will cause every other job to fail.
|
||||||
|
|
||||||
|
timeout -k 1 4 parallel --joblog log -j10 'sleep {}; exit {= $_%=2 =}' ::: {10..1}
|
||||||
|
|
||||||
|
4 jobs completed. 2 failed:
|
||||||
|
|
||||||
|
Seq [...] Exitval Signal Command
|
||||||
|
10 [...] 1 0 sleep 1; exit 1
|
||||||
|
9 [...] 0 0 sleep 2; exit 0
|
||||||
|
8 [...] 1 0 sleep 3; exit 1
|
||||||
|
7 [...] 0 0 sleep 4; exit 0
|
||||||
|
|
||||||
|
B<--resume> does not care about the Exitval, but only looks at Seq. If
|
||||||
|
the Seq is run, it will not be run again. So if needed, you can change
|
||||||
|
the command for the seqs not run yet:
|
||||||
|
|
||||||
|
parallel --resume --joblog log -j10 'sleep .{}; exit {= $_%=2 =}' ::: {10..1}
|
||||||
|
|
||||||
|
Seq [...] Exitval Signal Command
|
||||||
|
[... as above ...]
|
||||||
|
1 [...] 0 0 sleep .10; exit 0
|
||||||
|
6 [...] 1 0 sleep .5; exit 1
|
||||||
|
5 [...] 0 0 sleep .6; exit 0
|
||||||
|
4 [...] 1 0 sleep .7; exit 1
|
||||||
|
3 [...] 0 0 sleep .8; exit 0
|
||||||
|
2 [...] 1 0 sleep .9; exit 1
|
||||||
|
|
||||||
|
B<--resume-failed> cares about the Exitval, but also only looks at Seq
|
||||||
|
to figure out which commands to run. Again this means you can change
|
||||||
|
the command, but not the arguments. It will run the failed seqs and
|
||||||
|
the seqs not yet run:
|
||||||
|
|
||||||
|
parallel --resume-failed --joblog log -j10 'echo {};sleep .{}; exit {= $_%=3 =}' ::: {10..1}
|
||||||
|
|
||||||
|
Seq [...] Exitval Signal Command
|
||||||
|
[... as above ...]
|
||||||
|
10 [...] 1 0 echo 1;sleep .1; exit 1
|
||||||
|
8 [...] 0 0 echo 3;sleep .3; exit 0
|
||||||
|
6 [...] 2 0 echo 5;sleep .5; exit 2
|
||||||
|
4 [...] 1 0 echo 7;sleep .7; exit 1
|
||||||
|
2 [...] 0 0 echo 9;sleep .9; exit 0
|
||||||
|
|
||||||
|
B<--retry-failed> cares about the Exitval, but takes the command from
|
||||||
|
the joblog. It ignores any arguments or commands given on the command
|
||||||
|
line:
|
||||||
|
|
||||||
|
parallel --retry-failed --joblog log -j10 this part is ignored
|
||||||
|
|
||||||
|
Seq [...] Exitval Signal Command
|
||||||
|
[... as above ...]
|
||||||
|
10 [...] 1 0 echo 1;sleep .1; exit 1
|
||||||
|
6 [...] 2 0 echo 5;sleep .5; exit 2
|
||||||
|
4 [...] 1 0 echo 7;sleep .7; exit 1
|
||||||
|
|
||||||
|
See also B<--joblog>, B<--resume>, B<--resume-failed>, B<--retries>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--retries> I<n>
|
=item B<--retries> I<n>
|
||||||
|
@ -1609,6 +1673,8 @@ Here are a few examples:
|
||||||
--rpl '{0#} $f = "%0".int(1+log(total_jobs())/log(10))."d"; $_=sprintf($f,$job->seq())'
|
--rpl '{0#} $f = "%0".int(1+log(total_jobs())/log(10))."d"; $_=sprintf($f,$job->seq())'
|
||||||
Job sequence counting from 0
|
Job sequence counting from 0
|
||||||
--rpl '{#0} $_ = $job->seq() - 1'
|
--rpl '{#0} $_ = $job->seq() - 1'
|
||||||
|
Job slot counting from 2
|
||||||
|
--rpl '{%1} $_ = $job->slot() + 1'
|
||||||
|
|
||||||
See also: B<{= perl expression =}> B<--parens>
|
See also: B<{= perl expression =}> B<--parens>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ par_tmp_full() {
|
||||||
# Assume /tmp/shm is easy to fill up
|
# Assume /tmp/shm is easy to fill up
|
||||||
export SHM=/tmp/shm/parallel
|
export SHM=/tmp/shm/parallel
|
||||||
mkdir -p $SHM
|
mkdir -p $SHM
|
||||||
sudo umount -l $SHM
|
sudo umount -l $SHM 2>/dev/null
|
||||||
sudo mount -t tmpfs -o size=10% none $SHM
|
sudo mount -t tmpfs -o size=10% none $SHM
|
||||||
|
|
||||||
echo "### Test --tmpdir running full. bug #40733 was caused by this"
|
echo "### Test --tmpdir running full. bug #40733 was caused by this"
|
||||||
|
|
|
@ -62,13 +62,13 @@ par_bash_underscore aliases in and arrays in functions work
|
||||||
par_bash_underscore aliases in and arrays in functions work
|
par_bash_underscore aliases in and arrays in functions work
|
||||||
par_bash_underscore aliases in functions work
|
par_bash_underscore aliases in functions work
|
||||||
par_bash_underscore aliases in functions work
|
par_bash_underscore aliases in functions work
|
||||||
par_bash_underscore /bin/bash: line 139: myecho: command not found
|
par_bash_underscore /bin/bash: line 70: myecho: command not found
|
||||||
par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^
|
par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
par_bash_underscore /bin/bash: line 139: myecho: command not found
|
par_bash_underscore /bin/bash: line 70: myecho: command not found
|
||||||
par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^
|
par_bash_underscore OK if no myecho ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
par_bash_underscore /bin/bash: line 136: myfunc: command not found
|
par_bash_underscore /bin/bash: line 68: myfunc: command not found
|
||||||
par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^
|
par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
par_bash_underscore /bin/bash: line 136: myfunc: command not found
|
par_bash_underscore /bin/bash: line 68: myfunc: command not found
|
||||||
par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^
|
par_bash_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
par_csh_funky 3 arg alias_works
|
par_csh_funky 3 arg alias_works
|
||||||
par_csh_funky myvar works
|
par_csh_funky myvar works
|
||||||
|
@ -274,13 +274,13 @@ par_ksh_underscore aliases in and arrays in functions work
|
||||||
par_ksh_underscore aliases in and arrays in functions work
|
par_ksh_underscore aliases in and arrays in functions work
|
||||||
par_ksh_underscore aliases in functions work
|
par_ksh_underscore aliases in functions work
|
||||||
par_ksh_underscore aliases in functions work
|
par_ksh_underscore aliases in functions work
|
||||||
par_ksh_underscore /usr/bin/ksh[193]: myecho: not found [No such file or directory]
|
par_ksh_underscore /usr/bin/ksh[113]: myecho: not found [No such file or directory]
|
||||||
par_ksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
par_ksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||||
par_ksh_underscore /usr/bin/ksh[193]: myecho: not found [No such file or directory]
|
par_ksh_underscore /usr/bin/ksh[113]: myecho: not found [No such file or directory]
|
||||||
par_ksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
par_ksh_underscore OK if no myecho ^^^^^^^^^^^^^^^^^
|
||||||
par_ksh_underscore /usr/bin/ksh: line 193: myfunc: not found
|
par_ksh_underscore /usr/bin/ksh: line 113: myfunc: not found
|
||||||
par_ksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
par_ksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
||||||
par_ksh_underscore /usr/bin/ksh: line 193: myfunc: not found
|
par_ksh_underscore /usr/bin/ksh: line 113: myfunc: not found
|
||||||
par_ksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
par_ksh_underscore OK if no myfunc ^^^^^^^^^^^^^^^^^
|
||||||
par_pdksh_funky 3 arg alias_works
|
par_pdksh_funky 3 arg alias_works
|
||||||
par_pdksh_funky function_works
|
par_pdksh_funky function_works
|
||||||
|
|
Loading…
Reference in a new issue