mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-21 21:47:54 +00:00
parallel: Fixed bug #56403: --pipe block by time. Passes testsuite.
Yearly copyright update.
This commit is contained in:
parent
93001714a8
commit
b804568ffd
2
README
2
README
|
@ -123,7 +123,7 @@ When using programs that use GNU Parallel to process data for
|
|||
publication please cite:
|
||||
|
||||
O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,
|
||||
DOI https://doi.org/10.5281/zenodo.11460
|
||||
DOI https://doi.org/10.5281/zenodo.1146014
|
||||
|
||||
|
||||
= New versions =
|
||||
|
|
|
@ -209,9 +209,9 @@ from:tange@gnu.org
|
|||
to:parallel@gnu.org, bug-parallel@gnu.org
|
||||
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
||||
|
||||
Subject: GNU Parallel 20191222 ('Impeachment') released <<[stable]>>
|
||||
Subject: GNU Parallel 20200122 ('Soleimani') released <<[stable]>>
|
||||
|
||||
GNU Parallel 20191222 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||
GNU Parallel 20200122 ('Soleimani') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||
|
||||
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
||||
|
||||
|
@ -221,6 +221,8 @@ See https://www.gnu.org/software/parallel/10-years-anniversary.html
|
|||
|
||||
Quote of the month:
|
||||
|
||||
GNU parallel is straight up incredible.
|
||||
-- Ben Johnson @biobenkj@twtter
|
||||
|
||||
New in this release:
|
||||
|
||||
|
@ -228,7 +230,9 @@ New in this release:
|
|||
|
||||
* GNU Parallel course in Århus https://www.prosa.dk/nc/arrangementer/arrangement/gnu-parallel-og-parallelisering-i-unix-shellen/
|
||||
|
||||
* GNU Parallel is used in https://github.com/JeffersonLab/rfw_tsf_extractor
|
||||
|
||||
https://net2.com/how-to-copy-a-file-to-multiple-directories-in-linux/
|
||||
https://dev.to/voyeg3r/runing-linux-commands-in-parallel-4ff8
|
||||
|
||||
* Bug fixes and man page updates.
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (C) 2016,2017,2018
|
||||
# Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -802,14 +802,12 @@ Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
|||
|
||||
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
|
||||
=head1 LICENSE
|
||||
|
||||
Copyright (C) 2016,2017 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
# after which 'env_parallel' works
|
||||
#
|
||||
#
|
||||
# Copyright (C) 2016-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Copyright (C) 2004-2010 Ole Tange, http://ole.tange.dk
|
||||
#
|
||||
# Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and
|
||||
# Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -305,7 +305,7 @@ Copyright (C) 2004-11-19 Ole Tange, http://ole.tange.dk
|
|||
|
||||
Copyright (C) 2005-2010 Ole Tange, http://ole.tange.dk
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
=head1 LICENSE
|
||||
|
|
158
src/parallel
158
src/parallel
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
# Copyright (C) 2007-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
# Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -589,8 +590,7 @@ sub find_header($$) {
|
|||
if($opt::header eq ":") { $opt::header = "(.*\n)"; }
|
||||
# Number = number of lines
|
||||
$opt::header =~ s/^(\d+)$/"(.*\n)"x$1/e;
|
||||
while(read($fh,substr($$buf_ref,length $$buf_ref,0),
|
||||
$Global::blocksize)) {
|
||||
while(sysread($fh,$$buf_ref,$Global::blocksize,length $$buf_ref)) {
|
||||
if($$buf_ref =~ s/^($opt::header)//) {
|
||||
$header = $1;
|
||||
last;
|
||||
|
@ -637,11 +637,11 @@ sub find_split_positions($$$) {
|
|||
push(@pos,$pos);
|
||||
} else {
|
||||
# Seek the the block start
|
||||
if(not seek($fh, $pos, 0)) {
|
||||
if(not sysseek($fh, $pos, 0)) {
|
||||
::error("Cannot seek to $pos in $file");
|
||||
edit(255);
|
||||
}
|
||||
while(read($fh,substr($buf,length $buf,0),$dd_block_size)) {
|
||||
while(sysread($fh,$buf,$dd_block_size,length $buf)) {
|
||||
if($opt::regexp) {
|
||||
# If match /$recend$recstart/ => Record position
|
||||
if($buf =~ m:^(.*$recend)$recstart:os) {
|
||||
|
@ -667,7 +667,7 @@ sub find_split_positions($$$) {
|
|||
}
|
||||
}
|
||||
if($pos[$#pos] != $size) {
|
||||
# Last splitpoint was not at end of the file: add it
|
||||
# Last splitpoint was not at end of the file: add $size as the last
|
||||
push @pos, $size;
|
||||
}
|
||||
close $fh;
|
||||
|
@ -948,28 +948,39 @@ sub spreadstdin() {
|
|||
my $two_gb = 2**31-1;
|
||||
my $blocksize = $Global::blocksize;
|
||||
my $in = *STDIN;
|
||||
my $timeout = ::multiply_time_units($opt::blocktimeout);
|
||||
|
||||
my $header = find_header(\$buf,$in);
|
||||
while(1) {
|
||||
my $anything_written = 0;
|
||||
my $buflen = length $buf;
|
||||
my $readsize = ($buflen < $blocksize) ? $blocksize-$buflen : $blocksize;
|
||||
# If $buf < $blocksize, append so it is $blocksize long after reading.
|
||||
# Otherwise append a full $blocksize
|
||||
if(not read($in,substr($buf,$buflen,0),$readsize)) {
|
||||
# End-of-file
|
||||
$chunk_number != 1 and last;
|
||||
# Force the while-loop once if everything was read by header reading
|
||||
$one_time_through++ and last;
|
||||
my $anything_written;
|
||||
my $eof;
|
||||
|
||||
sub read_block() {
|
||||
# Read a --blocksize from STDIN
|
||||
# possibly interrupted by --blocktimeout
|
||||
# Add up to the next full block
|
||||
my $readsize = $blocksize - (length $buf) % $blocksize;
|
||||
my ($nread,$alarm);
|
||||
eval {
|
||||
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
|
||||
# --blocktimeout (or 0 if not set)
|
||||
alarm $timeout;
|
||||
do {
|
||||
$nread = sysread $in, $buf, $readsize, length $buf;
|
||||
$readsize -= $nread;
|
||||
} while($readsize and $nread);
|
||||
alarm 0;
|
||||
};
|
||||
if ($@) {
|
||||
die unless $@ eq "alarm\n"; # propagate unexpected errors
|
||||
$alarm = 1;
|
||||
} else {
|
||||
$alarm = 0;
|
||||
}
|
||||
if($opt::r) {
|
||||
# Remove empty lines
|
||||
$buf =~ s/^\s*\n//gm;
|
||||
if(length $buf == 0) {
|
||||
next;
|
||||
$eof = not ($nread or $alarm);
|
||||
}
|
||||
}
|
||||
if($Global::max_lines and not $Global::max_number_of_args) {
|
||||
# Read n-line records
|
||||
|
||||
sub pass_n_line_records() {
|
||||
# Pass records of N lines
|
||||
my $n_lines = $buf =~ tr/\n/\n/;
|
||||
my $last_newline_pos = rindex64(\$buf,"\n");
|
||||
# Go backwards until there are full n-line records
|
||||
|
@ -982,8 +993,10 @@ sub spreadstdin() {
|
|||
write_record_to_pipe($chunk_number++,\$header,\$buf,
|
||||
$recstart,$recend,$last_newline_pos+1);
|
||||
shorten(\$buf,$last_newline_pos+1);
|
||||
} elsif($opt::regexp) {
|
||||
if($Global::max_number_of_args) {
|
||||
}
|
||||
|
||||
sub pass_n_regexps() {
|
||||
# Pass records of N regexps
|
||||
# -N => (start..*?end){n}
|
||||
# -L -N => (start..*?end){n*l}
|
||||
my $read_n_lines = -1+
|
||||
|
@ -1008,9 +1021,11 @@ sub spreadstdin() {
|
|||
$recstart,$recend,length $1);
|
||||
shorten(\$buf,length $1);
|
||||
}
|
||||
} else {
|
||||
eof($in) and last;
|
||||
}
|
||||
|
||||
sub pass_regexp() {
|
||||
# Find the last recend-recstart in $buf
|
||||
$eof and return;
|
||||
if($buf =~ /^(.*$recend)$recstart.*?$/os) {
|
||||
$anything_written +=
|
||||
write_record_to_pipe($chunk_number++,\$header,\$buf,
|
||||
|
@ -1018,10 +1033,14 @@ sub spreadstdin() {
|
|||
shorten(\$buf,length $1);
|
||||
}
|
||||
}
|
||||
} elsif($opt::csv) {
|
||||
# Read a full CSV record
|
||||
# even number of " + end of line
|
||||
|
||||
sub pass_csv_record() {
|
||||
# Pass CVS record
|
||||
# We define a CSV record as an even number of " + end of line
|
||||
# This works if you use " as quoting character
|
||||
my $last_newline_pos = length $buf;
|
||||
# Go backwards from the last \n and search for a position
|
||||
# where there is an even number of "
|
||||
do {
|
||||
# find last EOL
|
||||
$last_newline_pos = rindex64(\$buf,"\n",$last_newline_pos-1);
|
||||
|
@ -1033,8 +1052,10 @@ sub spreadstdin() {
|
|||
write_record_to_pipe($chunk_number++,\$header,\$buf,
|
||||
$recstart,$recend,$last_newline_pos+1);
|
||||
shorten(\$buf,$last_newline_pos+1);
|
||||
} else {
|
||||
if($Global::max_number_of_args) {
|
||||
}
|
||||
|
||||
sub pass_n() {
|
||||
# Pass n records of --recend/--recstart
|
||||
# -N => (start..*?end){n}
|
||||
my $i = 0;
|
||||
my $read_n_lines =
|
||||
|
@ -1048,9 +1069,13 @@ sub spreadstdin() {
|
|||
$recstart,$recend,$i);
|
||||
shorten(\$buf,$i);
|
||||
}
|
||||
} else {
|
||||
eof($in) and last;
|
||||
}
|
||||
|
||||
sub pass() {
|
||||
# Pass records of --recend/--recstart
|
||||
# Split record at fixed string
|
||||
# Find the last recend+recstart in $buf
|
||||
$eof and return;
|
||||
my $i = rindex64(\$buf,$recendrecstart);
|
||||
if($i != -1) {
|
||||
$i += length $recend; # find the actual splitting location
|
||||
|
@ -1060,9 +1085,10 @@ sub spreadstdin() {
|
|||
shorten(\$buf,$i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub increase_blocksize_maybe() {
|
||||
if(not $anything_written
|
||||
and not eof($in)
|
||||
and not $opt::blocktimeout
|
||||
and not $Global::no_autoexpand_block) {
|
||||
# Nothing was written - maybe the block size < record size?
|
||||
# Increase blocksize exponentially up to 2GB-1 (2GB causes problems)
|
||||
|
@ -1074,6 +1100,46 @@ sub spreadstdin() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
while(1) {
|
||||
$anything_written = 0;
|
||||
read_block();
|
||||
if($opt::r) {
|
||||
# Remove empty lines
|
||||
$buf =~ s/^\s*\n//gm;
|
||||
if(length $buf == 0) {
|
||||
if($eof) {
|
||||
last;
|
||||
} else {
|
||||
next;
|
||||
}
|
||||
}
|
||||
}
|
||||
if($Global::max_lines and not $Global::max_number_of_args) {
|
||||
# Pass n-line records
|
||||
pass_n_line_records();
|
||||
} elsif($opt::csv) {
|
||||
# Pass a full CSV record
|
||||
pass_csv_record();
|
||||
} elsif($opt::regexp) {
|
||||
# Split record at regexp
|
||||
if($Global::max_number_of_args) {
|
||||
pass_n_regexps();
|
||||
} else {
|
||||
pass_regexp();
|
||||
}
|
||||
} else {
|
||||
# Pass normal --recend/--recstart record
|
||||
if($Global::max_number_of_args) {
|
||||
pass_n();
|
||||
} else {
|
||||
pass();
|
||||
}
|
||||
}
|
||||
$eof and last;
|
||||
increase_blocksize_maybe();
|
||||
::debug("init", "Round\n");
|
||||
}
|
||||
::debug("init", "Done reading input\n");
|
||||
|
||||
# If there is anything left in the buffer write it
|
||||
|
@ -1092,7 +1158,7 @@ sub spreadstdin() {
|
|||
}
|
||||
}
|
||||
# Wait for running jobs to be done
|
||||
my $sleep =1;
|
||||
my $sleep = 1;
|
||||
while($Global::total_running > 0) {
|
||||
$sleep = ::reap_usleep($sleep);
|
||||
start_more_jobs();
|
||||
|
@ -1530,6 +1596,7 @@ sub options_hash() {
|
|||
"remove-rec-sep|removerecsep|rrs" => \$opt::remove_rec_sep,
|
||||
"files|output-as-files|outputasfiles" => \$opt::files,
|
||||
"block|block-size|blocksize=s" => \$opt::blocksize,
|
||||
"blocktimeout|block-timeout|bt=s" => \$opt::blocktimeout,
|
||||
"tollef" => \$opt::tollef,
|
||||
"gnu" => \$opt::gnu,
|
||||
"link|xapply" => \$opt::link,
|
||||
|
@ -2071,7 +2138,7 @@ sub check_invalid_option_combinations() {
|
|||
|
||||
sub init_globals() {
|
||||
# Defaults:
|
||||
$Global::version = 20191222;
|
||||
$Global::version = 20191223;
|
||||
$Global::progname = 'parallel';
|
||||
$::name = "GNU Parallel";
|
||||
$Global::infinity = 2**31;
|
||||
|
@ -2280,7 +2347,7 @@ sub parse_replacement_string_options() {
|
|||
for(@opt::rpl) {
|
||||
# Create $Global::rpl entries for --rpl options
|
||||
# E.g: "{..} s:\.[^.]+$:;s:\.[^.]+$:;"
|
||||
my ($shorthand,$long) = split/ /,$_,2;
|
||||
my ($shorthand,$long) = split/\s/,$_,2;
|
||||
$Global::rpl{$shorthand} = $long;
|
||||
}
|
||||
}
|
||||
|
@ -4920,7 +4987,8 @@ sub version() {
|
|||
print join
|
||||
("\n",
|
||||
"GNU $Global::progname $Global::version",
|
||||
"Copyright (C) 2007-2019 Ole Tange and Free Software Foundation, Inc.",
|
||||
"Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software",
|
||||
"Foundation, Inc.",
|
||||
"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>",
|
||||
"This is free software: you are free to change and redistribute it.",
|
||||
"GNU $Global::progname comes with no warranty.",
|
||||
|
@ -5050,8 +5118,8 @@ sub embed() {
|
|||
}
|
||||
print "#!$Global::shell
|
||||
|
||||
# Copyright (C) 2007-2019 $user, Ole Tange and Free Software
|
||||
# Foundation, Inc.
|
||||
# Copyright (C) 2007-2020 $user, Ole Tange, http://ole.tange.dk
|
||||
# and Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -5263,7 +5331,7 @@ sub max(@) {
|
|||
return $max;
|
||||
}
|
||||
|
||||
sub sum() {
|
||||
sub sum(@) {
|
||||
# Returns:
|
||||
# Sum of values of array
|
||||
my @args = @_;
|
||||
|
|
|
@ -562,6 +562,21 @@ jobslots process a large amount of data.
|
|||
See B<--pipe> and B<--pipepart> for use of this.
|
||||
|
||||
|
||||
=item B<--blocktimeout> I<duration>
|
||||
|
||||
=item B<--bt> I<duration>
|
||||
|
||||
Time out for reading block when using B<--pipe>. If it takes longer
|
||||
than I<duration> to generate a full block, use the partial block read
|
||||
so far.
|
||||
|
||||
I<duration> must be in whole seconds, but can be expressed as floats
|
||||
postfixed with B<s>, B<m>, B<h>, or B<d> which would multiply the
|
||||
float by 1, 60, 3600, or 86400. Thus these are equivalent: B<--timeout
|
||||
100000> and B<--timeout 1d3.5h16.6m4s>.
|
||||
|
||||
|
||||
|
||||
=item B<--cat>
|
||||
|
||||
Create a temporary file with content. Normally B<--pipe>/B<--pipepart>
|
||||
|
@ -5157,8 +5172,8 @@ Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
|||
|
||||
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange,
|
||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
Parts of the manual concerning B<xargs> compatibility is inspired by
|
||||
the manual of B<xargs> from GNU findutils 4.4.2.
|
||||
|
|
|
@ -2290,10 +2290,69 @@ B<GNU> parallel -j 3 ::: ls df "echo hi"
|
|||
|
||||
(Last checked: 2019-08)
|
||||
|
||||
=head2 DIFFERENCES BETWEEN rargs AND GNU Parallel
|
||||
|
||||
Summary table (see legend above):
|
||||
I1 - - - - - I7
|
||||
- - M3 M4 - -
|
||||
- O2 O3 - O5 O6 - O8 -
|
||||
E1 - - E4 - - -
|
||||
- - - - - - - - -
|
||||
- -
|
||||
|
||||
B<rargs> has elegant ways of doing named regexp capture and field ranges.
|
||||
|
||||
With GNU B<parallel> you can use B<--rpl> to get a similar
|
||||
functionality as regexp capture gives, and use B<join> and B<@arg> to
|
||||
get the field ranges. But the syntax is longer. This:
|
||||
|
||||
--rpl '{r(\d+)\.\.(\d+)} $_=join"$opt::colsep",@arg[$$1..$$2]'
|
||||
|
||||
would make it possible to use:
|
||||
|
||||
{1r3..6}
|
||||
|
||||
for field 3..6.
|
||||
|
||||
For full support of {n..m:s} including negative numbers use a dynamic
|
||||
replacement string like this:
|
||||
|
||||
|
||||
PARALLEL=--rpl\ \''{r((-?\d+)?)\.\.((-?\d+)?)((:([^}]*))?)}
|
||||
$a = defined $$2 ? $$2 < 0 ? 1+$#arg+$$2 : $$2 : 1;
|
||||
$b = defined $$4 ? $$4 < 0 ? 1+$#arg+$$4 : $$4 : $#arg+1;
|
||||
$s = defined $$6 ? $$7 : " ";
|
||||
$_ = join $s,@arg[$a..$b]'\'
|
||||
export PARALLEL
|
||||
|
||||
You can then do:
|
||||
|
||||
head /etc/passwd | parallel --colsep : echo ..={1r..} ..3={1r..3} 4..={1r4..} 2..4={1r2..4} 3..3={1r3..3} ..3:-={1r..3:-} ..3:/={1r..3:/} -1={-1} -5={-5} -6={-6} -3..={1r-3..}
|
||||
|
||||
|
||||
=head3 EXAMPLES FROM rargs MANUAL
|
||||
|
||||
ls *.bak | rargs -p '(.*)\.bak' mv {0} {1}
|
||||
ls *.bak | parallel mv {} {.}
|
||||
|
||||
cat download-list.csv | rargs -p '(?P<url>.*),(?P<filename>.*)' wget {url} -O {filename}
|
||||
cat download-list.csv | parallel --csv wget {1} -O {2}
|
||||
# or use regexps:
|
||||
cat download-list.csv |
|
||||
parallel --rpl '{url} s/,.*//' --rpl '{filename} s/.*?,//' wget {url} -O {filename}
|
||||
|
||||
cat /etc/passwd | rargs -d: echo -e 'id: "{1}"\t name: "{5}"\t rest: "{6..::}"'
|
||||
cat /etc/passwd |
|
||||
parallel -q --colsep : echo -e 'id: "{1}"\t name: "{5}"\t rest: "{=6 $_=join":",@arg[6..$#arg]=}"'
|
||||
|
||||
https://github.com/lotabout/rargs (Last checked: 2020-01)
|
||||
|
||||
|
||||
=head2 Todo
|
||||
|
||||
Url for spread
|
||||
https://github.com/jreisinger/runp
|
||||
|
||||
https://github.com/JeiKeiLim/simple_distribute_job
|
||||
|
||||
https://github.com/reggi/pkgrun
|
||||
|
||||
|
@ -2557,7 +2616,7 @@ Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
|||
|
||||
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
Parts of the manual concerning B<xargs> compatibility is inspired by
|
||||
|
|
|
@ -2998,9 +2998,9 @@ When asking for help, always report the full output of this:
|
|||
|
||||
Output:
|
||||
|
||||
GNU parallel 20180122
|
||||
Copyright (C) 2007-2018
|
||||
Ole Tange and Free Software Foundation, Inc.
|
||||
GNU parallel 20200122
|
||||
Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software
|
||||
Foundation, Inc.
|
||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
GNU parallel comes with no warranty.
|
||||
|
@ -3160,7 +3160,7 @@ https://my.fsf.org/donate/
|
|||
|
||||
=back
|
||||
|
||||
(C) 2013-2019 Ole Tange, FDLv1.3 (See fdl.txt)
|
||||
(C) 2013-2020 Ole Tange, FDLv1.3 (See fdl.txt)
|
||||
|
||||
|
||||
=cut
|
||||
|
|
|
@ -60,7 +60,7 @@ GNU B<parcat> is part of GNU B<parallel>. Report bugs to
|
|||
|
||||
=head1 AUTHOR
|
||||
|
||||
Copyright (C) 2016-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
=head1 LICENSE
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (C) 2016-2019 Ole Tange, http://ole.tange.dk and
|
||||
# Free Software Foundation, Inc.
|
||||
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
# Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -190,7 +190,7 @@ Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
|||
|
||||
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
|
||||
|
|
|
@ -244,7 +244,7 @@ Report bugs to <bug-parallel@gnu.org>.
|
|||
|
||||
=head1 AUTHOR
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
|
||||
|
|
2
src/sql
2
src/sql
|
@ -341,7 +341,7 @@ Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.
|
|||
|
||||
Copyright (C) 2008-2010 Ole Tange http://ole.tange.dk
|
||||
|
||||
Copyright (C) 2010-2019 Ole Tange, http://ole.tange.dk and Free
|
||||
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
=head1 LICENSE
|
||||
|
|
|
@ -57,13 +57,16 @@ add_server_to_hosts() {
|
|||
fi
|
||||
}
|
||||
|
||||
shellsplus() {
|
||||
shells="bash sh csh ash dash tcsh zsh ksh fish fizsh mksh posh rc sash yash nopathbash nopathcsh"
|
||||
shellsplus="parallel $shells"
|
||||
parallel -k echo ::: $shellsplus
|
||||
}
|
||||
|
||||
create_shell_logins() {
|
||||
# SHELLS
|
||||
echo '# Create shell logins'
|
||||
touch ~/.zshrc
|
||||
SSHPASS=`goodpasswd`
|
||||
export SSHPASS
|
||||
shells="bash sh csh ash dash tcsh zsh ksh fish fizsh mksh posh rc sash yash nopathbash nopathcsh"
|
||||
del_add_user() {
|
||||
shell="$1"
|
||||
append-if-not-exists() {
|
||||
|
@ -77,22 +80,33 @@ create_shell_logins() {
|
|||
echo "$string" | sudo tee -a "$file"
|
||||
fi
|
||||
}
|
||||
SSHPASS=`goodpasswd`
|
||||
export SSHPASS
|
||||
append-if-not-exists /etc/shells $(which $shell || which ${shell#"nopath"})
|
||||
sudo deluser $shell && sudo mv /home/$shell /tmp/$shell.$RANDOM
|
||||
sudo groupdel $shell
|
||||
if echo $shell | grep -q parallel; then
|
||||
# User parallel should have /bin/bash
|
||||
loginshell=/bin/bash
|
||||
else
|
||||
# Other users should have `which $shell` with nopath removed
|
||||
loginshell=$(which $shell || which ${shell#"nopath"})
|
||||
fi
|
||||
sudo adduser --shell $loginshell --disabled-password --gecos "$shell for parallel,,," $shell &&
|
||||
echo "$shell:$SSHPASS" | sudo chpasswd
|
||||
echo "$shell:$SSHPASS" | sudo chpasswd &&
|
||||
sshpass -e ssh-copy-id $shell@lo &&
|
||||
echo "$shell created"
|
||||
}
|
||||
export -f del_add_user
|
||||
|
||||
echo '# (Re-)create user'
|
||||
# Racecondition: if multiple adds a group it will the same group ID
|
||||
shellsplus | parallel --timeout 15 --retries 5 --tag -j1 del_add_user
|
||||
}
|
||||
|
||||
copy_ssh_keys() {
|
||||
make_sshkey() {
|
||||
shell="$1"
|
||||
sshpass -e ssh-copy-id $shell@lo
|
||||
echo Add server keys for lo and server &&
|
||||
ssh $shell@lo 'rm -f .ssh/id_rsa; ssh-keyscan lo >>.ssh/known_hosts; ssh-keyscan server >> .ssh/known_hosts' &&
|
||||
echo Do ssh-keygen &&
|
||||
|
@ -109,21 +123,17 @@ create_shell_logins() {
|
|||
echo
|
||||
}
|
||||
export -f make_sshkey
|
||||
. `which env_parallel.bash`
|
||||
shellsplus="parallel $shells"
|
||||
|
||||
echo '# (Re-)create user'
|
||||
# Racecondition: if multiple adds a group it will the same group ID
|
||||
parallel --timeout 15 --retries 5 --tag -j1 del_add_user ::: $shellsplus
|
||||
echo '# Make and copy sshkey'
|
||||
parallel --timeout 15 --retries 5 --tag -j5 make_sshkey ::: $shellsplus
|
||||
shellsplus | parallel --timeout 20 --retries 5 --tag -j5 make_sshkey
|
||||
|
||||
ssh_a_to_b() {
|
||||
ssh $1@lo ssh $2@lo echo OK ||
|
||||
echo failed && false
|
||||
}
|
||||
export -f ssh_a_to_b
|
||||
parallel -j8 --timeout 5 --tag ssh_a_to_b {} {} ::: $shellsplus
|
||||
echo "# copy id from X to X"
|
||||
shellsplus | parallel --timeout 10 --tag ssh_a_to_b {} {}
|
||||
|
||||
ssh_copy_id() {
|
||||
from="$1"
|
||||
|
@ -133,9 +143,9 @@ create_shell_logins() {
|
|||
export -f ssh_copy_id
|
||||
|
||||
echo '# copy id from any X to any Y'
|
||||
parallel -u --bar -j3 --timeout 3 --retries 10 --tag ssh_copy_id {1}@lo {2}@lo ::: $shellsplus ::: $shellsplus
|
||||
parallel -u --bar -j3 --timeout 3 --retries 10 --tag ssh_copy_id {1}@lo {2}@lo ::: $(shellsplus) ::: $(shellsplus)
|
||||
echo '# Test the copying went well'
|
||||
parallel -j3 --timeout 3 --retries 10 --tag ssh_a_to_b ::: $shellsplus ::: $shellsplus
|
||||
parallel -j2 --timeout 10 --retries 10 --tag ssh_a_to_b ::: $(shellsplus) ::: $(shellsplus)
|
||||
|
||||
echo '# change paths to no path'
|
||||
(
|
||||
|
@ -221,6 +231,7 @@ install_packages &&
|
|||
setup_databases &&
|
||||
add_server_to_hosts &&
|
||||
create_shell_logins &&
|
||||
copy_ssh_keys &&
|
||||
lsh_setup &&
|
||||
add_freebsd &&
|
||||
misc
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
# Each should be taking 0.3-1s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
|
||||
stdsort() {
|
||||
"$@" 2>&1 | LC_ALL=C sort;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,201 @@
|
|||
# Each should be taking 1-3s and be possible to run in parallel
|
||||
# I.e.: No race conditions, no logins
|
||||
|
||||
par_bug43654() {
|
||||
echo "bug #43654: --bar with command not using {} - only last output line "
|
||||
COLUMNS=80 stdout parallel --bar true {.} ::: 1 | perl -pe 's/.*\r/\r/'
|
||||
}
|
||||
|
||||
par_replacement_rename() {
|
||||
echo "### Test --basenamereplace"
|
||||
parallel -j1 -k -X --basenamereplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --basenamereplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --bnr"
|
||||
parallel -j1 -k -X --bnr FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --bnr FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --extensionreplace"
|
||||
parallel -j1 -k -X --extensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --extensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --er"
|
||||
parallel -j1 -k -X --er FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --er FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --basenameextensionreplace"
|
||||
parallel -j1 -k -X --basenameextensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --basenameextensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --bner"
|
||||
parallel -j1 -k -X --bner FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --bner FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
}
|
||||
|
||||
par_replacement_strings() {
|
||||
echo "### Test {/}"
|
||||
parallel -j1 -k -X echo {/} ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test {/.}"
|
||||
parallel -j1 -k -X echo {/.} ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test {#/.}"
|
||||
parallel -j1 -k -X echo {2/.} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
|
||||
echo "### Test {#/}"
|
||||
parallel -j1 -k -X echo {2/} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
|
||||
echo "### Test {#.}"
|
||||
parallel -j1 -k -X echo {2.} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
}
|
||||
|
||||
par_bug34241() {
|
||||
echo "### bug #34241: --pipe should not spawn unneeded processes"
|
||||
echo | parallel -r -j2 -N1 --pipe md5sum -c && echo OK
|
||||
}
|
||||
|
||||
par_test_gt_quoting() {
|
||||
echo '### Test of quoting of > bug'
|
||||
echo '>/dev/null' | parallel echo
|
||||
|
||||
echo '### Test of quoting of > bug if line continuation'
|
||||
(echo '> '; echo '> '; echo '>') | parallel --max-lines 3 echo
|
||||
}
|
||||
|
||||
par_trim_illegal_value() {
|
||||
echo '### Test of --trim illegal'
|
||||
stdout parallel --trim fj ::: echo
|
||||
}
|
||||
|
||||
par_eof_on_command_line_input_source() {
|
||||
echo '### Test of eof string on :::'
|
||||
parallel -k -E ole echo ::: foo ole bar
|
||||
}
|
||||
|
||||
par_empty_string_command_line() {
|
||||
echo '### Test of ignore-empty string on :::'
|
||||
parallel -k -r echo ::: foo '' ole bar
|
||||
}
|
||||
|
||||
par_trailing_space_line_continuation() {
|
||||
echo '### Test of trailing space continuation'
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | xargs -r -L2 echo
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | parallel -kr -L2 echo
|
||||
parallel -kr -L2 echo ::: foo '' 'ole ' bar quux
|
||||
|
||||
echo '### Test of trailing space continuation with -E eof'
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | xargs -r -L2 -E bar echo
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | parallel -kr -L2 -E bar echo
|
||||
parallel -kr -L2 -E bar echo ::: foo '' 'ole ' bar quux
|
||||
}
|
||||
|
||||
par_colsep() {
|
||||
echo '### Test of --colsep'
|
||||
echo 'a%c%b' | parallel --colsep % echo {1} {3} {2}
|
||||
(echo 'a%c%b'; echo a%c%b%d) | parallel -k --colsep % echo {1} {3} {2} {4}
|
||||
(echo a%c%b; echo d%f%e) | parallel -k --colsep % echo {1} {3} {2}
|
||||
parallel -k --colsep % echo {1} {3} {2} ::: a%c%b d%f%e
|
||||
parallel -k --colsep % echo {1} {3} {2} ::: a%c%b
|
||||
parallel -k --colsep % echo {1} {3} {2} {4} ::: a%c%b a%c%b%d
|
||||
|
||||
|
||||
echo '### Test of tab as colsep'
|
||||
printf 'def\tabc\njkl\tghi' | parallel -k --colsep '\t' echo {2} {1}
|
||||
parallel -k -a <(printf 'def\tabc\njkl\tghi') --colsep '\t' echo {2} {1}
|
||||
|
||||
echo '### Test of multiple -a plus colsep'
|
||||
parallel --xapply -k -a <(printf 'def\njkl\n') -a <(printf 'abc\tghi\nmno\tpqr') --colsep '\t' echo {2} {1}
|
||||
|
||||
echo '### Test of multiple -a no colsep'
|
||||
parallel --xapply -k -a <(printf 'ghi\npqr\n') -a <(printf 'abc\tdef\njkl\tmno') echo {2} {1}
|
||||
|
||||
echo '### Test of quoting after colsplit'
|
||||
parallel --colsep % echo {2} {1} ::: '>/dev/null%>/tmp/null'
|
||||
|
||||
echo '### Test of --colsep as regexp'
|
||||
(echo 'a%c%%b'; echo a%c%b%d) | parallel -k --colsep %+ echo {1} {3} {2} {4}
|
||||
parallel -k --colsep %+ echo {1} {3} {2} {4} ::: a%c%%b a%c%b%d
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --colsep %+ echo {1} {3} {2} {4}
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --colsep %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
|
||||
echo '### Test of -C'
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
|
||||
echo '### Test of --trim n'
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --trim n --colsep %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"' ::: 'a% c %%b' 'a%c% b %d'
|
||||
|
||||
echo '### Test of bug: If input is empty string'
|
||||
(echo ; echo abcbdbebf;echo abc) | parallel -k --colsep b -v echo {1}{2}
|
||||
}
|
||||
|
||||
par_mix_triple_colon_with_quad_colon() {
|
||||
echo '### Test :::: mixed with :::'
|
||||
echo '### Test :::: < ::: :::'
|
||||
parallel -k echo {1} {2} {3} :::: <(seq 6 7) ::: 4 5 ::: 1 2 3
|
||||
|
||||
echo '### Test :::: < < :::: <'
|
||||
parallel -k echo {1} {2} {3} :::: <(seq 6 7) <(seq 4 5) :::: <(seq 1 3)
|
||||
|
||||
echo '### Test -a :::: < :::: <'
|
||||
parallel -k -a <(seq 6 7) echo {1} {2} {3} :::: <(seq 4 5) :::: <(seq 1 3)
|
||||
|
||||
echo '### Test -a -a :::'
|
||||
parallel -k -a <(seq 6 7) -a <(seq 4 5) echo {1} {2} {3} ::: 1 2 3
|
||||
|
||||
echo '### Test -a - -a :::'
|
||||
seq 6 7 | parallel -k -a - -a <(seq 4 5) echo {1} {2} {3} ::: 1 2 3
|
||||
|
||||
echo '### Test :::: < - :::'
|
||||
seq 4 5 | parallel -k echo {1} {2} {3} :::: <(seq 6 7) - ::: 1 2 3
|
||||
}
|
||||
|
||||
par_test_E() {
|
||||
echo '### Test -E'
|
||||
seq 1 100 | parallel -k -E 5 echo :::: - ::: 2 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test -E one empty'
|
||||
seq 1 100 | parallel -k -E 3 echo :::: - ::: 2 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test -E 2 empty'
|
||||
seq 1 100 | parallel -k -E 3 echo :::: - ::: 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test -E all empty'
|
||||
seq 3 100 | parallel -k -E 3 echo :::: - ::: 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
}
|
||||
|
||||
par_test_job_number() {
|
||||
echo '### Test {#}'
|
||||
seq 1 10 | parallel -k echo {#}
|
||||
}
|
||||
|
||||
par_seqreplace_long_line() {
|
||||
echo '### Test --seqreplace and line too long'
|
||||
seq 1 1000 | stdout parallel -j1 -s 210 -k --seqreplace I echo IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII \|wc | uniq -c
|
||||
}
|
||||
|
||||
par_bug37042() {
|
||||
echo '### bug #37042: -J foo is taken from the whole command line - not just the part before the command'
|
||||
echo '--tagstring foo' > ~/.parallel/bug_37042_profile;
|
||||
parallel -J bug_37042_profile echo ::: tag_with_foo;
|
||||
parallel --tagstring a -J bug_37042_profile echo ::: tag_with_a;
|
||||
parallel --tagstring a echo -J bug_37042_profile ::: print_-J_bug_37042_profile
|
||||
|
||||
echo '### Bug introduce by fixing bug #37042'
|
||||
parallel --xapply -a <(printf 'abc') --colsep '\t' echo {1}
|
||||
}
|
||||
|
||||
par_header() {
|
||||
echo "### Test --header with -N"
|
||||
(echo h1; echo h2; echo 1a;echo 1b; echo 2a;echo 2b; echo 3a)| parallel -j1 --pipe -N2 -k --header '.*\n.*\n' echo Start\;cat \; echo Stop
|
||||
|
||||
echo "### Test --header with --block 1k"
|
||||
(echo h1; echo h2; perl -e '$a="x"x110;for(1..22){print $_,$a,"\n"}') |
|
||||
parallel -j1 --pipe -k --block 1k --header '.*\n.*\n' echo Start\;cat \; echo Stop
|
||||
|
||||
echo "### Test --header with multiple :::"
|
||||
parallel --header : echo {a} {b} {1} {2} ::: b b1 ::: a a2
|
||||
}
|
||||
|
||||
par_profiles_with_space() {
|
||||
echo '### bug #42902: profiles containing arguments with space'
|
||||
|
|
|
@ -8,7 +8,8 @@ par_tee_with_premature_close() {
|
|||
echo '--tee --pipe should send all data to all commands'
|
||||
echo 'even if a command closes stdin before reading everything'
|
||||
echo 'tee with --output-error=warn-nopipe support'
|
||||
seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1'
|
||||
correct="$(seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1')"
|
||||
echo "$correct"
|
||||
echo 'tee without --output-error=warn-nopipe support'
|
||||
cat > tmp/tee <<-EOF
|
||||
#!/usr/bin/perl
|
||||
|
@ -24,8 +25,12 @@ par_tee_with_premature_close() {
|
|||
# * tee not supporting --output-error=warn-nopipe
|
||||
# * sleep closes stdin before EOF
|
||||
# Depending on tee it may provide partial output or no output
|
||||
seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1'
|
||||
echo
|
||||
wrong="$(seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1')"
|
||||
if diff <(echo "$correct") <(echo "$wrong") >/dev/null; then
|
||||
echo Wrong: They should not give the same output
|
||||
else
|
||||
echo OK
|
||||
fi
|
||||
}
|
||||
|
||||
par_maxargs() {
|
||||
|
@ -170,6 +175,7 @@ par_resume_failed_k() {
|
|||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
||||
echo with exit 0
|
||||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit 0 ::: 0 1 2 3 0 1
|
||||
sleep 0.5
|
||||
echo try 2 again. Gives empty
|
||||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
||||
rm $tmp
|
||||
|
|
|
@ -69,6 +69,29 @@ par_print_before_halt_on_error() {
|
|||
parallel -j0 -k --tag mytest ::: -2 -1 0 1 2
|
||||
}
|
||||
|
||||
par_bug56403() {
|
||||
echo 'bug #56403: --pipe block by time.'
|
||||
(
|
||||
sleep 2; # make sure parallel is ready
|
||||
echo job1a;
|
||||
sleep 2;
|
||||
echo job2b;
|
||||
echo -n job3c;
|
||||
sleep 2;
|
||||
echo job3d
|
||||
) | parallel --blocktimeout 1 -j1 --pipe --tagstring {#} -k cat
|
||||
(
|
||||
sleep 2; # make sure parallel is ready
|
||||
echo job1a;
|
||||
sleep 1;
|
||||
echo job1b;
|
||||
echo -n job2c;
|
||||
sleep 4;
|
||||
echo job2d
|
||||
) | parallel --blocktimeout 3 -j1 --pipe --tagstring {#} -k cat
|
||||
|
||||
}
|
||||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
compgen -A function | grep par_ | sort |
|
||||
# parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1'
|
||||
|
|
|
@ -1707,14 +1707,16 @@ _EOF
|
|||
par_bash_environment_too_big() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo 'bug #50815: env_parallel should warn if the environment is too big'
|
||||
len_var=100+50-25-12+6-3+2-1
|
||||
len_var_remote=100-50+25+12-6+3
|
||||
len_var_quote=100-50+25-12-6+3-2
|
||||
len_var_quote_remote=100-50-25+12+6-3
|
||||
len_fun=100+50-25-12+6-3
|
||||
len_fun_remote=100-50+25+12-6+3
|
||||
len_fun_quote=100+50-25-12
|
||||
len_fun_quote_remote=100-50+25+12-6
|
||||
len_functions=-$(typeset -f | wc -c)/1000
|
||||
len_variables=-$(typeset -p | wc -c)/1000
|
||||
len_var=$len_variables+100
|
||||
len_var_remote=$len_variables+100-50+25-12+6
|
||||
len_var_quote=$len_variables+100-50
|
||||
len_var_quote_remote=$len_variables+100-50-25+12
|
||||
len_fun=$len_functions+100
|
||||
len_fun_remote=$len_functions+100-50+25-12+6
|
||||
len_fun_quote=$len_functions+100
|
||||
len_fun_quote_remote=$len_functions+100-50
|
||||
|
||||
. `which env_parallel.bash`;
|
||||
|
||||
|
@ -1856,14 +1858,16 @@ par_fish_environment_too_big() {
|
|||
par_ksh_environment_too_big() {
|
||||
myscript=$(cat <<'_EOF'
|
||||
echo 'bug #50815: env_parallel should warn if the environment is too big'
|
||||
len_var=100+50-25-12
|
||||
len_var_remote=100-50+25+12-6-3
|
||||
len_var_quote=100+50-25-12
|
||||
len_var_quote_remote=100-50+25+12-6
|
||||
len_fun=100+12+6-3
|
||||
len_fun_remote=100-50+25+12-6+3
|
||||
len_fun_quote=100+50-25-12
|
||||
len_fun_quote_remote=100-50+25+12-6
|
||||
len_functions=-$(functions|wc -c)/1000
|
||||
len_variables=-$(typeset -p | wc -c)/1000
|
||||
len_var=$len_variables+100
|
||||
len_var_remote=$len_variables+100-50+25-12+6
|
||||
len_var_quote=$len_variables+100
|
||||
len_var_quote_remote=$len_variables+100-50+25
|
||||
len_fun=$len_functions+100
|
||||
len_fun_remote=$len_functions+100-50+25-12+6
|
||||
len_fun_quote=$len_functions+100
|
||||
len_fun_quote_remote=$len_functions+100-50
|
||||
|
||||
. `which env_parallel.ksh`;
|
||||
|
||||
|
|
|
@ -88,25 +88,34 @@ par_bar_m() {
|
|||
uniq
|
||||
}
|
||||
|
||||
retries() {
|
||||
retries=$1
|
||||
min=$2
|
||||
max=$3
|
||||
export PARALLEL="--retries $retries -S 12/localhost,1/:,parallel@lo -uq"
|
||||
tries=$(seq 0 12 |
|
||||
parallel perl -e 'print "job{}\n";exit({})' 2>/dev/null |
|
||||
wc -l)
|
||||
# Dont care if they are off by one
|
||||
if [ $min -le $tries -o $tries -le $max ] ; then
|
||||
echo OK
|
||||
fi
|
||||
}
|
||||
export -f retries
|
||||
|
||||
par_retries_1() {
|
||||
echo '### Test of --retries - it should run 13 jobs in total';
|
||||
export PARALLEL="--retries 1 -S 12/localhost,1/:,parallel@lo -uq"
|
||||
seq 0 12 |
|
||||
parallel perl -e 'print "job{}\n";exit({})' 2>/dev/null | wc -l
|
||||
retries 1 11 13
|
||||
}
|
||||
|
||||
par_retries_2() {
|
||||
echo '### Test of --retries - it should run 25 jobs in total';
|
||||
export PARALLEL="--retries 2 -S 12/localhost,1/:,parallel@lo -uq"
|
||||
seq 0 12 |
|
||||
parallel perl -e 'print "job{}\n";exit({})' 2>/dev/null | wc -l
|
||||
retries 2 24 25
|
||||
}
|
||||
|
||||
par_retries_4() {
|
||||
echo '### Test of --retries - it should run 49 jobs in total';
|
||||
export PARALLEL="--retries 4 -S 12/localhost,1/:,parallel@lo -uq"
|
||||
seq 0 12 |
|
||||
parallel perl -e 'print "job{}\n";exit({})' 2>/dev/null | wc -l
|
||||
retries 4 48 49
|
||||
}
|
||||
|
||||
par_retries_bug_from_2010() {
|
||||
|
|
|
@ -1,167 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||
echo "bug #43654: --bar with command not using {} - only last output line "
|
||||
COLUMNS=80 stdout parallel --bar true {.} ::: 1 | perl -pe 's/.*\r/\r/'
|
||||
|
||||
echo "### Test --basenamereplace"
|
||||
parallel -j1 -k -X --basenamereplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --basenamereplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --bnr"
|
||||
parallel -j1 -k -X --bnr FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --bnr FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --extensionreplace"
|
||||
parallel -j1 -k -X --extensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --extensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --er"
|
||||
parallel -j1 -k -X --er FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --er FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --basenameextensionreplace"
|
||||
parallel -j1 -k -X --basenameextensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --basenameextensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test --bner"
|
||||
parallel -j1 -k -X --bner FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
parallel -k --bner FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test {/}"
|
||||
parallel -j1 -k -X echo {/} ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test {/.}"
|
||||
parallel -j1 -k -X echo {/.} ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
|
||||
echo "### Test {#/.}"
|
||||
parallel -j1 -k -X echo {2/.} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
|
||||
echo "### Test {#/}"
|
||||
parallel -j1 -k -X echo {2/} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
|
||||
echo "### Test {#.}"
|
||||
parallel -j1 -k -X echo {2.} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
|
||||
echo "### bug #34241: --pipe should not spawn unneeded processes"
|
||||
echo | parallel -r -j2 -N1 --pipe md5sum -c && echo OK
|
||||
|
||||
echo '### Test of quoting of > bug'
|
||||
echo '>/dev/null' | parallel echo
|
||||
|
||||
echo '### Test of quoting of > bug if line continuation'
|
||||
(echo '> '; echo '> '; echo '>') | parallel --max-lines 3 echo
|
||||
|
||||
echo '### Test of --trim illegal'
|
||||
stdout parallel --trim fj ::: echo
|
||||
|
||||
echo '### Test of eof string on :::'
|
||||
parallel -k -E ole echo ::: foo ole bar
|
||||
|
||||
echo '### Test of ignore-empty string on :::'
|
||||
parallel -k -r echo ::: foo '' ole bar
|
||||
|
||||
echo '### Test of trailing space continuation'
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | xargs -r -L2 echo
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | parallel -kr -L2 echo
|
||||
parallel -kr -L2 echo ::: foo '' 'ole ' bar quux
|
||||
|
||||
echo '### Test of trailing space continuation with -E eof'
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | xargs -r -L2 -E bar echo
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | parallel -kr -L2 -E bar echo
|
||||
parallel -kr -L2 -E bar echo ::: foo '' 'ole ' bar quux
|
||||
|
||||
echo '### Test of --colsep'
|
||||
echo 'a%c%b' | parallel --colsep % echo {1} {3} {2}
|
||||
(echo 'a%c%b'; echo a%c%b%d) | parallel -k --colsep % echo {1} {3} {2} {4}
|
||||
(echo a%c%b; echo d%f%e) | parallel -k --colsep % echo {1} {3} {2}
|
||||
parallel -k --colsep % echo {1} {3} {2} ::: a%c%b d%f%e
|
||||
parallel -k --colsep % echo {1} {3} {2} ::: a%c%b
|
||||
parallel -k --colsep % echo {1} {3} {2} {4} ::: a%c%b a%c%b%d
|
||||
|
||||
echo '### Test of tab as colsep'
|
||||
printf 'def\tabc\njkl\tghi' | parallel -k --colsep '\t' echo {2} {1}
|
||||
parallel -k -a <(printf 'def\tabc\njkl\tghi') --colsep '\t' echo {2} {1}
|
||||
|
||||
echo '### Test of multiple -a plus colsep'
|
||||
parallel --xapply -k -a <(printf 'def\njkl\n') -a <(printf 'abc\tghi\nmno\tpqr') --colsep '\t' echo {2} {1}
|
||||
|
||||
echo '### Test of multiple -a no colsep'
|
||||
parallel --xapply -k -a <(printf 'ghi\npqr\n') -a <(printf 'abc\tdef\njkl\tmno') echo {2} {1}
|
||||
|
||||
echo '### Test of quoting after colsplit'
|
||||
parallel --colsep % echo {2} {1} ::: '>/dev/null%>/tmp/null'
|
||||
|
||||
echo '### Test of --colsep as regexp'
|
||||
(echo 'a%c%%b'; echo a%c%b%d) | parallel -k --colsep %+ echo {1} {3} {2} {4}
|
||||
parallel -k --colsep %+ echo {1} {3} {2} {4} ::: a%c%%b a%c%b%d
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --colsep %+ echo {1} {3} {2} {4}
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --colsep %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
|
||||
echo '### Test of -C'
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
|
||||
echo '### Test of --trim n'
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --trim n --colsep %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"' ::: 'a% c %%b' 'a%c% b %d'
|
||||
|
||||
echo '### Test of bug: If input is empty string'
|
||||
(echo ; echo abcbdbebf;echo abc) | parallel -k --colsep b -v echo {1}{2}
|
||||
|
||||
echo '### Test :::: mixed with :::'
|
||||
echo '### Test :::: < ::: :::'
|
||||
parallel -k echo {1} {2} {3} :::: <(seq 6 7) ::: 4 5 ::: 1 2 3
|
||||
|
||||
echo '### Test :::: < < :::: <'
|
||||
parallel -k echo {1} {2} {3} :::: <(seq 6 7) <(seq 4 5) :::: <(seq 1 3)
|
||||
|
||||
echo '### Test -a :::: < :::: <'
|
||||
parallel -k -a <(seq 6 7) echo {1} {2} {3} :::: <(seq 4 5) :::: <(seq 1 3)
|
||||
|
||||
echo '### Test -a -a :::'
|
||||
parallel -k -a <(seq 6 7) -a <(seq 4 5) echo {1} {2} {3} ::: 1 2 3
|
||||
|
||||
echo '### Test -a - -a :::'
|
||||
seq 6 7 | parallel -k -a - -a <(seq 4 5) echo {1} {2} {3} ::: 1 2 3
|
||||
|
||||
echo '### Test :::: < - :::'
|
||||
seq 4 5 | parallel -k echo {1} {2} {3} :::: <(seq 6 7) - ::: 1 2 3
|
||||
|
||||
echo '### Test -E'
|
||||
seq 1 100 | parallel -k -E 5 echo :::: - ::: 2 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test -E one empty'
|
||||
seq 1 100 | parallel -k -E 3 echo :::: - ::: 2 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test -E 2 empty'
|
||||
seq 1 100 | parallel -k -E 3 echo :::: - ::: 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test -E all empty'
|
||||
seq 3 100 | parallel -k -E 3 echo :::: - ::: 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
|
||||
echo '### Test {#}'
|
||||
seq 1 10 | parallel -k echo {#}
|
||||
|
||||
echo '### Test --seqreplace and line too long'
|
||||
seq 1 1000 | stdout parallel -j1 -s 210 -k --seqreplace I echo IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII \|wc | uniq -c
|
||||
|
||||
echo '### bug #37042: -J foo is taken from the whole command line - not just the part before the command'
|
||||
echo '--tagstring foo' > ~/.parallel/bug_37042_profile;
|
||||
parallel -J bug_37042_profile echo ::: tag_with_foo;
|
||||
parallel --tagstring a -J bug_37042_profile echo ::: tag_with_a;
|
||||
parallel --tagstring a echo -J bug_37042_profile ::: print_-J_bug_37042_profile
|
||||
|
||||
echo '### Bug introduce by fixing bug #37042'
|
||||
parallel --xapply -a <(printf 'abc') --colsep '\t' echo {1}
|
||||
|
||||
echo "### Test --header with -N"
|
||||
(echo h1; echo h2; echo 1a;echo 1b; echo 2a;echo 2b; echo 3a)| parallel -j1 --pipe -N2 -k --header '.*\n.*\n' echo Start\;cat \; echo Stop
|
||||
|
||||
echo "### Test --header with --block 1k"
|
||||
(echo h1; echo h2; perl -e '$a="x"x110;for(1..22){print $_,$a,"\n"'})| parallel -j1 --pipe -k --block 1k --header '.*\n.*\n' echo Start\;cat \; echo Stop
|
||||
|
||||
echo "### Test --header with multiple :::"
|
||||
parallel --header : echo {a} {b} {1} {2} ::: b b1 ::: a a2
|
||||
|
||||
echo moved to parallel-local-1s.sh
|
||||
|
||||
EOF
|
||||
|
|
|
@ -206,3 +206,14 @@ env_parallel -u -S$MASTER doit ::: 1 |
|
|||
# env_parallel myfunc ::: a | wc # OK
|
||||
# eval 'myfunc2() { echo '$(perl -e 'print "x"x120000')'; }'
|
||||
# env_parallel myfunc ::: a | wc # Fail too big env
|
||||
|
||||
# Supported keylength:
|
||||
# 16300:
|
||||
# debian-ppc netbsd openbsd qnx aix centos freebsd hpux hpux-ia64
|
||||
# macosx mandriva miros raspbian redhat scosysv suse tru64 unixware
|
||||
# 8000:
|
||||
# solaris-x86
|
||||
# 4000:
|
||||
# openindiana solaris
|
||||
|
||||
|
||||
|
|
|
@ -1019,7 +1019,7 @@ par_verbose_t echo bar
|
|||
par_verbose_t echo car
|
||||
par_verbose_t echo far
|
||||
par_version ### Test --version: Version output (just check we get the same amount of lines)
|
||||
par_version 10
|
||||
par_version 11
|
||||
par_wd_3dot_local bug #45993: --wd ... should also work when run locally
|
||||
par_wd_3dot_local parallel: Error: Cannot change into non-executable dir /bi: No such file or directory
|
||||
par_wd_3dot_local /bin
|
||||
|
|
|
@ -743,9 +743,9 @@ par_shellquote tcsh \\\\\\\\ "\
|
|||
par_shellquote tcsh "\\\
par_shellquote tcsh \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~€<7F>\‚\ƒ\„\…\†\‡\ˆ\‰\Š\‹\Œ\<5C>\Ž\<5C>\<5C>\‘\’\“\”\•\–\—\˜\™\š\›\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ
|
||||
par_sockets_cores_threads ### Test --number-of-sockets/cores/threads
|
||||
par_sockets_cores_threads 1
|
||||
par_sockets_cores_threads 2
|
||||
par_sockets_cores_threads 4
|
||||
par_sockets_cores_threads 8
|
||||
par_sockets_cores_threads 4
|
||||
par_sockets_cores_threads 2
|
||||
par_sockets_cores_threads ### Test --use-sockets-instead-of-threads
|
||||
par_sockets_cores_threads threads done
|
||||
par_sockets_cores_threads sockets done
|
||||
|
|
|
@ -1,5 +1,63 @@
|
|||
par_block_negative_prefix ### This should generate 10*2 jobs
|
||||
par_block_negative_prefix 20 40 720
|
||||
par_bug34241 ### bug #34241: --pipe should not spawn unneeded processes
|
||||
par_bug34241 OK
|
||||
par_bug37042 ### bug #37042: -J foo is taken from the whole command line - not just the part before the command
|
||||
par_bug37042 foo tag_with_foo
|
||||
par_bug37042 a tag_with_a
|
||||
par_bug37042 a -J bug_37042_profile print_-J_bug_37042_profile
|
||||
par_bug37042 ### Bug introduce by fixing bug #37042
|
||||
par_bug37042 abc
|
||||
par_bug43654 bug #43654: --bar with command not using {} - only last output line
|
||||
par_bug43654
par_bug43654 [7m100% 1:0=0s 1 [0m[0m
|
||||
par_colsep ### Test of --colsep
|
||||
par_colsep a b c
|
||||
par_colsep a b c
|
||||
par_colsep a b c d
|
||||
par_colsep a b c
|
||||
par_colsep d e f
|
||||
par_colsep a b c
|
||||
par_colsep d e f
|
||||
par_colsep a b c
|
||||
par_colsep a b c
|
||||
par_colsep a b c d
|
||||
par_colsep ### Test of tab as colsep
|
||||
par_colsep abc def
|
||||
par_colsep ghi jkl
|
||||
par_colsep abc def
|
||||
par_colsep ghi jkl
|
||||
par_colsep ### Test of multiple -a plus colsep
|
||||
par_colsep abc def
|
||||
par_colsep mno jkl
|
||||
par_colsep ### Test of multiple -a no colsep
|
||||
par_colsep abc def ghi
|
||||
par_colsep jkl mno pqr
|
||||
par_colsep ### Test of quoting after colsplit
|
||||
par_colsep >/tmp/null >/dev/null
|
||||
par_colsep ### Test of --colsep as regexp
|
||||
par_colsep a b c
|
||||
par_colsep a b c d
|
||||
par_colsep a b c
|
||||
par_colsep a b c d
|
||||
par_colsep a b c
|
||||
par_colsep a b c d
|
||||
par_colsep a_b_c_
|
||||
par_colsep a_b_c_d
|
||||
par_colsep ### Test of -C
|
||||
par_colsep a_b_c_
|
||||
par_colsep a_b_c_d
|
||||
par_colsep ### Test of --trim n
|
||||
par_colsep a_b_' c '_
|
||||
par_colsep a_' b '_c_d
|
||||
par_colsep a_b_c_
|
||||
par_colsep a_b_c_d
|
||||
par_colsep ### Test of bug: If input is empty string
|
||||
par_colsep echo ''
|
||||
par_colsep
|
||||
par_colsep echo ac
|
||||
par_colsep ac
|
||||
par_colsep echo ac
|
||||
par_colsep ac
|
||||
par_compress_prg_fails ### bug #44546: If --compress-program fails: fail
|
||||
par_compress_prg_fails 1
|
||||
par_compress_prg_fails parallel: Error: false failed.
|
||||
|
@ -25,6 +83,12 @@ par_compress_prg_fails --line-buffer --tag parallel: Error: false failed.
|
|||
par_compress_prg_fails --line-buffer --tag --files 1
|
||||
par_compress_prg_fails --line-buffer --tag --files parallel: Error: false failed.
|
||||
par_compress_prg_fails --line-buffer --tag --files parallel: Error: false failed.
|
||||
par_empty_string_command_line ### Test of ignore-empty string on :::
|
||||
par_empty_string_command_line foo
|
||||
par_empty_string_command_line ole
|
||||
par_empty_string_command_line bar
|
||||
par_eof_on_command_line_input_source ### Test of eof string on :::
|
||||
par_eof_on_command_line_input_source foo
|
||||
par_failing_compressor Compress with failing (de)compressor
|
||||
par_failing_compressor Test --tag/--line-buffer/--files in all combinations
|
||||
par_failing_compressor Test working/failing compressor/decompressor in all combinations
|
||||
|
@ -155,6 +219,61 @@ par_fifo_under_csh 1
|
|||
par_fifo_under_csh 868832
|
||||
par_fifo_under_csh 1
|
||||
par_fifo_under_csh exit 22
|
||||
par_header ### Test --header with -N
|
||||
par_header Start
|
||||
par_header h1
|
||||
par_header h2
|
||||
par_header 1a
|
||||
par_header 1b
|
||||
par_header Stop
|
||||
par_header Start
|
||||
par_header h1
|
||||
par_header h2
|
||||
par_header 2a
|
||||
par_header 2b
|
||||
par_header Stop
|
||||
par_header Start
|
||||
par_header h1
|
||||
par_header h2
|
||||
par_header 3a
|
||||
par_header Stop
|
||||
par_header ### Test --header with --block 1k
|
||||
par_header Start
|
||||
par_header h1
|
||||
par_header h2
|
||||
par_header 1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 8xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header Stop
|
||||
par_header Start
|
||||
par_header h1
|
||||
par_header h2
|
||||
par_header 9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 11xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 12xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 13xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 14xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 15xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 16xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header Stop
|
||||
par_header Start
|
||||
par_header h1
|
||||
par_header h2
|
||||
par_header 17xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 18xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 19xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 20xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 21xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header 22xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
par_header Stop
|
||||
par_header ### Test --header with multiple :::
|
||||
par_header a2 b1 b1 a2
|
||||
par_header_parens bug #49538: --header and {= =}
|
||||
par_header_parens OK
|
||||
par_header_parens OK
|
||||
|
@ -174,6 +293,85 @@ par_incomplete_linebuffer 7
|
|||
par_incomplete_linebuffer 8
|
||||
par_incomplete_linebuffer 9
|
||||
par_incomplete_linebuffer 10
|
||||
par_mix_triple_colon_with_quad_colon ### Test :::: mixed with :::
|
||||
par_mix_triple_colon_with_quad_colon ### Test :::: < ::: :::
|
||||
par_mix_triple_colon_with_quad_colon 6 4 1
|
||||
par_mix_triple_colon_with_quad_colon 6 4 2
|
||||
par_mix_triple_colon_with_quad_colon 6 4 3
|
||||
par_mix_triple_colon_with_quad_colon 6 5 1
|
||||
par_mix_triple_colon_with_quad_colon 6 5 2
|
||||
par_mix_triple_colon_with_quad_colon 6 5 3
|
||||
par_mix_triple_colon_with_quad_colon 7 4 1
|
||||
par_mix_triple_colon_with_quad_colon 7 4 2
|
||||
par_mix_triple_colon_with_quad_colon 7 4 3
|
||||
par_mix_triple_colon_with_quad_colon 7 5 1
|
||||
par_mix_triple_colon_with_quad_colon 7 5 2
|
||||
par_mix_triple_colon_with_quad_colon 7 5 3
|
||||
par_mix_triple_colon_with_quad_colon ### Test :::: < < :::: <
|
||||
par_mix_triple_colon_with_quad_colon 6 4 1
|
||||
par_mix_triple_colon_with_quad_colon 6 4 2
|
||||
par_mix_triple_colon_with_quad_colon 6 4 3
|
||||
par_mix_triple_colon_with_quad_colon 6 5 1
|
||||
par_mix_triple_colon_with_quad_colon 6 5 2
|
||||
par_mix_triple_colon_with_quad_colon 6 5 3
|
||||
par_mix_triple_colon_with_quad_colon 7 4 1
|
||||
par_mix_triple_colon_with_quad_colon 7 4 2
|
||||
par_mix_triple_colon_with_quad_colon 7 4 3
|
||||
par_mix_triple_colon_with_quad_colon 7 5 1
|
||||
par_mix_triple_colon_with_quad_colon 7 5 2
|
||||
par_mix_triple_colon_with_quad_colon 7 5 3
|
||||
par_mix_triple_colon_with_quad_colon ### Test -a :::: < :::: <
|
||||
par_mix_triple_colon_with_quad_colon 6 4 1
|
||||
par_mix_triple_colon_with_quad_colon 6 4 2
|
||||
par_mix_triple_colon_with_quad_colon 6 4 3
|
||||
par_mix_triple_colon_with_quad_colon 6 5 1
|
||||
par_mix_triple_colon_with_quad_colon 6 5 2
|
||||
par_mix_triple_colon_with_quad_colon 6 5 3
|
||||
par_mix_triple_colon_with_quad_colon 7 4 1
|
||||
par_mix_triple_colon_with_quad_colon 7 4 2
|
||||
par_mix_triple_colon_with_quad_colon 7 4 3
|
||||
par_mix_triple_colon_with_quad_colon 7 5 1
|
||||
par_mix_triple_colon_with_quad_colon 7 5 2
|
||||
par_mix_triple_colon_with_quad_colon 7 5 3
|
||||
par_mix_triple_colon_with_quad_colon ### Test -a -a :::
|
||||
par_mix_triple_colon_with_quad_colon 6 4 1
|
||||
par_mix_triple_colon_with_quad_colon 6 4 2
|
||||
par_mix_triple_colon_with_quad_colon 6 4 3
|
||||
par_mix_triple_colon_with_quad_colon 6 5 1
|
||||
par_mix_triple_colon_with_quad_colon 6 5 2
|
||||
par_mix_triple_colon_with_quad_colon 6 5 3
|
||||
par_mix_triple_colon_with_quad_colon 7 4 1
|
||||
par_mix_triple_colon_with_quad_colon 7 4 2
|
||||
par_mix_triple_colon_with_quad_colon 7 4 3
|
||||
par_mix_triple_colon_with_quad_colon 7 5 1
|
||||
par_mix_triple_colon_with_quad_colon 7 5 2
|
||||
par_mix_triple_colon_with_quad_colon 7 5 3
|
||||
par_mix_triple_colon_with_quad_colon ### Test -a - -a :::
|
||||
par_mix_triple_colon_with_quad_colon 6 4 1
|
||||
par_mix_triple_colon_with_quad_colon 6 4 2
|
||||
par_mix_triple_colon_with_quad_colon 6 4 3
|
||||
par_mix_triple_colon_with_quad_colon 6 5 1
|
||||
par_mix_triple_colon_with_quad_colon 6 5 2
|
||||
par_mix_triple_colon_with_quad_colon 6 5 3
|
||||
par_mix_triple_colon_with_quad_colon 7 4 1
|
||||
par_mix_triple_colon_with_quad_colon 7 4 2
|
||||
par_mix_triple_colon_with_quad_colon 7 4 3
|
||||
par_mix_triple_colon_with_quad_colon 7 5 1
|
||||
par_mix_triple_colon_with_quad_colon 7 5 2
|
||||
par_mix_triple_colon_with_quad_colon 7 5 3
|
||||
par_mix_triple_colon_with_quad_colon ### Test :::: < - :::
|
||||
par_mix_triple_colon_with_quad_colon 6 4 1
|
||||
par_mix_triple_colon_with_quad_colon 6 4 2
|
||||
par_mix_triple_colon_with_quad_colon 6 4 3
|
||||
par_mix_triple_colon_with_quad_colon 6 5 1
|
||||
par_mix_triple_colon_with_quad_colon 6 5 2
|
||||
par_mix_triple_colon_with_quad_colon 6 5 3
|
||||
par_mix_triple_colon_with_quad_colon 7 4 1
|
||||
par_mix_triple_colon_with_quad_colon 7 4 2
|
||||
par_mix_triple_colon_with_quad_colon 7 4 3
|
||||
par_mix_triple_colon_with_quad_colon 7 5 1
|
||||
par_mix_triple_colon_with_quad_colon 7 5 2
|
||||
par_mix_triple_colon_with_quad_colon 7 5 3
|
||||
par_null_resume ### --null --resume --jl
|
||||
par_null_resume a
|
||||
par_null_resume b
|
||||
|
@ -223,6 +421,64 @@ par_pxz_complains bug #44250: pxz complains File format not recognized but decom
|
|||
par_pxz_complains ls: cannot access '/OK-if-missing-file': No such file or directory
|
||||
par_pxz_complains can not seek in input: Illegal seek
|
||||
par_pxz_complains ls: cannot access '/OK-if-missing-file': No such file or directory
|
||||
par_replacement_rename ### Test --basenamereplace
|
||||
par_replacement_rename b.c b.c b.c b b b
|
||||
par_replacement_rename b.c
|
||||
par_replacement_rename b.c
|
||||
par_replacement_rename b.c
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename ### Test --bnr
|
||||
par_replacement_rename b.c b.c b.c b b b
|
||||
par_replacement_rename b.c
|
||||
par_replacement_rename b.c
|
||||
par_replacement_rename b.c
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename ### Test --extensionreplace
|
||||
par_replacement_rename /a/b a/b b /a/b a/b b
|
||||
par_replacement_rename /a/b
|
||||
par_replacement_rename a/b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename /a/b
|
||||
par_replacement_rename a/b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename ### Test --er
|
||||
par_replacement_rename /a/b a/b b /a/b a/b b
|
||||
par_replacement_rename /a/b
|
||||
par_replacement_rename a/b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename /a/b
|
||||
par_replacement_rename a/b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename ### Test --basenameextensionreplace
|
||||
par_replacement_rename b b b b b b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename ### Test --bner
|
||||
par_replacement_rename b b b b b b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_rename b
|
||||
par_replacement_strings ### Test {/}
|
||||
par_replacement_strings b.c b.c b.c b b b
|
||||
par_replacement_strings ### Test {/.}
|
||||
par_replacement_strings b b b b b b
|
||||
par_replacement_strings ### Test {#/.}
|
||||
par_replacement_strings number2
|
||||
par_replacement_strings ### Test {#/}
|
||||
par_replacement_strings number2.c
|
||||
par_replacement_strings ### Test {#.}
|
||||
par_replacement_strings a/number2
|
||||
par_result ### Test --results
|
||||
par_result I III
|
||||
par_result I IIII
|
||||
|
@ -479,6 +735,42 @@ par_result_replace /tmp/par__49983-baz C
|
|||
par_result_replace /tmp/par__49983-baz C/seq
|
||||
par_result_replace /tmp/par__49983-baz C/stderr
|
||||
par_result_replace /tmp/par__49983-baz C/stdout
|
||||
par_seqreplace_long_line ### Test --seqreplace and line too long
|
||||
par_seqreplace_long_line 9 1 1 101
|
||||
par_seqreplace_long_line 90 1 1 201
|
||||
par_seqreplace_long_line 1 parallel: Error: Command line too long (309 >= 210) at input 0: 100
|
||||
par_test_E ### Test -E
|
||||
par_test_E 1 2 3
|
||||
par_test_E 1 2 4
|
||||
par_test_E 1 3 3
|
||||
par_test_E 1 3 4
|
||||
par_test_E 1 4 3
|
||||
par_test_E 1 4 4
|
||||
par_test_E 2 2 3
|
||||
par_test_E 2 2 4
|
||||
par_test_E 2 3 3
|
||||
par_test_E 2 3 4
|
||||
par_test_E 2 4 3
|
||||
par_test_E 2 4 4
|
||||
par_test_E 3 2 3
|
||||
par_test_E 3 2 4
|
||||
par_test_E 3 3 3
|
||||
par_test_E 3 3 4
|
||||
par_test_E 3 4 3
|
||||
par_test_E 3 4 4
|
||||
par_test_E 4 2 3
|
||||
par_test_E 4 2 4
|
||||
par_test_E 4 3 3
|
||||
par_test_E 4 3 4
|
||||
par_test_E 4 4 3
|
||||
par_test_E 4 4 4
|
||||
par_test_E ### Test -E one empty
|
||||
par_test_E 1 2
|
||||
par_test_E 2 2
|
||||
par_test_E ### Test -E 2 empty
|
||||
par_test_E 1
|
||||
par_test_E 2
|
||||
par_test_E ### Test -E all empty
|
||||
par_test_XI_mI ### Test -I
|
||||
par_test_XI_mI 1 1
|
||||
par_test_XI_mI 2 1
|
||||
|
@ -565,6 +857,34 @@ par_test_cpu_detection 2-24-48-24 2 24 48 24
|
|||
par_test_cpu_detection 1-2-2-2 1 2 2 2
|
||||
par_test_cpu_detection 1-8-8-8 1 8 8 8
|
||||
par_test_cpu_detection 1-4-4-4 1 4 4 4
|
||||
par_test_gt_quoting ### Test of quoting of > bug
|
||||
par_test_gt_quoting >/dev/null
|
||||
par_test_gt_quoting ### Test of quoting of > bug if line continuation
|
||||
par_test_gt_quoting > > >
|
||||
par_test_job_number ### Test {#}
|
||||
par_test_job_number 1
|
||||
par_test_job_number 2
|
||||
par_test_job_number 3
|
||||
par_test_job_number 4
|
||||
par_test_job_number 5
|
||||
par_test_job_number 6
|
||||
par_test_job_number 7
|
||||
par_test_job_number 8
|
||||
par_test_job_number 9
|
||||
par_test_job_number 10
|
||||
par_too_long_line_X bug #54869: Long lines break
|
||||
par_too_long_line_X 1 29302 131012
|
||||
par_too_long_line_X 1 12698 63490
|
||||
par_trailing_space_line_continuation ### Test of trailing space continuation
|
||||
par_trailing_space_line_continuation foo ole bar
|
||||
par_trailing_space_line_continuation quux
|
||||
par_trailing_space_line_continuation foo ole bar
|
||||
par_trailing_space_line_continuation quux
|
||||
par_trailing_space_line_continuation foo ole bar
|
||||
par_trailing_space_line_continuation quux
|
||||
par_trailing_space_line_continuation ### Test of trailing space continuation with -E eof
|
||||
par_trailing_space_line_continuation foo ole
|
||||
par_trailing_space_line_continuation foo ole
|
||||
par_trailing_space_line_continuation foo ole
|
||||
par_trim_illegal_value ### Test of --trim illegal
|
||||
par_trim_illegal_value parallel: Error: --trim must be one of: r l rl lr.
|
||||
|
|
|
@ -569,6 +569,8 @@ par_groupby --block 20 C1 cssv [\s,]+ 3,,2,,4,,
|
|||
par_groupby --block 20 C1 cssv [\s,]+ NewRec
|
||||
par_groupby --block 20 C1 cssv [\s,]+ a1, b1, C1,
|
||||
par_groupby --block 20 C1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,,
|
||||
par_groupby --block 20 C1 cssv [\s,]+ NewRec
|
||||
par_groupby --block 20 C1 cssv [\s,]+ a1, b1, C1,
|
||||
par_groupby --block 20 C1 cssv [\s,]+ 3 2 3
|
||||
par_groupby --block 20 C1 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27.
|
||||
par_groupby --block 20 C1 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37.
|
||||
|
@ -1386,27 +1388,7 @@ par_tee_with_premature_close 999998
|
|||
par_tee_with_premature_close 999999
|
||||
par_tee_with_premature_close 1000000
|
||||
par_tee_with_premature_close tee without --output-error=warn-nopipe support
|
||||
par_tee_with_premature_close 1859 1860 8192
|
||||
par_tee_with_premature_close 1
|
||||
par_tee_with_premature_close 2
|
||||
par_tee_with_premature_close 3
|
||||
par_tee_with_premature_close 4
|
||||
par_tee_with_premature_close 5
|
||||
par_tee_with_premature_close 6
|
||||
par_tee_with_premature_close 7
|
||||
par_tee_with_premature_close 8
|
||||
par_tee_with_premature_close 9
|
||||
par_tee_with_premature_close 10
|
||||
par_tee_with_premature_close 1851
|
||||
par_tee_with_premature_close 1852
|
||||
par_tee_with_premature_close 1853
|
||||
par_tee_with_premature_close 1854
|
||||
par_tee_with_premature_close 1855
|
||||
par_tee_with_premature_close 1856
|
||||
par_tee_with_premature_close 1857
|
||||
par_tee_with_premature_close 1858
|
||||
par_tee_with_premature_close 1859
|
||||
par_tee_with_premature_close 1860
|
||||
par_tee_with_premature_close OK
|
||||
par_test_X_with_multiple_source ### Test {} multiple times in different commands
|
||||
par_test_X_with_multiple_source echo 1 2 3 4 5 6 7 8 9 10 ; echo 1 2 3 4 5 6 7 8 9 10
|
||||
par_test_X_with_multiple_source 1 2 3 4 5 6 7 8 9 10
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
par_bug56403 bug #56403: --pipe block by time.
|
||||
par_bug56403 1 job1a
|
||||
par_bug56403 2 job2b
|
||||
par_bug56403 3 job3cjob3d
|
||||
par_bug56403 1 job1a
|
||||
par_bug56403 1 job1b
|
||||
par_bug56403 2 job2cjob2d
|
||||
par_distribute_input_by_ability ### bug #48290: round-robin does not distribute data based on business
|
||||
par_distribute_input_by_ability ### Distribute input to jobs that are ready
|
||||
par_distribute_input_by_ability Job-slot n is 50% slower than n+1, so the order should be 1..7
|
||||
|
|
|
@ -1229,59 +1229,14 @@ par_ksh_environment_too_big OK_bigfunc_remote
|
|||
par_ksh_environment_too_big OK_bigfunc_quote
|
||||
par_ksh_environment_too_big OK_bigfunc_quote_remote
|
||||
par_ksh_environment_too_big Rest should fail
|
||||
par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long]
|
||||
par_ksh_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_ksh_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_ksh_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote
|
||||
par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long]
|
||||
par_ksh_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_ksh_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_ksh_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote
|
||||
par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long]
|
||||
par_ksh_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_ksh_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_ksh_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_remote
|
||||
par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long]
|
||||
par_ksh_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_ksh_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_ksh_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long]
|
||||
par_ksh_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_ksh_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_ksh_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_quote
|
||||
par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_quote_remote
|
||||
par_ksh_env_parallel_session ### Test env_parallel --session
|
||||
par_ksh_env_parallel_session ### level0 should be hidden, level1 should be transferred
|
||||
par_ksh_env_parallel_session
|
||||
|
@ -2087,59 +2042,14 @@ par_bash_environment_too_big OK_bigfunc_remote
|
|||
par_bash_environment_too_big OK_bigfunc_quote
|
||||
par_bash_environment_too_big OK_bigfunc_quote_remote
|
||||
par_bash_environment_too_big Rest should fail
|
||||
par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long
|
||||
par_bash_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_bash_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_bash_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_bash_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote
|
||||
par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long
|
||||
par_bash_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_bash_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_bash_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_bash_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote
|
||||
par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long
|
||||
par_bash_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_bash_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_bash_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_bash_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_remote
|
||||
par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long
|
||||
par_bash_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_bash_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_bash_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_bash_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long
|
||||
par_bash_environment_too_big env_parallel: Error: Your environment is too big.
|
||||
par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches:
|
||||
par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set
|
||||
par_bash_environment_too_big env_parallel: Error: variables or define functions.
|
||||
par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy.
|
||||
par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once:
|
||||
par_bash_environment_too_big env_parallel: Error: env_parallel --record-env
|
||||
par_bash_environment_too_big env_parallel: Error: And then use '--env _'
|
||||
par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_quote
|
||||
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_quote_remote
|
||||
par_bash_env_parallel_session ### Test env_parallel --session / --end-session
|
||||
par_bash_env_parallel_session ### level0 should be hidden, level1 should be transferred
|
||||
par_bash_env_parallel_session
|
||||
|
|
|
@ -29,11 +29,11 @@ par_path_remote_csh ^^^^^^^^ Not found is OK
|
|||
par_path_remote_csh /bin:/usr/bin:/tmp OK
|
||||
par_path_remote_csh Done
|
||||
par_retries_1 ### Test of --retries - it should run 13 jobs in total
|
||||
par_retries_1 13
|
||||
par_retries_1 OK
|
||||
par_retries_2 ### Test of --retries - it should run 25 jobs in total
|
||||
par_retries_2 25
|
||||
par_retries_2 OK
|
||||
par_retries_4 ### Test of --retries - it should run 49 jobs in total
|
||||
par_retries_4 49
|
||||
par_retries_4 OK
|
||||
par_retries_bug_from_2010 ### Bug with --retries
|
||||
par_retries_bug_from_2010 8
|
||||
par_retries_bug_from_2010 8
|
||||
|
|
|
@ -1,433 +1,2 @@
|
|||
echo "bug #43654: --bar with command not using {} - only last output line "
|
||||
bug #43654: --bar with command not using {} - only last output line
|
||||
COLUMNS=80 stdout parallel --bar true {.} ::: 1 | perl -pe 's/.*\r/\r/'
|
||||
[7m100% 1:0=0s 1 [0m[0m
|
||||
echo "### Test --basenamereplace"
|
||||
### Test --basenamereplace
|
||||
parallel -j1 -k -X --basenamereplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b.c b.c b.c b b b
|
||||
parallel -k --basenamereplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b.c
|
||||
b.c
|
||||
b.c
|
||||
b
|
||||
b
|
||||
b
|
||||
echo "### Test --bnr"
|
||||
### Test --bnr
|
||||
parallel -j1 -k -X --bnr FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b.c b.c b.c b b b
|
||||
parallel -k --bnr FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b.c
|
||||
b.c
|
||||
b.c
|
||||
b
|
||||
b
|
||||
b
|
||||
echo "### Test --extensionreplace"
|
||||
### Test --extensionreplace
|
||||
parallel -j1 -k -X --extensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
/a/b a/b b /a/b a/b b
|
||||
parallel -k --extensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
/a/b
|
||||
a/b
|
||||
b
|
||||
/a/b
|
||||
a/b
|
||||
b
|
||||
echo "### Test --er"
|
||||
### Test --er
|
||||
parallel -j1 -k -X --er FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
/a/b a/b b /a/b a/b b
|
||||
parallel -k --er FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
/a/b
|
||||
a/b
|
||||
b
|
||||
/a/b
|
||||
a/b
|
||||
b
|
||||
echo "### Test --basenameextensionreplace"
|
||||
### Test --basenameextensionreplace
|
||||
parallel -j1 -k -X --basenameextensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b b b b b b
|
||||
parallel -k --basenameextensionreplace FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
echo "### Test --bner"
|
||||
### Test --bner
|
||||
parallel -j1 -k -X --bner FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b b b b b b
|
||||
parallel -k --bner FOO echo FOO ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
echo "### Test {/}"
|
||||
### Test {/}
|
||||
parallel -j1 -k -X echo {/} ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b.c b.c b.c b b b
|
||||
echo "### Test {/.}"
|
||||
### Test {/.}
|
||||
parallel -j1 -k -X echo {/.} ::: /a/b.c a/b.c b.c /a/b a/b b
|
||||
b b b b b b
|
||||
echo "### Test {#/.}"
|
||||
### Test {#/.}
|
||||
parallel -j1 -k -X echo {2/.} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
number2
|
||||
echo "### Test {#/}"
|
||||
### Test {#/}
|
||||
parallel -j1 -k -X echo {2/} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
number2.c
|
||||
echo "### Test {#.}"
|
||||
### Test {#.}
|
||||
parallel -j1 -k -X echo {2.} ::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6
|
||||
a/number2
|
||||
echo "### bug #34241: --pipe should not spawn unneeded processes"
|
||||
### bug #34241: --pipe should not spawn unneeded processes
|
||||
echo | parallel -r -j2 -N1 --pipe md5sum -c && echo OK
|
||||
OK
|
||||
echo '### Test of quoting of > bug'
|
||||
### Test of quoting of > bug
|
||||
echo '>/dev/null' | parallel echo
|
||||
>/dev/null
|
||||
echo '### Test of quoting of > bug if line continuation'
|
||||
### Test of quoting of > bug if line continuation
|
||||
(echo '> '; echo '> '; echo '>') | parallel --max-lines 3 echo
|
||||
> > >
|
||||
echo '### Test of --trim illegal'
|
||||
### Test of --trim illegal
|
||||
stdout parallel --trim fj ::: echo
|
||||
parallel: Error: --trim must be one of: r l rl lr.
|
||||
echo '### Test of eof string on :::'
|
||||
### Test of eof string on :::
|
||||
parallel -k -E ole echo ::: foo ole bar
|
||||
foo
|
||||
echo '### Test of ignore-empty string on :::'
|
||||
### Test of ignore-empty string on :::
|
||||
parallel -k -r echo ::: foo '' ole bar
|
||||
foo
|
||||
ole
|
||||
bar
|
||||
echo '### Test of trailing space continuation'
|
||||
### Test of trailing space continuation
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | xargs -r -L2 echo
|
||||
foo ole bar
|
||||
quux
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | parallel -kr -L2 echo
|
||||
foo ole bar
|
||||
quux
|
||||
parallel -kr -L2 echo ::: foo '' 'ole ' bar quux
|
||||
foo ole bar
|
||||
quux
|
||||
echo '### Test of trailing space continuation with -E eof'
|
||||
### Test of trailing space continuation with -E eof
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | xargs -r -L2 -E bar echo
|
||||
foo ole
|
||||
(echo foo; echo '';echo 'ole ';echo bar;echo quux) | parallel -kr -L2 -E bar echo
|
||||
foo ole
|
||||
parallel -kr -L2 -E bar echo ::: foo '' 'ole ' bar quux
|
||||
foo ole
|
||||
echo '### Test of --colsep'
|
||||
### Test of --colsep
|
||||
echo 'a%c%b' | parallel --colsep % echo {1} {3} {2}
|
||||
a b c
|
||||
(echo 'a%c%b'; echo a%c%b%d) | parallel -k --colsep % echo {1} {3} {2} {4}
|
||||
a b c
|
||||
a b c d
|
||||
(echo a%c%b; echo d%f%e) | parallel -k --colsep % echo {1} {3} {2}
|
||||
a b c
|
||||
d e f
|
||||
parallel -k --colsep % echo {1} {3} {2} ::: a%c%b d%f%e
|
||||
a b c
|
||||
d e f
|
||||
parallel -k --colsep % echo {1} {3} {2} ::: a%c%b
|
||||
a b c
|
||||
parallel -k --colsep % echo {1} {3} {2} {4} ::: a%c%b a%c%b%d
|
||||
a b c
|
||||
a b c d
|
||||
echo '### Test of tab as colsep'
|
||||
### Test of tab as colsep
|
||||
printf 'def\tabc\njkl\tghi' | parallel -k --colsep '\t' echo {2} {1}
|
||||
abc def
|
||||
ghi jkl
|
||||
parallel -k -a <(printf 'def\tabc\njkl\tghi') --colsep '\t' echo {2} {1}
|
||||
abc def
|
||||
ghi jkl
|
||||
echo '### Test of multiple -a plus colsep'
|
||||
### Test of multiple -a plus colsep
|
||||
parallel --xapply -k -a <(printf 'def\njkl\n') -a <(printf 'abc\tghi\nmno\tpqr') --colsep '\t' echo {2} {1}
|
||||
abc def
|
||||
mno jkl
|
||||
echo '### Test of multiple -a no colsep'
|
||||
### Test of multiple -a no colsep
|
||||
parallel --xapply -k -a <(printf 'ghi\npqr\n') -a <(printf 'abc\tdef\njkl\tmno') echo {2} {1}
|
||||
abc def ghi
|
||||
jkl mno pqr
|
||||
echo '### Test of quoting after colsplit'
|
||||
### Test of quoting after colsplit
|
||||
parallel --colsep % echo {2} {1} ::: '>/dev/null%>/tmp/null'
|
||||
>/tmp/null >/dev/null
|
||||
echo '### Test of --colsep as regexp'
|
||||
### Test of --colsep as regexp
|
||||
(echo 'a%c%%b'; echo a%c%b%d) | parallel -k --colsep %+ echo {1} {3} {2} {4}
|
||||
a b c
|
||||
a b c d
|
||||
parallel -k --colsep %+ echo {1} {3} {2} {4} ::: a%c%%b a%c%b%d
|
||||
a b c
|
||||
a b c d
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --colsep %+ echo {1} {3} {2} {4}
|
||||
a b c
|
||||
a b c d
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --colsep %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
a_b_c_
|
||||
a_b_c_d
|
||||
echo '### Test of -C'
|
||||
### Test of -C
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
a_b_c_
|
||||
a_b_c_d
|
||||
echo '### Test of --trim n'
|
||||
### Test of --trim n
|
||||
(echo 'a% c %%b'; echo a%c% b %d) | parallel -k --trim n --colsep %+ echo '"{1}_{3}_{2}_{4}"'
|
||||
a_b_' c '_
|
||||
a_' b '_c_d
|
||||
parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"' ::: 'a% c %%b' 'a%c% b %d'
|
||||
a_b_c_
|
||||
a_b_c_d
|
||||
echo '### Test of bug: If input is empty string'
|
||||
### Test of bug: If input is empty string
|
||||
(echo ; echo abcbdbebf;echo abc) | parallel -k --colsep b -v echo {1}{2}
|
||||
echo ''
|
||||
|
||||
echo ac
|
||||
ac
|
||||
echo ac
|
||||
ac
|
||||
echo '### Test :::: mixed with :::'
|
||||
### Test :::: mixed with :::
|
||||
echo '### Test :::: < ::: :::'
|
||||
### Test :::: < ::: :::
|
||||
parallel -k echo {1} {2} {3} :::: <(seq 6 7) ::: 4 5 ::: 1 2 3
|
||||
6 4 1
|
||||
6 4 2
|
||||
6 4 3
|
||||
6 5 1
|
||||
6 5 2
|
||||
6 5 3
|
||||
7 4 1
|
||||
7 4 2
|
||||
7 4 3
|
||||
7 5 1
|
||||
7 5 2
|
||||
7 5 3
|
||||
echo '### Test :::: < < :::: <'
|
||||
### Test :::: < < :::: <
|
||||
parallel -k echo {1} {2} {3} :::: <(seq 6 7) <(seq 4 5) :::: <(seq 1 3)
|
||||
6 4 1
|
||||
6 4 2
|
||||
6 4 3
|
||||
6 5 1
|
||||
6 5 2
|
||||
6 5 3
|
||||
7 4 1
|
||||
7 4 2
|
||||
7 4 3
|
||||
7 5 1
|
||||
7 5 2
|
||||
7 5 3
|
||||
echo '### Test -a :::: < :::: <'
|
||||
### Test -a :::: < :::: <
|
||||
parallel -k -a <(seq 6 7) echo {1} {2} {3} :::: <(seq 4 5) :::: <(seq 1 3)
|
||||
6 4 1
|
||||
6 4 2
|
||||
6 4 3
|
||||
6 5 1
|
||||
6 5 2
|
||||
6 5 3
|
||||
7 4 1
|
||||
7 4 2
|
||||
7 4 3
|
||||
7 5 1
|
||||
7 5 2
|
||||
7 5 3
|
||||
echo '### Test -a -a :::'
|
||||
### Test -a -a :::
|
||||
parallel -k -a <(seq 6 7) -a <(seq 4 5) echo {1} {2} {3} ::: 1 2 3
|
||||
6 4 1
|
||||
6 4 2
|
||||
6 4 3
|
||||
6 5 1
|
||||
6 5 2
|
||||
6 5 3
|
||||
7 4 1
|
||||
7 4 2
|
||||
7 4 3
|
||||
7 5 1
|
||||
7 5 2
|
||||
7 5 3
|
||||
echo '### Test -a - -a :::'
|
||||
### Test -a - -a :::
|
||||
seq 6 7 | parallel -k -a - -a <(seq 4 5) echo {1} {2} {3} ::: 1 2 3
|
||||
6 4 1
|
||||
6 4 2
|
||||
6 4 3
|
||||
6 5 1
|
||||
6 5 2
|
||||
6 5 3
|
||||
7 4 1
|
||||
7 4 2
|
||||
7 4 3
|
||||
7 5 1
|
||||
7 5 2
|
||||
7 5 3
|
||||
echo '### Test :::: < - :::'
|
||||
### Test :::: < - :::
|
||||
seq 4 5 | parallel -k echo {1} {2} {3} :::: <(seq 6 7) - ::: 1 2 3
|
||||
6 4 1
|
||||
6 4 2
|
||||
6 4 3
|
||||
6 5 1
|
||||
6 5 2
|
||||
6 5 3
|
||||
7 4 1
|
||||
7 4 2
|
||||
7 4 3
|
||||
7 5 1
|
||||
7 5 2
|
||||
7 5 3
|
||||
echo '### Test -E'
|
||||
### Test -E
|
||||
seq 1 100 | parallel -k -E 5 echo :::: - ::: 2 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
1 2 3
|
||||
1 2 4
|
||||
1 3 3
|
||||
1 3 4
|
||||
1 4 3
|
||||
1 4 4
|
||||
2 2 3
|
||||
2 2 4
|
||||
2 3 3
|
||||
2 3 4
|
||||
2 4 3
|
||||
2 4 4
|
||||
3 2 3
|
||||
3 2 4
|
||||
3 3 3
|
||||
3 3 4
|
||||
3 4 3
|
||||
3 4 4
|
||||
4 2 3
|
||||
4 2 4
|
||||
4 3 3
|
||||
4 3 4
|
||||
4 4 3
|
||||
4 4 4
|
||||
echo '### Test -E one empty'
|
||||
### Test -E one empty
|
||||
seq 1 100 | parallel -k -E 3 echo :::: - ::: 2 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
1 2
|
||||
2 2
|
||||
echo '### Test -E 2 empty'
|
||||
### Test -E 2 empty
|
||||
seq 1 100 | parallel -k -E 3 echo :::: - ::: 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
1
|
||||
2
|
||||
echo '### Test -E all empty'
|
||||
### Test -E all empty
|
||||
seq 3 100 | parallel -k -E 3 echo :::: - ::: 3 4 5 6 7 8 9 10 :::: <(seq 3 11)
|
||||
echo '### Test {#}'
|
||||
### Test {#}
|
||||
seq 1 10 | parallel -k echo {#}
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
echo '### Test --seqreplace and line too long'
|
||||
### Test --seqreplace and line too long
|
||||
seq 1 1000 | stdout parallel -j1 -s 210 -k --seqreplace I echo IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII \|wc | uniq -c
|
||||
9 1 1 101
|
||||
90 1 1 201
|
||||
1 parallel: Error: Command line too long (309 >= 210) at input 0: 100
|
||||
echo '### bug #37042: -J foo is taken from the whole command line - not just the part before the command'
|
||||
### bug #37042: -J foo is taken from the whole command line - not just the part before the command
|
||||
echo '--tagstring foo' > ~/.parallel/bug_37042_profile; parallel -J bug_37042_profile echo ::: tag_with_foo; parallel --tagstring a -J bug_37042_profile echo ::: tag_with_a; parallel --tagstring a echo -J bug_37042_profile ::: print_-J_bug_37042_profile
|
||||
foo tag_with_foo
|
||||
a tag_with_a
|
||||
a -J bug_37042_profile print_-J_bug_37042_profile
|
||||
echo '### Bug introduce by fixing bug #37042'
|
||||
### Bug introduce by fixing bug #37042
|
||||
parallel --xapply -a <(printf 'abc') --colsep '\t' echo {1}
|
||||
abc
|
||||
echo "### Test --header with -N"
|
||||
### Test --header with -N
|
||||
(echo h1; echo h2; echo 1a;echo 1b; echo 2a;echo 2b; echo 3a)| parallel -j1 --pipe -N2 -k --header '.*\n.*\n' echo Start\;cat \; echo Stop
|
||||
Start
|
||||
h1
|
||||
h2
|
||||
1a
|
||||
1b
|
||||
Stop
|
||||
Start
|
||||
h1
|
||||
h2
|
||||
2a
|
||||
2b
|
||||
Stop
|
||||
Start
|
||||
h1
|
||||
h2
|
||||
3a
|
||||
Stop
|
||||
echo "### Test --header with --block 1k"
|
||||
### Test --header with --block 1k
|
||||
(echo h1; echo h2; perl -e '$a="x"x110;for(1..22){print $_,$a,"\n"'})| parallel -j1 --pipe -k --block 1k --header '.*\n.*\n' echo Start\;cat \; echo Stop
|
||||
Start
|
||||
h1
|
||||
h2
|
||||
1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
8xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
Stop
|
||||
Start
|
||||
h1
|
||||
h2
|
||||
9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
11xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
12xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
13xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
14xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
15xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
16xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
Stop
|
||||
Start
|
||||
h1
|
||||
h2
|
||||
17xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
18xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
19xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
20xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
21xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
22xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
Stop
|
||||
echo "### Test --header with multiple :::"
|
||||
### Test --header with multiple :::
|
||||
parallel --header : echo {a} {b} {1} {2} ::: b b1 ::: a a2
|
||||
a2 b1 b1 a2
|
||||
echo moved to parallel-local-1s.sh
|
||||
moved to parallel-local-1s.sh
|
||||
|
|
|
@ -39,7 +39,7 @@ https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
|
|||
To silence this citation notice: run 'parallel --citation' once.
|
||||
|
||||
10 files to edit
|
||||
[?2004h[?1049h[22;0;0t[?1h=[?2004h[1;24r[?12h[?12l[27m[23m[29m[m[H[2J[?25l[24;1H"file1" [New File][2;1H½[6n[2;1H [1;1H[>c]10;?]11;?[2;1H[94m~ [3;1H~ [4;1H~ [5;1H~ [6;1H~ [7;1H~ [8;1H~ [9;1H~ [10;1H~ [11;1H~ [12;1H~ [13;1H~ [14;1H~ [15;1H~ [16;1H~ [17;1H~ [18;1H~ [19;1H~ [20;1H~ [21;1H~ [22;1H~ [23;1H~ [m[24;63H0,0-1[9CAll[1;1H[?25h[?25l[24;1H[97m[41mE173: 9 more files to edit[m[24;63H[K[?2004h[24;63H0,0-1[9CAll[1;1H[?25h[24;1H[?2004l[24;1H[K[24;1H[?2004l[?1l>[?1049l[23;0;0tAcademic tradition requires you to cite works you base your article on.
|
||||
[?2004h[?1049h[22;0;0t[?1h=[?2004h[1;24r[?12h[?12l[27m[23m[29m[m[H[2J[?25l[24;1H"file1" [New File][2;1H[94m~ [3;1H~ [4;1H~ [5;1H~ [6;1H~ [7;1H~ [8;1H~ [9;1H~ [10;1H~ [11;1H~ [12;1H~ [13;1H~ [14;1H~ [15;1H~ [16;1H~ [17;1H~ [18;1H~ [19;1H~ [20;1H~ [21;1H~ [22;1H~ [23;1H~ [1;1H[?25h[?25l[m[24;1H[97m[41mE173: 9 more files to edit[?2004h[1;1H[?25h[24;1H[?2004l[m[24;1H[K[24;1H[?2004l[?1l>[?1049l[23;0;0tAcademic tradition requires you to cite works you base your article on.
|
||||
If you use programs that use GNU Parallel to process data for an article in a
|
||||
scientific publication, please cite:
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ echo '### Check that 4 processes are really used'
|
|||
echo '### --version must have higher priority than retired options'
|
||||
### --version must have higher priority than retired options
|
||||
$NICEPAR --version -g -Y -U -W -T | tail -n9
|
||||
Copyright (C) 2007-2019 Ole Tange and Free Software Foundation, Inc.
|
||||
Foundation, Inc.
|
||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
GNU parallel comes with no warranty.
|
||||
|
|
Loading…
Reference in a new issue