mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
parallel: --xapply => --link.
This commit is contained in:
parent
393cfd177a
commit
a7b50a054e
|
@ -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 20160722 ('Munich/Erdogan') released <<[stable]>>
|
Subject: GNU Parallel 20160722 ('Og Nomekop/Munich/Erdogan') released <<[stable]>>
|
||||||
|
|
||||||
GNU Parallel 20160722 ('Munich/Erdogan') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
GNU Parallel 20160722 ('Munich/Erdogan') <<[stable]>> has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
||||||
|
|
||||||
|
|
51
src/parallel
51
src/parallel
|
@ -875,8 +875,8 @@ sub options_hash {
|
||||||
"block|block-size|blocksize=s" => \$opt::blocksize,
|
"block|block-size|blocksize=s" => \$opt::blocksize,
|
||||||
"tollef" => \$opt::tollef,
|
"tollef" => \$opt::tollef,
|
||||||
"gnu" => \$opt::gnu,
|
"gnu" => \$opt::gnu,
|
||||||
"xapply" => \$opt::xapply,
|
"link|xapply" => \$opt::link,
|
||||||
"xapplyinputsource=i" => \@opt::xapplyinputsource,
|
"linkinputsource|xapplyinputsource=i" => \@opt::linkinputsource,
|
||||||
"bibtex|citation" => \$opt::citation,
|
"bibtex|citation" => \$opt::citation,
|
||||||
"wc|willcite|will-cite|nn|nonotice|no-notice" => \$opt::willcite,
|
"wc|willcite|will-cite|nn|nonotice|no-notice" => \$opt::willcite,
|
||||||
# Termination and retries
|
# Termination and retries
|
||||||
|
@ -1697,12 +1697,12 @@ sub read_args_from_command_line {
|
||||||
# Arguments given on the command line after:
|
# Arguments given on the command line after:
|
||||||
# ::: ($Global::arg_sep)
|
# ::: ($Global::arg_sep)
|
||||||
# :::: ($Global::arg_file_sep)
|
# :::: ($Global::arg_file_sep)
|
||||||
# :::+ ($Global::arg_sep with --xapply)
|
# :::+ ($Global::arg_sep with --link)
|
||||||
# ::::+ ($Global::arg_file_sep with --xapply)
|
# ::::+ ($Global::arg_file_sep with --link)
|
||||||
# Removes the arguments from @ARGV and:
|
# Removes the arguments from @ARGV and:
|
||||||
# - puts filenames into -a
|
# - puts filenames into -a
|
||||||
# - puts arguments into files and add the files to -a
|
# - puts arguments into files and add the files to -a
|
||||||
# - adds --xapplyinputsource with 0/1 for each -a depending on :::+/::::+
|
# - adds --linkinputsource with 0/1 for each -a depending on :::+/::::+
|
||||||
# Input:
|
# Input:
|
||||||
# @::ARGV = command option ::: arg arg arg :::: argfiles
|
# @::ARGV = command option ::: arg arg arg :::: argfiles
|
||||||
# Uses:
|
# Uses:
|
||||||
|
@ -1722,7 +1722,7 @@ sub read_args_from_command_line {
|
||||||
$arg eq $Global::arg_file_sep
|
$arg eq $Global::arg_file_sep
|
||||||
or
|
or
|
||||||
$arg eq $Global::arg_file_sep."+") {
|
$arg eq $Global::arg_file_sep."+") {
|
||||||
my $group = $arg; # This group of arguments is args or argfiles
|
my $group_sep = $arg; # This group of arguments is args or argfiles
|
||||||
my @group;
|
my @group;
|
||||||
while(defined ($arg = shift @ARGV)) {
|
while(defined ($arg = shift @ARGV)) {
|
||||||
if($arg eq $Global::arg_sep
|
if($arg eq $Global::arg_sep
|
||||||
|
@ -1740,24 +1740,29 @@ sub read_args_from_command_line {
|
||||||
push @group, $arg;
|
push @group, $arg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($group=~/\+$/) {
|
if($group_sep eq $Global::arg_sep."+") {
|
||||||
# :::+ or ::::+
|
# :::+
|
||||||
push @opt::xapplyinputsource, 1;
|
push @opt::linkinputsource, 1;
|
||||||
|
} elsif($group_sep eq $Global::arg_file_sep."+") {
|
||||||
|
# ::::+
|
||||||
|
for(@group) {
|
||||||
|
push @opt::linkinputsource, 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
push @opt::xapplyinputsource, 0;
|
push @opt::linkinputsource, 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($group eq $Global::arg_file_sep
|
if($group_sep eq $Global::arg_file_sep
|
||||||
or
|
or
|
||||||
$group eq $Global::arg_file_sep."+"
|
$group_sep eq $Global::arg_file_sep."+"
|
||||||
or ($opt::internal_pipe_means_argfiles and $opt::pipe)
|
or ($opt::internal_pipe_means_argfiles and $opt::pipe)
|
||||||
) {
|
) {
|
||||||
# Group of file names on the command line.
|
# Group of file names on the command line.
|
||||||
# Append args into -a
|
# Append args into -a
|
||||||
push @opt::a, @group;
|
push @opt::a, @group;
|
||||||
} elsif($group eq $Global::arg_sep
|
} elsif($group_sep eq $Global::arg_sep
|
||||||
or
|
or
|
||||||
$group eq $Global::arg_sep."+") {
|
$group_sep eq $Global::arg_sep."+") {
|
||||||
# Group of arguments on the command line.
|
# Group of arguments on the command line.
|
||||||
# Put them into a file.
|
# Put them into a file.
|
||||||
# Create argfile
|
# Create argfile
|
||||||
|
@ -1770,7 +1775,7 @@ sub read_args_from_command_line {
|
||||||
# Append filehandle to -a
|
# Append filehandle to -a
|
||||||
push @opt::a, $outfh;
|
push @opt::a, $outfh;
|
||||||
} else {
|
} else {
|
||||||
::die_bug("Unknown command line group: $group");
|
::die_bug("Unknown command line group: $group_sep");
|
||||||
}
|
}
|
||||||
if(defined($arg)) {
|
if(defined($arg)) {
|
||||||
# $arg is ::: or ::::
|
# $arg is ::: or ::::
|
||||||
|
@ -9582,8 +9587,8 @@ sub new {
|
||||||
|
|
||||||
sub get {
|
sub get {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
if($opt::xapply) {
|
if($opt::link) {
|
||||||
return $self->xapply_get();
|
return $self->link_get();
|
||||||
} else {
|
} else {
|
||||||
return $self->nest_get();
|
return $self->nest_get();
|
||||||
}
|
}
|
||||||
|
@ -9606,7 +9611,7 @@ sub empty {
|
||||||
return $empty;
|
return $empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub xapply_get {
|
sub link_get {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
if(@{$self->{'unget'}}) {
|
if(@{$self->{'unget'}}) {
|
||||||
return shift @{$self->{'unget'}};
|
return shift @{$self->{'unget'}};
|
||||||
|
@ -9689,8 +9694,8 @@ sub nest_get {
|
||||||
my @combarg = ();
|
my @combarg = ();
|
||||||
for (my $fhn = 0; $fhn < $no_of_inputsources; $fhn++) {
|
for (my $fhn = 0; $fhn < $no_of_inputsources; $fhn++) {
|
||||||
push(@combarg, [0, $#{$self->{'arg_matrix'}[$fhn]}],
|
push(@combarg, [0, $#{$self->{'arg_matrix'}[$fhn]}],
|
||||||
# Is input source --xapply linked to the next?
|
# Is input source --link'ed to the next?
|
||||||
$opt::xapplyinputsource[$fhn+1]);
|
$opt::linkinputsource[$fhn+1]);
|
||||||
}
|
}
|
||||||
$combarg[2*$fhno] = [$len,$len]; # Find only combinations with this new entry
|
$combarg[2*$fhno] = [$len,$len]; # Find only combinations with this new entry
|
||||||
# map combinations
|
# map combinations
|
||||||
|
@ -9777,14 +9782,14 @@ sub expand_combinations {
|
||||||
# Returns: ([x,y,...],[x,y,...])
|
# Returns: ([x,y,...],[x,y,...])
|
||||||
# where xmin <= x <= xmax and ymin <= y <= ymax
|
# where xmin <= x <= xmax and ymin <= y <= ymax
|
||||||
my $minmax_ref = shift;
|
my $minmax_ref = shift;
|
||||||
my $xapply = shift; # This is linked to the next input source
|
my $link = shift; # This is linked to the next input source
|
||||||
my $xmin = $$minmax_ref[0];
|
my $xmin = $$minmax_ref[0];
|
||||||
my $xmax = $$minmax_ref[1];
|
my $xmax = $$minmax_ref[1];
|
||||||
my @p;
|
my @p;
|
||||||
if(@_) {
|
if(@_) {
|
||||||
my @rest = expand_combinations(@_);
|
my @rest = expand_combinations(@_);
|
||||||
if($xapply) {
|
if($link) {
|
||||||
# Linked to next col with xapply
|
# Linked to next col with --link/:::+/::::+
|
||||||
# TODO BUG does not wrap values if not same number of vals
|
# TODO BUG does not wrap values if not same number of vals
|
||||||
push(@p, map { [$$_[0], @$_] }
|
push(@p, map { [$$_[0], @$_] }
|
||||||
grep { $xmin <= $$_[0] and $$_[0] <= $xmax } @rest);
|
grep { $xmin <= $$_[0] and $$_[0] <= $xmax } @rest);
|
||||||
|
|
|
@ -336,9 +336,9 @@ B<:::> and B<::::> can be mixed. So these are equivalent:
|
||||||
|
|
||||||
=item B<:::+> I<arguments>
|
=item B<:::+> I<arguments>
|
||||||
|
|
||||||
Like B<:::> but linked like B<--xapply> to the previous input source.
|
Like B<:::> but linked like B<--link> to the previous input source.
|
||||||
|
|
||||||
Contrary to B<--xapply> values do not wrap: The shortest input source
|
Contrary to B<--link>, values do not wrap: The shortest input source
|
||||||
determines the length.
|
determines the length.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
@ -352,14 +352,14 @@ Another way to write B<-a> I<argfile1> B<-a> I<argfile2> ...
|
||||||
|
|
||||||
B<:::> and B<::::> can be mixed.
|
B<:::> and B<::::> can be mixed.
|
||||||
|
|
||||||
See B<-a>, B<:::> and B<--xapply>.
|
See B<-a>, B<:::> and B<--link>.
|
||||||
|
|
||||||
|
|
||||||
=item B<::::+> I<argfiles>
|
=item B<::::+> I<argfiles>
|
||||||
|
|
||||||
Like B<::::+> but linked like B<--xapply> to the previous input source.
|
Like B<::::> but linked like B<--link> to the previous input source.
|
||||||
|
|
||||||
Contrary to B<--xapply> values do not wrap: The shortest input source
|
Contrary to B<--link>, values do not wrap: The shortest input source
|
||||||
determines the length.
|
determines the length.
|
||||||
|
|
||||||
|
|
||||||
|
@ -387,7 +387,7 @@ contains B<a b c>. B<-a foo> B<-a bar> will result in the combinations
|
||||||
(1,a) (1,b) (1,c) (2,a) (2,b) (2,c). This is useful for replacing
|
(1,a) (1,b) (1,c) (2,a) (2,b) (2,c). This is useful for replacing
|
||||||
nested for-loops.
|
nested for-loops.
|
||||||
|
|
||||||
See also B<--xapply> and B<{>I<n>B<}>.
|
See also B<--link> and B<{>I<n>B<}>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--arg-file-sep> I<sep-str>
|
=item B<--arg-file-sep> I<sep-str>
|
||||||
|
@ -551,8 +551,8 @@ Compress temporary files. If the output is big and very compressible
|
||||||
this will take up less disk space in $TMPDIR and possibly be faster
|
this will take up less disk space in $TMPDIR and possibly be faster
|
||||||
due to less disk I/O.
|
due to less disk I/O.
|
||||||
|
|
||||||
GNU B<parallel> will try B<lz4>, B<pigz>, B<lzop>, B<plzip>,
|
GNU B<parallel> will try B<lz4>, B<lzop>, B<pbzip2>, B<pigz>,
|
||||||
B<pbzip2>, B<pxz>, B<gzip>, B<lzma>, B<xz>, B<bzip2>, B<lzip> in that
|
B<plzip>, B<lzip> B<gzip>, B<pxz>, B<lzma>, B<xz>, B<bzip2>, in that
|
||||||
order, and use the first available.
|
order, and use the first available.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1004,6 +1004,30 @@ limiting factor.
|
||||||
See also: B<--group> B<--ungroup>
|
See also: B<--group> B<--ungroup>
|
||||||
|
|
||||||
|
|
||||||
|
=item B<--xapply> (alpha testing)
|
||||||
|
|
||||||
|
=item B<--link> (alpha testing)
|
||||||
|
|
||||||
|
Link input sources. Read multiple input sources like B<xapply>. If
|
||||||
|
multiple input sources are given, one argument will be read from each
|
||||||
|
of the input sources. The arguments can be accessed in the command as
|
||||||
|
B<{1}> .. B<{>I<n>B<}>, so B<{1}> will be a line from the first input
|
||||||
|
source, and B<{6}> will refer to the line with the same line number
|
||||||
|
from the 6th input source.
|
||||||
|
|
||||||
|
Compare these two:
|
||||||
|
|
||||||
|
parallel echo {1} {2} ::: 1 2 3 ::: a b c
|
||||||
|
parallel --link echo {1} {2} ::: 1 2 3 ::: a b c
|
||||||
|
|
||||||
|
Arguments will be recycled if one input source has more arguments than the others:
|
||||||
|
|
||||||
|
parallel --link echo {1} {2} {3} \
|
||||||
|
::: 1 2 ::: I II III ::: a b c d e f g
|
||||||
|
|
||||||
|
See also B<--header>, B<:::+>, B<::::+>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--load> I<max-load>
|
=item B<--load> I<max-load>
|
||||||
|
|
||||||
Do not start new jobs on a given computer unless the number of running
|
Do not start new jobs on a given computer unless the number of running
|
||||||
|
@ -1113,6 +1137,7 @@ of each job is saved in a file and the filename is then printed.
|
||||||
|
|
||||||
See also: B<--results>
|
See also: B<--results>
|
||||||
|
|
||||||
|
|
||||||
=item B<--pipe>
|
=item B<--pipe>
|
||||||
|
|
||||||
=item B<--spreadstdin>
|
=item B<--spreadstdin>
|
||||||
|
@ -1155,7 +1180,6 @@ If B<--block> is left out, B<--pipepart> will use a block size that
|
||||||
will result in 10 jobs per jobslot, except if run with
|
will result in 10 jobs per jobslot, except if run with
|
||||||
B<--round-robin> in which case it will result in 1 job per jobslot.
|
B<--round-robin> in which case it will result in 1 job per jobslot.
|
||||||
|
|
||||||
|
|
||||||
B<--pipepart> has a few limitations:
|
B<--pipepart> has a few limitations:
|
||||||
|
|
||||||
=over 3
|
=over 3
|
||||||
|
@ -2302,27 +2326,6 @@ See also B<-m>.
|
||||||
Exit if the size (see the B<-s> option) is exceeded.
|
Exit if the size (see the B<-s> option) is exceeded.
|
||||||
|
|
||||||
|
|
||||||
=item B<--xapply>
|
|
||||||
|
|
||||||
Read multiple input sources like B<xapply>. If multiple input sources
|
|
||||||
are given, one argument will be read from each of the input
|
|
||||||
sources. The arguments can be accessed in the command as B<{1}>
|
|
||||||
.. B<{>I<n>B<}>, so B<{1}> will be a line from the first input source, and
|
|
||||||
B<{6}> will refer to the line with the same line number from the 6th
|
|
||||||
input source.
|
|
||||||
|
|
||||||
Compare these two:
|
|
||||||
|
|
||||||
parallel echo {1} {2} ::: 1 2 3 ::: a b c
|
|
||||||
parallel --xapply echo {1} {2} ::: 1 2 3 ::: a b c
|
|
||||||
|
|
||||||
Arguments will be recycled if one input source has more arguments than the others:
|
|
||||||
|
|
||||||
parallel --xapply echo {1} {2} {3} \
|
|
||||||
::: 1 2 ::: I II III ::: a b c d e f g
|
|
||||||
|
|
||||||
See also B<--header>.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 EXAMPLE: Working as xargs -n1. Argument appending
|
=head1 EXAMPLE: Working as xargs -n1. Argument appending
|
||||||
|
@ -3339,13 +3342,13 @@ Count in binary:
|
||||||
|
|
||||||
Print the number on the opposing sides of a six sided die:
|
Print the number on the opposing sides of a six sided die:
|
||||||
|
|
||||||
parallel --xapply -a <(seq 6) -a <(seq 6 -1 1) echo
|
parallel --link -a <(seq 6) -a <(seq 6 -1 1) echo
|
||||||
parallel --xapply echo :::: <(seq 6) <(seq 6 -1 1)
|
parallel --link echo :::: <(seq 6) <(seq 6 -1 1)
|
||||||
|
|
||||||
Convert files from all subdirs to PNG-files with consecutive numbers
|
Convert files from all subdirs to PNG-files with consecutive numbers
|
||||||
(useful for making input PNG's for B<ffmpeg>):
|
(useful for making input PNG's for B<ffmpeg>):
|
||||||
|
|
||||||
parallel --xapply -a <(find . -type f | sort) \
|
parallel --link -a <(find . -type f | sort) \
|
||||||
-a <(seq $(find . -type f|wc -l)) convert {1} {2}.png
|
-a <(seq $(find . -type f|wc -l)) convert {1} {2}.png
|
||||||
|
|
||||||
Alternative version:
|
Alternative version:
|
||||||
|
@ -3613,11 +3616,12 @@ system/batch manager: You have to submit JobSlot number of jobs before
|
||||||
they will start, and after that you can submit one at a time, and job
|
they will start, and after that you can submit one at a time, and job
|
||||||
will start immediately if free slots are available. Output from the
|
will start immediately if free slots are available. Output from the
|
||||||
running or completed jobs are held back and will only be printed when
|
running or completed jobs are held back and will only be printed when
|
||||||
JobSlots more jobs has been started (unless you use --ungroup or -u,
|
JobSlots more jobs has been started (unless you use --ungroup or
|
||||||
in which case the output from the jobs are printed immediately).
|
--line-buffer, in which case the output from the jobs are printed
|
||||||
E.g. if you have 10 jobslots then the output from the first completed
|
immediately). E.g. if you have 10 jobslots then the output from the
|
||||||
job will only be printed when job 11 has started, and the output of
|
first completed job will only be printed when job 11 has started, and
|
||||||
second completed job will only be printed when job 12 has started.
|
the output of second completed job will only be printed when job 12
|
||||||
|
has started.
|
||||||
|
|
||||||
|
|
||||||
=head1 EXAMPLE: GNU Parallel as dir processor
|
=head1 EXAMPLE: GNU Parallel as dir processor
|
||||||
|
@ -4432,7 +4436,7 @@ B<2> parallel diff {} ../version5/{} < manifest | more
|
||||||
|
|
||||||
B<3> xapply -p/dev/null -f 'diff %1 %2' manifest1 checklist1
|
B<3> xapply -p/dev/null -f 'diff %1 %2' manifest1 checklist1
|
||||||
|
|
||||||
B<3> parallel --xapply diff {1} {2} :::: manifest1 checklist1
|
B<3> parallel --link diff {1} {2} :::: manifest1 checklist1
|
||||||
|
|
||||||
B<4> xapply 'indent' *.c
|
B<4> xapply 'indent' *.c
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,15 @@ To run this tutorial you must have the following:
|
||||||
|
|
||||||
=over 9
|
=over 9
|
||||||
|
|
||||||
=item parallel >= version 20160222
|
=item parallel >= version 20160822
|
||||||
|
|
||||||
Install the newest version using your package manager or with:
|
Install the newest version using your package manager or with this
|
||||||
|
command:
|
||||||
|
|
||||||
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
|
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
|
||||||
|
|
||||||
This will also install the newest version of the tutorial:
|
This will also install the newest version of the tutorial which you
|
||||||
|
can see by running this:
|
||||||
|
|
||||||
man parallel_tutorial
|
man parallel_tutorial
|
||||||
|
|
||||||
|
@ -30,71 +32,71 @@ Most of the tutorial will work on older versions, too.
|
||||||
|
|
||||||
=item abc-file:
|
=item abc-file:
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
parallel -k echo ::: A B C > abc-file
|
parallel -k echo ::: A B C > abc-file
|
||||||
|
|
||||||
=item def-file:
|
=item def-file:
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
parallel -k echo ::: D E F > def-file
|
parallel -k echo ::: D E F > def-file
|
||||||
|
|
||||||
=item abc0-file:
|
=item abc0-file:
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'printf "A\0B\0C\0"' > abc0-file
|
perl -e 'printf "A\0B\0C\0"' > abc0-file
|
||||||
|
|
||||||
=item abc_-file:
|
=item abc_-file:
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'printf "A_B_C_"' > abc_-file
|
perl -e 'printf "A_B_C_"' > abc_-file
|
||||||
|
|
||||||
=item tsv-file.tsv
|
=item tsv-file.tsv
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'printf "f1\tf2\nA\tB\nC\tD\n"' > tsv-file.tsv
|
perl -e 'printf "f1\tf2\nA\tB\nC\tD\n"' > tsv-file.tsv
|
||||||
|
|
||||||
=item num8
|
=item num8
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'for(1..8){print "$_\n"}' > num8
|
perl -e 'for(1..8){print "$_\n"}' > num8
|
||||||
|
|
||||||
=item num128
|
=item num128
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'for(1..128){print "$_\n"}' > num128
|
perl -e 'for(1..128){print "$_\n"}' > num128
|
||||||
|
|
||||||
=item num30000
|
=item num30000
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'for(1..30000){print "$_\n"}' > num30000
|
perl -e 'for(1..30000){print "$_\n"}' > num30000
|
||||||
|
|
||||||
=item num1000000
|
=item num1000000
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
perl -e 'for(1..1000000){print "$_\n"}' > num1000000
|
perl -e 'for(1..1000000){print "$_\n"}' > num1000000
|
||||||
|
|
||||||
=item num_%header
|
=item num_%header
|
||||||
|
|
||||||
The file can be generated by:
|
The file can be generated by this command:
|
||||||
|
|
||||||
(echo %head1; echo %head2; perl -e 'for(1..10){print "$_\n"}') > num_%header
|
(echo %head1; echo %head2; perl -e 'for(1..10){print "$_\n"}') > num_%header
|
||||||
|
|
||||||
=item For remote running: ssh login on 2 servers with no password in
|
=item For remote running: ssh login on 2 servers with no password in
|
||||||
$SERVER1 and $SERVER2
|
$SERVER1 and $SERVER2 must work.
|
||||||
|
|
||||||
SERVER1=server.example.com
|
SERVER1=server.example.com
|
||||||
SERVER2=server2.example.net
|
SERVER2=server2.example.net
|
||||||
|
|
||||||
You must be able to:
|
So you must be able to do this:
|
||||||
|
|
||||||
ssh $SERVER1 echo works
|
ssh $SERVER1 echo works
|
||||||
ssh $SERVER2 echo works
|
ssh $SERVER2 echo works
|
||||||
|
@ -180,11 +182,12 @@ Output: Same as above.
|
||||||
|
|
||||||
Output: Same as above.
|
Output: Same as above.
|
||||||
|
|
||||||
=head3 Matching arguments from all input sources
|
=head3 Linking arguments from input sources
|
||||||
|
|
||||||
With B<--xapply> you can get one argument from each input source:
|
With B<--link> you can link the input sources and get one argument
|
||||||
|
from each input source:
|
||||||
|
|
||||||
parallel --xapply echo ::: A B C ::: D E F
|
parallel --link echo ::: A B C ::: D E F
|
||||||
|
|
||||||
Output (the order may be different):
|
Output (the order may be different):
|
||||||
|
|
||||||
|
@ -194,7 +197,7 @@ Output (the order may be different):
|
||||||
|
|
||||||
If one of the input sources is too short, its values will wrap:
|
If one of the input sources is too short, its values will wrap:
|
||||||
|
|
||||||
parallel --xapply echo ::: A B C D E ::: F G
|
parallel --link echo ::: A B C D E ::: F G
|
||||||
|
|
||||||
Output (the order may be different):
|
Output (the order may be different):
|
||||||
|
|
||||||
|
@ -204,6 +207,53 @@ Output (the order may be different):
|
||||||
D G
|
D G
|
||||||
E F
|
E F
|
||||||
|
|
||||||
|
For more flexible linking you can use B<:::+> and B<::::+>. They work
|
||||||
|
like B<:::> and B<::::> except they link the previous input source to
|
||||||
|
this input source.
|
||||||
|
|
||||||
|
This will link ABC to GHI:
|
||||||
|
|
||||||
|
parallel echo :::: abc-file :::+ G H I :::: def-file
|
||||||
|
|
||||||
|
Output (the order may be different):
|
||||||
|
|
||||||
|
A G D
|
||||||
|
A G E
|
||||||
|
A G F
|
||||||
|
B H D
|
||||||
|
B H E
|
||||||
|
B H F
|
||||||
|
C I D
|
||||||
|
C I E
|
||||||
|
C I F
|
||||||
|
|
||||||
|
This will link GHI to DEF:
|
||||||
|
|
||||||
|
parallel echo :::: abc-file ::: G H I ::::+ def-file
|
||||||
|
|
||||||
|
Output (the order may be different):
|
||||||
|
|
||||||
|
A G D
|
||||||
|
A H E
|
||||||
|
A I F
|
||||||
|
B G D
|
||||||
|
B H E
|
||||||
|
B I F
|
||||||
|
C G D
|
||||||
|
C H E
|
||||||
|
C I F
|
||||||
|
|
||||||
|
If one of the input sources is too short when using B<:::+> or
|
||||||
|
B<::::+>, the rest will be ignored:
|
||||||
|
|
||||||
|
parallel echo ::: A B C D E :::+ F G
|
||||||
|
|
||||||
|
Output (the order may be different):
|
||||||
|
|
||||||
|
A F
|
||||||
|
B G
|
||||||
|
|
||||||
|
|
||||||
=head2 Changing the argument separator.
|
=head2 Changing the argument separator.
|
||||||
|
|
||||||
GNU B<parallel> can use other separators than B<:::> or B<::::>. This is
|
GNU B<parallel> can use other separators than B<:::> or B<::::>. This is
|
||||||
|
@ -243,7 +293,7 @@ Output (the order may be different):
|
||||||
B
|
B
|
||||||
C
|
C
|
||||||
|
|
||||||
NULL can be given as B<\0>:
|
NUL can be given as B<\0>:
|
||||||
|
|
||||||
parallel -d '\0' echo :::: abc0-file
|
parallel -d '\0' echo :::: abc0-file
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ INSTALL="echo sudo aptitude -y install"
|
||||||
# The testsuite depends on this:
|
# The testsuite depends on this:
|
||||||
|
|
||||||
$INSTALL imagemagick expect autossh sshpass jq libpod-simple-perl pod2pdf
|
$INSTALL imagemagick expect autossh sshpass jq libpod-simple-perl pod2pdf
|
||||||
|
$INSTALL lua5.2 clisp php7.0-cli nodejs-legacy mono-csharp-shell
|
||||||
|
|
||||||
# DEBIAN package
|
# DEBIAN package
|
||||||
$INSTALL dpkg-dev build-essential debhelper
|
$INSTALL dpkg-dev build-essential debhelper
|
||||||
|
|
|
@ -120,8 +120,10 @@ echo '### TMUX not found'
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
parallel -j4 --halt 2 ::: 'sleep 1' burnP6 false; killall burnP6 && echo ERROR: burnP6 should be killed
|
parallel -j4 --halt 2 ::: 'sleep 1' burnP6 false;
|
||||||
parallel -j4 --halt -2 ::: 'sleep 1' burnP5 true; killall burnP5 && echo ERROR: burnP5 should be killed
|
killall burnP6 && echo ERROR: burnP6 should already have been killed
|
||||||
|
parallel -j4 --halt -2 ::: 'sleep 1' burnP5 true;
|
||||||
|
killall burnP5 && echo ERROR: burnP5 should already have been killed
|
||||||
|
|
||||||
parallel --halt error echo ::: should not print
|
parallel --halt error echo ::: should not print
|
||||||
parallel --halt soon echo ::: should not print
|
parallel --halt soon echo ::: should not print
|
||||||
|
@ -304,9 +306,9 @@ echo '### test too long args'
|
||||||
|
|
||||||
perl -e 'print "z"x1000000' | parallel echo 2>&1
|
perl -e 'print "z"x1000000' | parallel echo 2>&1
|
||||||
perl -e 'print "z"x1000000' | xargs echo 2>&1
|
perl -e 'print "z"x1000000' | xargs echo 2>&1
|
||||||
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10 echo
|
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort parallel -j1 -km -s 10 echo
|
||||||
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout xargs -s 10 echo
|
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort xargs -s 10 echo
|
||||||
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -kX -s 10 echo
|
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort parallel -j1 -kX -s 10 echo
|
||||||
|
|
||||||
echo '### Test -x'
|
echo '### Test -x'
|
||||||
|
|
||||||
|
@ -631,6 +633,12 @@ echo '**'
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
|
echo '### bug #48745: :::+ bug'
|
||||||
|
|
||||||
|
parallel -k echo ::: 11 22 33 ::::+ <(seq 3) <(seq 21 23) ::: c d e :::+ cc dd ee
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
echo '### 1 .par file from --files expected'
|
echo '### 1 .par file from --files expected'
|
||||||
find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | wc -l
|
find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | wc -l
|
||||||
|
|
|
@ -1,57 +1,293 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
seq 1 2 >/tmp/in12
|
|
||||||
seq 4 5 >/tmp/in45
|
|
||||||
|
|
||||||
echo "### Test basic --shebang-wrap"
|
par_basic_shebang_wrap() {
|
||||||
cat <<EOF > /tmp/basic--shebang-wrap
|
echo "### Test basic --shebang-wrap"
|
||||||
|
cat <<EOF > /tmp/basic--shebang-wrap
|
||||||
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl
|
||||||
|
|
||||||
print "Shebang from perl with args @ARGV\n";
|
print "Shebang from perl with args @ARGV\n";
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod 755 /tmp/basic--shebang-wrap
|
chmod 755 /tmp/basic--shebang-wrap
|
||||||
/tmp/basic--shebang-wrap arg1 arg2
|
/tmp/basic--shebang-wrap arg1 arg2
|
||||||
echo "### Test basic --shebang-wrap Same as"
|
echo "### Test basic --shebang-wrap Same as"
|
||||||
parallel -k /usr/bin/perl /tmp/basic--shebang-wrap ::: arg1 arg2
|
parallel -k /usr/bin/perl /tmp/basic--shebang-wrap ::: arg1 arg2
|
||||||
echo "### Test basic --shebang-wrap stdin"
|
echo "### Test basic --shebang-wrap stdin"
|
||||||
(echo arg1; echo arg2) | /tmp/basic--shebang-wrap
|
(echo arg1; echo arg2) | /tmp/basic--shebang-wrap
|
||||||
echo "### Test basic --shebang-wrap Same as"
|
echo "### Test basic --shebang-wrap Same as"
|
||||||
(echo arg1; echo arg2) | parallel -k /usr/bin/perl /tmp/basic--shebang-wrap
|
(echo arg1; echo arg2) | parallel -k /usr/bin/perl /tmp/basic--shebang-wrap
|
||||||
rm /tmp/basic--shebang-wrap
|
rm /tmp/basic--shebang-wrap
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_with_parser_options() {
|
||||||
echo "### Test --shebang-wrap with parser options"
|
seq 1 2 >/tmp/in12
|
||||||
cat <<EOF > /tmp/with-parser--shebang-wrap
|
seq 4 5 >/tmp/in45
|
||||||
|
|
||||||
|
echo "### Test --shebang-wrap with parser options"
|
||||||
|
cat <<EOF > /tmp/with-parser--shebang-wrap
|
||||||
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl -p
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl -p
|
||||||
|
|
||||||
print "Shebang from perl with args @ARGV\n";
|
print "Shebang from perl with args @ARGV\n";
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod 755 /tmp/with-parser--shebang-wrap
|
chmod 755 /tmp/with-parser--shebang-wrap
|
||||||
/tmp/with-parser--shebang-wrap /tmp/in12 /tmp/in45
|
/tmp/with-parser--shebang-wrap /tmp/in12 /tmp/in45
|
||||||
echo "### Test --shebang-wrap with parser options Same as"
|
echo "### Test --shebang-wrap with parser options Same as"
|
||||||
parallel -k /usr/bin/perl -p /tmp/with-parser--shebang-wrap ::: /tmp/in12 /tmp/in45
|
parallel -k /usr/bin/perl -p /tmp/with-parser--shebang-wrap ::: /tmp/in12 /tmp/in45
|
||||||
echo "### Test --shebang-wrap with parser options stdin"
|
echo "### Test --shebang-wrap with parser options stdin"
|
||||||
(echo /tmp/in12; echo /tmp/in45) | /tmp/with-parser--shebang-wrap
|
(echo /tmp/in12; echo /tmp/in45) | /tmp/with-parser--shebang-wrap
|
||||||
echo "### Test --shebang-wrap with parser options Same as"
|
echo "### Test --shebang-wrap with parser options Same as"
|
||||||
(echo /tmp/in12; echo /tmp/in45) | parallel -k /usr/bin/perl /tmp/with-parser--shebang-wrap
|
(echo /tmp/in12; echo /tmp/in45) | parallel -k /usr/bin/perl /tmp/with-parser--shebang-wrap
|
||||||
rm /tmp/with-parser--shebang-wrap
|
rm /tmp/with-parser--shebang-wrap
|
||||||
|
|
||||||
|
|
||||||
echo "### Test --shebang-wrap --pipe with parser options"
|
echo "### Test --shebang-wrap --pipe with parser options"
|
||||||
cat <<EOF > /tmp/pipe--shebang-wrap
|
cat <<EOF > /tmp/pipe--shebang-wrap
|
||||||
#!/usr/local/bin/parallel --shebang-wrap -k --pipe /usr/bin/perl -p
|
#!/usr/local/bin/parallel --shebang-wrap -k --pipe /usr/bin/perl -p
|
||||||
|
|
||||||
print "Shebang from perl with args @ARGV\n";
|
print "Shebang from perl with args @ARGV\n";
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod 755 /tmp/pipe--shebang-wrap
|
chmod 755 /tmp/pipe--shebang-wrap
|
||||||
echo "### Test --shebang-wrap --pipe with parser options stdin"
|
echo "### Test --shebang-wrap --pipe with parser options stdin"
|
||||||
cat /tmp/in12 /tmp/in45 | /tmp/pipe--shebang-wrap
|
cat /tmp/in12 /tmp/in45 | /tmp/pipe--shebang-wrap
|
||||||
echo "### Test --shebang-wrap --pipe with parser options Same as"
|
echo "### Test --shebang-wrap --pipe with parser options Same as"
|
||||||
cat /tmp/in12 /tmp/in45 | parallel -k --pipe /usr/bin/perl\ -p /tmp/pipe--shebang-wrap
|
cat /tmp/in12 /tmp/in45 | parallel -k --pipe /usr/bin/perl\ -p /tmp/pipe--shebang-wrap
|
||||||
rm /tmp/pipe--shebang-wrap
|
rm /tmp/pipe--shebang-wrap
|
||||||
|
|
||||||
|
rm /tmp/in12
|
||||||
|
rm /tmp/in45
|
||||||
|
}
|
||||||
|
|
||||||
rm /tmp/in12
|
par_shebang_wrap_perl() {
|
||||||
rm /tmp/in45
|
F=/tmp/shebang_wrap_perl
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl
|
||||||
|
|
||||||
|
print "Arguments @ARGV\n";
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_python() {
|
||||||
|
F=/tmp/shebang_wrap_python
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
print 'Arguments', str(sys.argv)
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_bash() {
|
||||||
|
F=/tmp/shebang_wrap_bash
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /bin/bash
|
||||||
|
|
||||||
|
echo Arguments "$@"
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_sh() {
|
||||||
|
F=/tmp/shebang_wrap_sh
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /bin/sh
|
||||||
|
|
||||||
|
echo Arguments "$@"
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_ksh() {
|
||||||
|
F=/tmp/shebang_wrap_ksh
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/ksh
|
||||||
|
|
||||||
|
echo Arguments "$@"
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_zsh() {
|
||||||
|
F=/tmp/shebang_wrap_zsh
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/zsh
|
||||||
|
|
||||||
|
echo Arguments "$@"
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_csh() {
|
||||||
|
F=/tmp/shebang_wrap_csh
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /bin/csh
|
||||||
|
|
||||||
|
echo Arguments "$argv"
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_tcl() {
|
||||||
|
F=/tmp/shebang_wrap_tcl
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/tclsh
|
||||||
|
|
||||||
|
puts "Arguments $argv"
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_R() {
|
||||||
|
F=/tmp/shebang_wrap_R
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/Rscript --vanilla --slave
|
||||||
|
|
||||||
|
args <- commandArgs(trailingOnly = TRUE)
|
||||||
|
print(paste("Arguments ",args))
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_gnuplot() {
|
||||||
|
F=/tmp/shebang_wrap_gnuplot
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k ARG={} /usr/bin/gnuplot
|
||||||
|
|
||||||
|
print "Arguments ", system('echo $ARG')
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_ruby() {
|
||||||
|
F=/tmp/shebang_wrap_ruby
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/ruby
|
||||||
|
|
||||||
|
print "Arguments "
|
||||||
|
puts ARGV
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_octave() {
|
||||||
|
F=/tmp/shebang_wrap_octave
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/octave
|
||||||
|
|
||||||
|
printf ("Arguments");
|
||||||
|
arg_list = argv ();
|
||||||
|
for i = 1:nargin
|
||||||
|
printf (" %s", arg_list{i});
|
||||||
|
endfor
|
||||||
|
printf ("\n");
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_clisp() {
|
||||||
|
F=/tmp/shebang_wrap_clisp
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/clisp
|
||||||
|
|
||||||
|
(format t "~&~S~&" 'Arguments)
|
||||||
|
(format t "~&~S~&" *args*)
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_php() {
|
||||||
|
F=/tmp/shebang_wrap_php
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/php
|
||||||
|
<?php
|
||||||
|
echo "Arguments";
|
||||||
|
foreach(array_slice($argv,1) as $v)
|
||||||
|
{
|
||||||
|
echo " $v";
|
||||||
|
}
|
||||||
|
echo "\n";
|
||||||
|
?>
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_nodejs() {
|
||||||
|
F=/tmp/shebang_wrap_nodejs
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/node
|
||||||
|
|
||||||
|
var myArgs = process.argv.slice(2);
|
||||||
|
console.log('Arguments ', myArgs);
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_lua() {
|
||||||
|
F=/tmp/shebang_wrap_lua
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/lua
|
||||||
|
|
||||||
|
io.write "Arguments"
|
||||||
|
for a = 1, #arg do
|
||||||
|
io.write(" ")
|
||||||
|
io.write(arg[a])
|
||||||
|
end
|
||||||
|
print("")
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
par_shebang_wrap_csharp() {
|
||||||
|
F=/tmp/shebang_wrap_csharp
|
||||||
|
cat <<'EOF' > $F
|
||||||
|
#!/usr/local/bin/parallel --shebang-wrap -k ARGV={} /usr/bin/csharp
|
||||||
|
|
||||||
|
var argv = Environment.GetEnvironmentVariable("ARGV");
|
||||||
|
print("Arguments "+argv);
|
||||||
|
EOF
|
||||||
|
chmod 755 $F
|
||||||
|
$F arg1 arg2 arg3
|
||||||
|
rm $F
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f $(compgen -A function | grep par_)
|
||||||
|
# Tested with -j1..8
|
||||||
|
# -j6 was fastest
|
||||||
|
#compgen -A function | grep par_ | sort | parallel -j$P --tag -k '{} 2>&1'
|
||||||
|
compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1'
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# Test xargs compatibility
|
# Test xargs compatibility
|
||||||
|
|
||||||
rm -f ~/.parallel/will-cite
|
#rm -f ~/.parallel/will-cite
|
||||||
|
|
||||||
echo '### Test -p --interactive'
|
echo '### Test -p --interactive'
|
||||||
cat >/tmp/parallel-script-for-expect <<_EOF
|
cat >/tmp/parallel-script-for-expect <<_EOF
|
||||||
|
|
|
@ -153,11 +153,11 @@ echo '### TMUX not found'
|
||||||
parallel: Error: not-existing not found in $PATH.
|
parallel: Error: not-existing not found in $PATH.
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
parallel -j4 --halt 2 ::: 'sleep 1' burnP6 false; killall burnP6 && echo ERROR: burnP6 should be killed
|
parallel -j4 --halt 2 ::: 'sleep 1' burnP6 false; killall burnP6 && echo ERROR: burnP6 should already have been killed
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
false
|
false
|
||||||
burnP6: no process found
|
burnP6: no process found
|
||||||
parallel -j4 --halt -2 ::: 'sleep 1' burnP5 true; killall burnP5 && echo ERROR: burnP5 should be killed
|
parallel -j4 --halt -2 ::: 'sleep 1' burnP5 true; killall burnP5 && echo ERROR: burnP5 should already have been killed
|
||||||
parallel: This job succeeded:
|
parallel: This job succeeded:
|
||||||
true
|
true
|
||||||
burnP5: no process found
|
burnP5: no process found
|
||||||
|
@ -308,11 +308,11 @@ OK
|
||||||
/mnt/4tb/home/tange/privat/parallel/testsuite
|
/mnt/4tb/home/tange/privat/parallel/testsuite
|
||||||
OK
|
OK
|
||||||
parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g'
|
parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g'
|
||||||
/mnt/0tb/home/tange/.parallel/tmp/aspire-0-0
|
/home/tange/.parallel/tmp/aspire-0-0
|
||||||
/mnt/0tb/home/tange/privat/parallel/testsuite
|
/mnt/0tb/home/tange/privat/parallel/testsuite
|
||||||
OK
|
OK
|
||||||
parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK
|
parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK
|
||||||
/mnt/4tb/home/tange/privat/parallel/testsuite
|
/home/tange/privat/parallel/testsuite
|
||||||
/mnt/4tb/home/tange/privat/parallel/testsuite
|
/mnt/4tb/home/tange/privat/parallel/testsuite
|
||||||
OK
|
OK
|
||||||
echo '**'
|
echo '**'
|
||||||
|
@ -597,21 +597,21 @@ e
|
||||||
parallel: Error: Command line too long (1000005 >= 65528) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
parallel: Error: Command line too long (1000005 >= 65528) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
||||||
perl -e 'print "z"x1000000' | xargs echo 2>&1
|
perl -e 'print "z"x1000000' | xargs echo 2>&1
|
||||||
xargs: argument line too long
|
xargs: argument line too long
|
||||||
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10 echo
|
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort parallel -j1 -km -s 10 echo
|
||||||
1 2
|
1 2
|
||||||
3 4
|
3 4
|
||||||
5 6
|
5 6
|
||||||
7 8
|
7 8
|
||||||
9 10
|
9 10
|
||||||
parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
||||||
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout xargs -s 10 echo
|
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort xargs -s 10 echo
|
||||||
1 2
|
1 2
|
||||||
3 4
|
3 4
|
||||||
5 6
|
5 6
|
||||||
7 8
|
7 8
|
||||||
xargs: argument line too long
|
|
||||||
9 10
|
9 10
|
||||||
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -kX -s 10 echo
|
xargs: argument line too long
|
||||||
|
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort parallel -j1 -kX -s 10 echo
|
||||||
1 2
|
1 2
|
||||||
3 4
|
3 4
|
||||||
5 6
|
5 6
|
||||||
|
@ -1689,5 +1689,19 @@ echo '**'
|
||||||
env_parallel
|
env_parallel
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
|
echo '### bug #48745: :::+ bug'
|
||||||
|
### bug #48745: :::+ bug
|
||||||
|
parallel -k echo ::: 11 22 33 ::::+ <(seq 3) <(seq 21 23) ::: c d e :::+ cc dd ee
|
||||||
|
11 1 21 c cc
|
||||||
|
11 1 21 d dd
|
||||||
|
11 1 21 e ee
|
||||||
|
22 2 22 c cc
|
||||||
|
22 2 22 d dd
|
||||||
|
22 2 22 e ee
|
||||||
|
33 3 23 c cc
|
||||||
|
33 3 23 d dd
|
||||||
|
33 3 23 e ee
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
### 1 .par file from --files expected
|
### 1 .par file from --files expected
|
||||||
0
|
0
|
||||||
|
|
|
@ -20,22 +20,22 @@ echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores'
|
||||||
** test_zsh
|
** test_zsh
|
||||||
FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
FOO=test_zsh
|
FOO=test_zsh
|
||||||
HOME=/mnt/4tb/home/tange
|
HOME=/home/tange
|
||||||
echo '** test_zsh_filter'
|
echo '** test_zsh_filter'
|
||||||
** test_zsh_filter
|
** test_zsh_filter
|
||||||
FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
FOO=test_zsh_filter
|
FOO=test_zsh_filter
|
||||||
HOME=/mnt/4tb/home/tange
|
HOME=/home/tange
|
||||||
echo '** test_csh'
|
echo '** test_csh'
|
||||||
** test_csh
|
** test_csh
|
||||||
FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
FOO=test_csh
|
FOO=test_csh
|
||||||
HOME=/mnt/4tb/home/tange
|
HOME=/home/tange
|
||||||
echo '** test_csh_filter'
|
echo '** test_csh_filter'
|
||||||
** test_csh_filter
|
** test_csh_filter
|
||||||
FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
FOO=test_csh_filter
|
FOO=test_csh_filter
|
||||||
HOME=/mnt/4tb/home/tange
|
HOME=/home/tange
|
||||||
echo '** bug #41805 done'
|
echo '** bug #41805 done'
|
||||||
** bug #41805 done
|
** bug #41805 done
|
||||||
echo '### Deal with long command lines on remote servers'
|
echo '### Deal with long command lines on remote servers'
|
||||||
|
|
|
@ -1,67 +1,121 @@
|
||||||
### Test basic --shebang-wrap
|
par_basic_shebang_wrap ### Test basic --shebang-wrap
|
||||||
Shebang from perl with args arg1
|
par_basic_shebang_wrap Shebang from perl with args arg1
|
||||||
Shebang from perl with args arg2
|
par_basic_shebang_wrap Shebang from perl with args arg2
|
||||||
### Test basic --shebang-wrap Same as
|
par_basic_shebang_wrap ### Test basic --shebang-wrap Same as
|
||||||
Shebang from perl with args arg1
|
par_basic_shebang_wrap Shebang from perl with args arg1
|
||||||
Shebang from perl with args arg2
|
par_basic_shebang_wrap Shebang from perl with args arg2
|
||||||
### Test basic --shebang-wrap stdin
|
par_basic_shebang_wrap ### Test basic --shebang-wrap stdin
|
||||||
Shebang from perl with args arg1
|
par_basic_shebang_wrap Shebang from perl with args arg1
|
||||||
Shebang from perl with args arg2
|
par_basic_shebang_wrap Shebang from perl with args arg2
|
||||||
### Test basic --shebang-wrap Same as
|
par_basic_shebang_wrap ### Test basic --shebang-wrap Same as
|
||||||
Shebang from perl with args arg1
|
par_basic_shebang_wrap Shebang from perl with args arg1
|
||||||
Shebang from perl with args arg2
|
par_basic_shebang_wrap Shebang from perl with args arg2
|
||||||
### Test --shebang-wrap with parser options
|
par_shebang_with_parser_options ### Test --shebang-wrap with parser options
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
1
|
par_shebang_with_parser_options 1
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
2
|
par_shebang_with_parser_options 2
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
4
|
par_shebang_with_parser_options 4
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
5
|
par_shebang_with_parser_options 5
|
||||||
### Test --shebang-wrap with parser options Same as
|
par_shebang_with_parser_options ### Test --shebang-wrap with parser options Same as
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
1
|
par_shebang_with_parser_options 1
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
2
|
par_shebang_with_parser_options 2
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
4
|
par_shebang_with_parser_options 4
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
5
|
par_shebang_with_parser_options 5
|
||||||
### Test --shebang-wrap with parser options stdin
|
par_shebang_with_parser_options ### Test --shebang-wrap with parser options stdin
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
1
|
par_shebang_with_parser_options 1
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
2
|
par_shebang_with_parser_options 2
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
4
|
par_shebang_with_parser_options 4
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
5
|
par_shebang_with_parser_options 5
|
||||||
### Test --shebang-wrap with parser options Same as
|
par_shebang_with_parser_options ### Test --shebang-wrap with parser options Same as
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
1
|
par_shebang_with_parser_options 1
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
2
|
par_shebang_with_parser_options 2
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
4
|
par_shebang_with_parser_options 4
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
5
|
par_shebang_with_parser_options 5
|
||||||
### Test --shebang-wrap --pipe with parser options
|
par_shebang_with_parser_options ### Test --shebang-wrap --pipe with parser options
|
||||||
### Test --shebang-wrap --pipe with parser options stdin
|
par_shebang_with_parser_options ### Test --shebang-wrap --pipe with parser options stdin
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
1
|
par_shebang_with_parser_options 1
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
2
|
par_shebang_with_parser_options 2
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
4
|
par_shebang_with_parser_options 4
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
5
|
par_shebang_with_parser_options 5
|
||||||
### Test --shebang-wrap --pipe with parser options Same as
|
par_shebang_with_parser_options ### Test --shebang-wrap --pipe with parser options Same as
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
1
|
par_shebang_with_parser_options 1
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
2
|
par_shebang_with_parser_options 2
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
4
|
par_shebang_with_parser_options 4
|
||||||
Shebang from perl with args
|
par_shebang_with_parser_options Shebang from perl with args
|
||||||
5
|
par_shebang_with_parser_options 5
|
||||||
|
par_shebang_wrap_R [1] "Arguments arg1"
|
||||||
|
par_shebang_wrap_R [1] "Arguments arg2"
|
||||||
|
par_shebang_wrap_R [1] "Arguments arg3"
|
||||||
|
par_shebang_wrap_bash Arguments arg1
|
||||||
|
par_shebang_wrap_bash Arguments arg2
|
||||||
|
par_shebang_wrap_bash Arguments arg3
|
||||||
|
par_shebang_wrap_clisp ARGUMENTS
|
||||||
|
par_shebang_wrap_clisp ("arg1")
|
||||||
|
par_shebang_wrap_clisp ARGUMENTS
|
||||||
|
par_shebang_wrap_clisp ("arg2")
|
||||||
|
par_shebang_wrap_clisp ARGUMENTS
|
||||||
|
par_shebang_wrap_clisp ("arg3")
|
||||||
|
par_shebang_wrap_csh Arguments arg1
|
||||||
|
par_shebang_wrap_csh Arguments arg2
|
||||||
|
par_shebang_wrap_csh Arguments arg3
|
||||||
|
par_shebang_wrap_csharp Arguments arg1
|
||||||
|
par_shebang_wrap_csharp Arguments arg2
|
||||||
|
par_shebang_wrap_csharp Arguments arg3
|
||||||
|
par_shebang_wrap_gnuplot Arguments arg1
|
||||||
|
par_shebang_wrap_gnuplot Arguments arg2
|
||||||
|
par_shebang_wrap_gnuplot Arguments arg3
|
||||||
|
par_shebang_wrap_ksh Arguments arg1
|
||||||
|
par_shebang_wrap_ksh Arguments arg2
|
||||||
|
par_shebang_wrap_ksh Arguments arg3
|
||||||
|
par_shebang_wrap_lua Arguments arg1
|
||||||
|
par_shebang_wrap_lua Arguments arg2
|
||||||
|
par_shebang_wrap_lua Arguments arg3
|
||||||
|
par_shebang_wrap_nodejs Arguments [ 'arg1' ]
|
||||||
|
par_shebang_wrap_nodejs Arguments [ 'arg2' ]
|
||||||
|
par_shebang_wrap_nodejs Arguments [ 'arg3' ]
|
||||||
|
par_shebang_wrap_octave Arguments arg1
|
||||||
|
par_shebang_wrap_octave Arguments arg2
|
||||||
|
par_shebang_wrap_octave Arguments arg3
|
||||||
|
par_shebang_wrap_perl Arguments arg1
|
||||||
|
par_shebang_wrap_perl Arguments arg2
|
||||||
|
par_shebang_wrap_perl Arguments arg3
|
||||||
|
par_shebang_wrap_php Arguments arg1
|
||||||
|
par_shebang_wrap_php Arguments arg2
|
||||||
|
par_shebang_wrap_php Arguments arg3
|
||||||
|
par_shebang_wrap_python Arguments ['/tmp/shebang_wrap_python', 'arg1']
|
||||||
|
par_shebang_wrap_python Arguments ['/tmp/shebang_wrap_python', 'arg2']
|
||||||
|
par_shebang_wrap_python Arguments ['/tmp/shebang_wrap_python', 'arg3']
|
||||||
|
par_shebang_wrap_ruby Arguments arg1
|
||||||
|
par_shebang_wrap_ruby Arguments arg2
|
||||||
|
par_shebang_wrap_ruby Arguments arg3
|
||||||
|
par_shebang_wrap_sh Arguments arg1
|
||||||
|
par_shebang_wrap_sh Arguments arg2
|
||||||
|
par_shebang_wrap_sh Arguments arg3
|
||||||
|
par_shebang_wrap_tcl Arguments arg1
|
||||||
|
par_shebang_wrap_tcl Arguments arg2
|
||||||
|
par_shebang_wrap_tcl Arguments arg3
|
||||||
|
par_shebang_wrap_zsh Arguments arg1
|
||||||
|
par_shebang_wrap_zsh Arguments arg2
|
||||||
|
par_shebang_wrap_zsh Arguments arg3
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
bug #46120: Suspend should suspend (at least local) children
|
bug #46120: Suspend should suspend (at least local) children
|
||||||
1024 SHA256:SXgag2Z2L91JsrT5WjNBcARD1EpyCCj4JctVJ6Zpzm0 /mnt/4tb/home/tange/.ssh/id_dsa (DSA)
|
1024 SHA256:SXgag2Z2L91JsrT5WjNBcARD1EpyCCj4JctVJ6Zpzm0 /home/tange/.ssh/id_dsa (DSA)
|
||||||
8192 SHA256:lYn04AefJq/5r0e4FftceviJ7JVnq9NGKY3CW9XMpO8 /mnt/4tb/home/tange/.ssh/id_rsa (RSA)
|
8192 SHA256:lYn04AefJq/5r0e4FftceviJ7JVnq9NGKY3CW9XMpO8 /home/tange/.ssh/id_rsa (RSA)
|
||||||
4096 SHA256:jUQ9ysfprs7UOckttjjVb+j3qikUmKWDEWC+eEJkbDQ /mnt/4tb/home/tange/.ssh/id_rsa_openindiana (RSA)
|
4096 SHA256:jUQ9ysfprs7UOckttjjVb+j3qikUmKWDEWC+eEJkbDQ /home/tange/.ssh/id_rsa_openindiana (RSA)
|
||||||
|
|
||||||
stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 burnP6 ::: 1 | grep -q CPUTIME=1
|
stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 burnP6 ::: 1 | grep -q CPUTIME=1
|
||||||
Zero=OK 0
|
Zero=OK 0
|
||||||
1024 SHA256:SXgag2Z2L91JsrT5WjNBcARD1EpyCCj4JctVJ6Zpzm0 /mnt/4tb/home/tange/.ssh/id_dsa (DSA)
|
1024 SHA256:SXgag2Z2L91JsrT5WjNBcARD1EpyCCj4JctVJ6Zpzm0 /home/tange/.ssh/id_dsa (DSA)
|
||||||
8192 SHA256:lYn04AefJq/5r0e4FftceviJ7JVnq9NGKY3CW9XMpO8 /mnt/4tb/home/tange/.ssh/id_rsa (RSA)
|
8192 SHA256:lYn04AefJq/5r0e4FftceviJ7JVnq9NGKY3CW9XMpO8 /home/tange/.ssh/id_rsa (RSA)
|
||||||
4096 SHA256:jUQ9ysfprs7UOckttjjVb+j3qikUmKWDEWC+eEJkbDQ /mnt/4tb/home/tange/.ssh/id_rsa_openindiana (RSA)
|
4096 SHA256:jUQ9ysfprs7UOckttjjVb+j3qikUmKWDEWC+eEJkbDQ /home/tange/.ssh/id_rsa_openindiana (RSA)
|
||||||
|
|
||||||
echo 1 | stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 burnP6 | grep -q CPUTIME=1
|
echo 1 | stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 burnP6 | grep -q CPUTIME=1
|
||||||
Zero=OK 0
|
Zero=OK 0
|
||||||
|
|
|
@ -82,16 +82,39 @@ B F
|
||||||
C D
|
C D
|
||||||
C E
|
C E
|
||||||
C F
|
C F
|
||||||
parallel --xapply echo ::: A B C ::: D E F
|
parallel --link echo ::: A B C ::: D E F
|
||||||
A D
|
A D
|
||||||
B E
|
B E
|
||||||
C F
|
C F
|
||||||
parallel --xapply echo ::: A B C D E ::: F G
|
parallel --link echo ::: A B C D E ::: F G
|
||||||
A F
|
A F
|
||||||
B G
|
B G
|
||||||
C F
|
C F
|
||||||
D G
|
D G
|
||||||
E F
|
E F
|
||||||
|
parallel echo :::: abc-file :::+ G H I :::: def-file
|
||||||
|
A G D
|
||||||
|
A G E
|
||||||
|
A G F
|
||||||
|
B H D
|
||||||
|
B H E
|
||||||
|
B H F
|
||||||
|
C I D
|
||||||
|
C I E
|
||||||
|
C I F
|
||||||
|
parallel echo :::: abc-file ::: G H I ::::+ def-file
|
||||||
|
A G D
|
||||||
|
A H E
|
||||||
|
A I F
|
||||||
|
B G D
|
||||||
|
B H E
|
||||||
|
B I F
|
||||||
|
C G D
|
||||||
|
C H E
|
||||||
|
C I F
|
||||||
|
parallel echo ::: A B C D E :::+ F G
|
||||||
|
A F
|
||||||
|
B G
|
||||||
parallel --arg-sep ,, echo ,, A B C :::: def-file
|
parallel --arg-sep ,, echo ,, A B C :::: def-file
|
||||||
A D
|
A D
|
||||||
A E
|
A E
|
||||||
|
@ -524,7 +547,7 @@ BASE64-Message: GtkDialog mapped without a transient parent. This is discouraged
|
||||||
cat /tmp/log;
|
cat /tmp/log;
|
||||||
parallel --resume-failed --joblog /tmp/log exit ::: 1 2 3 0 0 0
|
parallel --resume-failed --joblog /tmp/log exit ::: 1 2 3 0 0 0
|
||||||
cat /tmp/log;
|
cat /tmp/log;
|
||||||
parallel --resume-failed --joblog /tmp/log
|
parallel --retry-failed --joblog /tmp/log
|
||||||
cat /tmp/log;
|
cat /tmp/log;
|
||||||
parallel -j2 --halt soon,fail=1 echo {}\; exit {} ::: 0 0 1 2 3
|
parallel -j2 --halt soon,fail=1 echo {}\; exit {} ::: 0 0 1 2 3
|
||||||
Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
|
Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
|
||||||
|
@ -564,6 +587,9 @@ Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
|
||||||
1 : TIMESTAMP 9.999 0 0 1 0 exit 1
|
1 : TIMESTAMP 9.999 0 0 1 0 exit 1
|
||||||
2 : TIMESTAMP 9.999 0 0 2 0 exit 2
|
2 : TIMESTAMP 9.999 0 0 2 0 exit 2
|
||||||
3 : TIMESTAMP 9.999 0 0 3 0 exit 3
|
3 : TIMESTAMP 9.999 0 0 3 0 exit 3
|
||||||
|
1 : TIMESTAMP 9.999 0 0 1 0 exit 1
|
||||||
|
2 : TIMESTAMP 9.999 0 0 2 0 exit 2
|
||||||
|
3 : TIMESTAMP 9.999 0 0 3 0 exit 3
|
||||||
9
|
9
|
||||||
9
|
9
|
||||||
9
|
9
|
||||||
|
@ -709,34 +735,34 @@ Unknown option: :::
|
||||||
Unknown option: green
|
Unknown option: green
|
||||||
env_parallel only works if it is a function. Do the below and restart your shell.
|
env_parallel only works if it is a function. Do the below and restart your shell.
|
||||||
|
|
||||||
bash: Put this in /mnt/4tb/home/tange/.bashrc: . /usr/local/bin/env_parallel.bash
|
bash: Put this in /home/tange/.bashrc: . /usr/local/bin/env_parallel.bash
|
||||||
E.g. by doing: echo '. /usr/local/bin/env_parallel.bash' >> /mnt/4tb/home/tange/.bashrc
|
E.g. by doing: echo '. /usr/local/bin/env_parallel.bash' >> /home/tange/.bashrc
|
||||||
Supports: aliases, functions, variables, arrays
|
Supports: aliases, functions, variables, arrays
|
||||||
|
|
||||||
zsh: Put this in /mnt/4tb/home/tange/.zshrc: . /usr/local/bin/env_parallel.zsh
|
zsh: Put this in /home/tange/.zshrc: . /usr/local/bin/env_parallel.zsh
|
||||||
E.g. by doing: echo '. /usr/local/bin/env_parallel.zsh' >> /mnt/4tb/home/tange/.zshenv
|
E.g. by doing: echo '. /usr/local/bin/env_parallel.zsh' >> /home/tange/.zshenv
|
||||||
Supports: functions, variables, arrays
|
Supports: functions, variables, arrays
|
||||||
|
|
||||||
fish: Put this in /mnt/4tb/home/tange/.config/fish/config.fish:
|
fish: Put this in /home/tange/.config/fish/config.fish:
|
||||||
. (which env_parallel.fish)
|
. (which env_parallel.fish)
|
||||||
E.g. by doing:
|
E.g. by doing:
|
||||||
echo '. (which env_parallel.fish)' >> /mnt/4tb/home/tange/.config/fish/config.fish
|
echo '. (which env_parallel.fish)' >> /home/tange/.config/fish/config.fish
|
||||||
Supports: aliases, functions, variables, arrays
|
Supports: aliases, functions, variables, arrays
|
||||||
|
|
||||||
ksh: Put this in /mnt/4tb/home/tange/.kshrc: source /usr/local/bin/env_parallel.ksh
|
ksh: Put this in /home/tange/.kshrc: source /usr/local/bin/env_parallel.ksh
|
||||||
E.g. by doing: echo 'source /usr/local/bin/env_parallel.ksh' >> /mnt/4tb/home/tange/.kshrc
|
E.g. by doing: echo 'source /usr/local/bin/env_parallel.ksh' >> /home/tange/.kshrc
|
||||||
Supports: aliases, functions, variables, arrays
|
Supports: aliases, functions, variables, arrays
|
||||||
|
|
||||||
pdksh: Put this in /mnt/4tb/home/tange/.profile: source /usr/local/bin/env_parallel.pdksh
|
pdksh: Put this in /home/tange/.profile: source /usr/local/bin/env_parallel.pdksh
|
||||||
E.g. by doing: echo '. /usr/local/bin/env_parallel.pdksh' >> /mnt/4tb/home/tange/.profile
|
E.g. by doing: echo '. /usr/local/bin/env_parallel.pdksh' >> /home/tange/.profile
|
||||||
Supports: aliases, functions, variables, arrays
|
Supports: aliases, functions, variables, arrays
|
||||||
|
|
||||||
csh: Put this in /mnt/4tb/home/tange/.cshrc: source /usr/local/bin/env_parallel.csh
|
csh: Put this in /home/tange/.cshrc: source /usr/local/bin/env_parallel.csh
|
||||||
E.g. by doing: echo 'source /usr/local/bin/env_parallel.csh' >> /mnt/4tb/home/tange/.cshrc
|
E.g. by doing: echo 'source /usr/local/bin/env_parallel.csh' >> /home/tange/.cshrc
|
||||||
Supports: aliases, variables, arrays with no special chars
|
Supports: aliases, variables, arrays with no special chars
|
||||||
|
|
||||||
tcsh: Put this in /mnt/4tb/home/tange/.tcshrc: source /usr/local/bin/env_parallel.tcsh
|
tcsh: Put this in /home/tange/.tcshrc: source /usr/local/bin/env_parallel.tcsh
|
||||||
E.g. by doing: echo 'source /usr/local/bin/env_parallel.tcsh' >> /mnt/4tb/home/tange/.tcshrc
|
E.g. by doing: echo 'source /usr/local/bin/env_parallel.tcsh' >> /home/tange/.tcshrc
|
||||||
Supports: aliases, variables, arrays with no special chars
|
Supports: aliases, variables, arrays with no special chars
|
||||||
|
|
||||||
To install in all shells run:
|
To install in all shells run:
|
||||||
|
|
|
@ -56,7 +56,7 @@ Error:
|
||||||
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||||
### Test dburl :
|
### Test dburl :
|
||||||
Error:
|
Error:
|
||||||
: is not defined in /mnt/4tb/home/tange/.sql/aliases /mnt/4tb/home/tange/.dburl.aliases /etc/sql/aliases /usr/local/bin/dburl.aliases /usr/local/bin/dburl.aliases.dist
|
: is not defined in /home/tange/.sql/aliases /home/tange/.dburl.aliases /etc/sql/aliases /usr/local/bin/dburl.aliases /usr/local/bin/dburl.aliases.dist
|
||||||
|
|
||||||
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
sql [-hnr] [--table-size] [--db-size] [-p pass-through] [-s string] dburl [command]
|
||||||
### Test oracle with multiple arguments on the command line
|
### Test oracle with multiple arguments on the command line
|
||||||
|
@ -90,13 +90,13 @@ arg3
|
||||||
|
|
||||||
OBJECT_NAME
|
OBJECT_NAME
|
||||||
--------------------------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------------------------
|
||||||
JOB_HISTORY
|
|
||||||
EMPLOYEES
|
|
||||||
JOBS
|
|
||||||
DEPARTMENTS
|
|
||||||
LOCATIONS
|
|
||||||
COUNTRIES
|
|
||||||
REGIONS
|
REGIONS
|
||||||
|
COUNTRIES
|
||||||
|
LOCATIONS
|
||||||
|
DEPARTMENTS
|
||||||
|
JOBS
|
||||||
|
EMPLOYEES
|
||||||
|
JOB_HISTORY
|
||||||
|
|
||||||
7 rows selected.
|
7 rows selected.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue