parallel: $PARALLEL_ARGHOSTGROUPS and {agrp} implemented.

This commit is contained in:
Ole Tange 2020-12-30 13:42:02 +01:00
parent ff7f7c918b
commit de8f083ba4
53 changed files with 796 additions and 569 deletions

View file

@ -1,5 +1,9 @@
Quote of the month:
Every time I install @ubuntu, one of the first tools I install is
@gnuparallel. I love it.
-- Necati Demir @ndemir
Today I'm grateful for GNU parallel, especially with the --colsep and
--jobs parameters #GiveThanks
-- Erin Young @ErinYoun

View file

@ -35,6 +35,8 @@ gpl v3
[Save]
10.5281/zenodo.4381888
DOINO=3956817
TAG='PrivacyShield'
@ -190,16 +192,15 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20201222 ('Vaccine/Maradona/Yeager/Le Carre') released <<[stable]>>
Subject: GNU Parallel 20210122 ('') released <<[stable]>>
GNU Parallel 20201222 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
GNU Parallel 20210122 ('') <<[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.>>
Please help spreading GNU Parallel by making a testimonial video like Juan Sierra Pons: http://www.elsotanillo.net/wp-content/uploads/GnuParallel_JuanSierraPons.mp4
It does not have to be as detailed as Juan's. It is perfectly fine if
you just say your name, and what field you are using GNU Parallel for.
It does not have to be as detailed as Juan's. It is perfectly fine if you just say your name, and what field you are using GNU Parallel for.
Quote of the month:
<<>>
@ -212,17 +213,13 @@ New in this release:
News about GNU Parallel:
* Best practices for accelerating data migrations using AWS Snowball Edge https://aws.amazon.com/blogs/storage/best-practices-for-accelerating-data-migrations-using-aws-snowball-edge/
* Pass the Output of a Command as an Argument for Another https://www.baeldung.com/linux/pass-cmd-output-as-an-argument
* Warwick RSE Drop-in - Workflow Management Part 2 - GNU Parallel https://www.youtube.com/watch?v=t_v2Otgt87g
<<>>
Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html
GNU Parallel - For people who live life in the parallel lane.
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include command that uses GNU Parallel if you feel like it.
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.
= About GNU Parallel =
@ -242,7 +239,6 @@ Or you can generate big, medium, and small thumbnails of all jpeg files in sub d
find . -name '*.jpg' |
parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200
You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/
You can install GNU Parallel in just 10 seconds with:

View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -382,8 +382,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -384,8 +384,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -382,8 +382,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -365,8 +365,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -368,8 +368,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify

View file

@ -803,7 +803,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-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -382,8 +382,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify

View file

@ -7,7 +7,7 @@
# after which 'env_parallel' works
#
#
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -359,8 +359,8 @@ _parset_main() {
return 255
fi
if [ "$_parset_NAME" = "--version" ] ; then
echo "parset 20201222 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software"
echo "parset 20201223 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"
echo "This is free software: you are free to change and redistribute it."

View file

@ -2,7 +2,7 @@
# Copyright (C) 2004-2010 Ole Tange, http://ole.tange.dk
#
# Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and
# Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and
# Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -23,7 +23,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
$Global::version = 20201222;
$Global::version = 20201223;
Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage();
if($opt::version) {

View file

@ -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-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.
=head1 LICENSE

View file

@ -1,6 +1,6 @@
#!/usr/bin/env perl
# Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -2144,7 +2144,7 @@ sub check_invalid_option_combinations() {
sub init_globals() {
# Defaults:
$Global::version = 20201222;
$Global::version = 20201223;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@ -2212,8 +2212,10 @@ sub init_globals() {
'{host}' => '1 $_="\${PARALLEL_SSHHOST}";uq()',
# {sshlogin} = sshlogin
'{sshlogin}' => '1 $_="\${PARALLEL_SSHLOGIN}";uq()',
# {hgrp} = hostgroups
# {hgrp} = hostgroups of the host
'{hgrp}' => '1 $_="\${PARALLEL_HOSTGROUPS}";uq()',
# {agrp} = hostgroups of the argument
'{agrp}' => '1 $_="\${PARALLEL_ARGHOSTGROUPS}";uq()',
);
# Modifiable copy of %Global::replace
%Global::rpl = %Global::replace;
@ -2252,6 +2254,10 @@ sub init_globals() {
# Use first dir as config dir
$Global::config_dir = $Global::config_dirs[0] ||
$ENV{'HOME'} . "/.parallel";
if($ENV{'PARALLEL_HOME'} =~ /./ and not -d $ENV{'PARALLEL_HOME'}) {
::warning("\$PARALLEL_HOME ($ENV{'PARALLEL_HOME'}) does not exist.");
::warning("Using $Global::config_dir");
}
# cache_dirs = $PARALLEL_HOME, $XDG_CACHE_HOME/parallel,
# Keep only dirs that exist
@Global::cache_dirs =
@ -5028,7 +5034,7 @@ sub version() {
print join
("\n",
"GNU $Global::progname $Global::version",
"Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software",
"Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software",
"Foundation, Inc.",
"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>",
"This is free software: you are free to change and redistribute it.",
@ -5161,7 +5167,7 @@ sub embed() {
}
print "#!$Global::shell
# Copyright (C) 2007-2020 $user, Ole Tange, http://ole.tange.dk
# Copyright (C) 2007-2021 $user, Ole Tange, http://ole.tange.dk
# and Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
@ -7049,23 +7055,26 @@ sub compute_number_of_processes($) {
if($system_limit < $wanted_processes) {
# The system_limit is less than the wanted_processes
if($system_limit < 1 and not $Global::JobQueue->empty()) {
::warning("Cannot spawn any jobs. ".
"Raising ulimit -u or 'nproc' in /etc/security/limits.conf",
"or /proc/sys/kernel/pid_max may help.");
::warning("Cannot spawn any jobs.",
"Try increasing 'ulimit -u' (try: ulimit -u `ulimit -Hu`)",
"or increasing 'nproc' in /etc/security/limits.conf",
"or increasing /proc/sys/kernel/pid_max");
::wait_and_exit(255);
}
if(not $more_filehandles) {
::warning("Only enough file handles to run ".
$system_limit. " jobs in parallel.",
"Running 'parallel -j0 -N $system_limit --pipe parallel -j0' or",
"raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf",
"or /proc/sys/fs/file-max may help.");
"Try running 'parallel -j0 -N $system_limit --pipe parallel -j0'",
"or increasing 'ulimit -n' (try: ulimit -n `ulimit -Hn`)",
"or increasing 'nofile' in /etc/security/limits.conf",
"or increasing /proc/sys/fs/file-max");
}
if($max_system_proc_reached) {
::warning("Only enough available processes to run ".
$system_limit. " jobs in parallel.",
"Raising ulimit -u or /etc/security/limits.conf ",
"or /proc/sys/kernel/pid_max may help.");
"Try increasing 'ulimit -u' (try: ulimit -u `ulimit -Hu`)",
"or increasing 'nproc' in /etc/security/limits.conf",
"or increasing /proc/sys/kernel/pid_max");
}
}
if($] == 5.008008 and $system_limit > 1000) {
@ -9183,9 +9192,10 @@ sub sshlogin_wrap($) {
# So --env myfunc should look for BASH_FUNC_myfunc() and BASH_FUNC_myfunc%%
push(@vars, "PARALLEL_PID", "PARALLEL_SEQ",
"PARALLEL_SSHLOGIN", "PARALLEL_SSHHOST", "PARALLEL_HOSTGROUPS",
"PARALLEL_JOBSLOT",
map { ("BASH_FUNC_$_()", "BASH_FUNC_$_%%") } @vars);
"PARALLEL_SSHLOGIN", "PARALLEL_SSHHOST",
"PARALLEL_HOSTGROUPS", "PARALLEL_ARGHOSTGROUPS",
"PARALLEL_JOBSLOT", map { ("BASH_FUNC_$_()",
"BASH_FUNC_$_%%") } @vars);
# Keep only defined variables
return grep { defined($ENV{$_}) } @vars;
}
@ -9247,8 +9257,8 @@ sub sshlogin_wrap($) {
$ENV{'PARALLEL_SSHLOGIN'} = $sshlogin->string();
$ENV{'PARALLEL_SSHHOST'} = $sshlogin->serverlogin();
if ($opt::hostgroups) {
$ENV{'PARALLEL_HOSTGROUPS'} =
join',',$sshlogin->in_hostgroups($self->hostgroups());
$ENV{'PARALLEL_HOSTGROUPS'} = join '+', $sshlogin->hostgroups();
$ENV{'PARALLEL_ARGHOSTGROUPS'} = join '+', $self->hostgroups();
}
$ENV{'PARALLEL_PID'} = $$;
if($serverlogin eq ":") {
@ -11712,9 +11722,10 @@ sub max_length($) {
my $len_cache = $Global::cache_dir . "/tmp/sshlogin/" . ::hostname() .
"/linelen";
my $cached_limit;
if(-e $len_cache) {
open(my $fh, "<", $len_cache) || ::die_bug("Cannot read $len_cache");
if(open(my $fh, "<", $len_cache)) {
$cached_limit = <$fh>;
$cached_limit || ::die_bug("Cannot read $len_cache");
close $fh;
}
if(not $cached_limit) {

View file

@ -711,7 +711,7 @@ Even quoted newlines are parsed correctly:
When used with B<--pipe> only pass full CSV-records.
=item B<--delay> I<mytime> (alpha testing)
=item B<--delay> I<mytime> (beta testing)
Delay starting next job by I<mytime>. GNU B<parallel> will pause
I<mytime> after starting each job. I<mytime> is normally in seconds,
@ -883,7 +883,7 @@ B<--group> is the default. Can be reversed with B<-u>.
See also: B<--line-buffer> B<--ungroup>
=item B<--group-by> I<val> (alpha testing)
=item B<--group-by> I<val> (beta testing)
Group input by value. Combined with B<--pipe>/B<--pipepart>
B<--group-by> groups lines with the same value into a record.
@ -1093,7 +1093,7 @@ B<my_grp1_arg> may be run on either B<myserver1> or B<myserver2>,
B<third> may be run on either B<myserver1> or B<myserver3>,
but B<arg_for_grp2> will only be run on B<myserver2>.
See also: B<--sshlogin>, B<$PARALLEL_HOSTGROUPS>.
See also: B<--sshlogin>, B<$PARALLEL_HOSTGROUPS>, B<$PARALLEL_ARGHOSTGROUPS>.
=item B<-I> I<replace-str>
@ -1494,9 +1494,9 @@ of each job is saved in a file and the filename is then printed.
See also: B<--results>
=item B<--pipe> (alpha testing)
=item B<--pipe> (beta testing)
=item B<--spreadstdin> (alpha testing)
=item B<--spreadstdin> (beta testing)
Spread input to jobs on stdin (standard input). Read a block of data
from stdin (standard input) and give one block of data as input to one
@ -1579,6 +1579,7 @@ Shorthands for variables:
{slot} $PARALLEL_JOBSLOT (see {%})
{sshlogin} $PARALLEL_SSHLOGIN
{host} $PARALLEL_SSHHOST
{agrp} $PARALLEL_ARGHOSTGROUPS
{hgrp} $PARALLEL_HOSTGROUPS
The following dynamic replacement strings are also activated. They are
@ -1859,7 +1860,7 @@ B<-.csv>/B<-.tsv> are special: It will give the file on stdout
(standard output).
B<JSON file output> (alpha testing)
B<JSON file output> (beta testing)
If I<name> ends in B<.json> the output will be a JSON-file
named I<name>.
@ -1868,7 +1869,7 @@ B<-.json> is special: It will give the file on stdout (standard
output).
B<Replacement string output file> (alpha testing)
B<Replacement string output file> (beta testing)
If I<name> contains a replacement string and the replaced result does
not end in /, then the standard output will be stored in a file named
@ -2430,7 +2431,7 @@ be overridden with B<--ssh>. It can also be set on a per server
basis (see B<--sshlogin>).
=item B<--sshdelay> I<mytime> (alpha testing)
=item B<--sshdelay> I<mytime> (beta testing)
Delay starting next ssh by I<mytime>. GNU B<parallel> will not start
another ssh for the next I<mytime>.
@ -4855,11 +4856,19 @@ Dir where GNU B<parallel> stores config files, semaphores, and caches
information between invocations. Default: $HOME/.parallel.
=item $PARALLEL_ARGHOSTGROUPS
When using B<--hostgroups> GNU B<parallel> sets this to the hostgroups
of the job.
Remember to quote the $, so it gets evaluated by the correct shell. Or
use B<--plus> and {agrp}.
=item $PARALLEL_HOSTGROUPS
When using B<--hostgroups> GNU B<parallel> sets this to the
intersection of the hostgroups of the job and the sshlogin that the
job is run on.
When using B<--hostgroups> GNU B<parallel> sets this to the hostgroups
of the sshlogin that the job is run on.
Remember to quote the $, so it gets evaluated by the correct shell. Or
use B<--plus> and {hgrp}.
@ -5301,7 +5310,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-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.
Parts of the manual concerning B<xargs> compatibility is inspired by

View file

@ -3057,7 +3057,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-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.
Parts of the manual concerning B<xargs> compatibility is inspired by

View file

@ -3000,7 +3000,7 @@ When asking for help, always report the full output of this:
Output:
GNU parallel 20200122
Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software
Copyright (C) 2007-2021 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.

View file

@ -67,7 +67,7 @@ GNU B<parcat> is part of GNU B<parallel>. Report bugs to
=head1 AUTHOR
Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.
=head1 LICENSE

View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Copyright (C) 2016-2020 Ole Tange, http://ole.tange.dk and Free
# Copyright (C) 2016-2021 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify

View file

@ -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-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.

View file

@ -118,7 +118,7 @@ GetOptions(
"help" => \$opt::dummy,
) || exit(255);
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
$Global::version = 20201222;
$Global::version = 20201223;
if($opt::version) { version(); exit 0; }
@Global::sortoptions = @ARGV_before[0..($#ARGV_before-$#ARGV-1)];
#if($opt::zero_terminated) { $/ = "\0"; }

View file

@ -244,7 +244,7 @@ Report bugs to <bug-parallel@gnu.org>.
=head1 AUTHOR
Copyright (C) 2010-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.

View file

@ -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-2020 Ole Tange, http://ole.tange.dk and Free
Copyright (C) 2010-2021 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.
=head1 LICENSE
@ -574,7 +574,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err);
sub parse_options {
$Global::version = 20201222;
$Global::version = 20201223;
$Global::progname = 'sql';
# This must be done first as this may exec myself

View file

@ -7,10 +7,8 @@ testsuite: 3
touch ~/.parallel/will-cite
make stopvm
### Limited test sets - run once
# No 100s, 300s, mem, polarhome, tutorial
1: ../src/parallel tests-to-run/* wanted-results/* prereqlocal startdb prereqremote
TRIES=1 time bash Start.sh '' '00s|mem|polarhome|tutorial' || true
TRIES=1 time bash Start.sh '' mem || true
touch ~/.parallel/will-cite
make stopvm
@ -104,7 +102,7 @@ stopvm:
parallel --tag -k 'ping -w 1 -c 1 {} && cd vagrant/*/{} && vagrant suspend' ::: centos8 freebsd11 freebsd12 rhel8 centos3
startdb:
true should start Oracle in vagrant
true TODO should start Oracle in vagrant
startdb-old:
#echo shutdown abort | sudo su - oracle -c "sqlplus / as sysdba"
sudo parallel /etc/init.d/{} status '||' /etc/init.d/{} restart ::: postgresql mysql # oracle-xe

View file

@ -292,6 +292,10 @@ add_freebsd() {
tmux_versions() {
(cd /tmp
git clone https://github.com/tmux/tmux.git
listtags() {
(cd tmux;
git tag)
}
make_one() {
rsync -a --delete tmux/ tmux$1/
cd tmux$1
@ -304,9 +308,9 @@ tmux_versions() {
}
export -f make_one
echo '# Building tmux'
seq 1.8 0.1 3.0 |
listtags |
stdout parallel --lb --tag '/usr/local/bin/tmux-{} -V || make_one {}'
seq 1.8 0.1 3.0 |
listtags |
parallel -k -v /usr/local/bin/tmux-{} -V
)
}

View file

@ -12,6 +12,43 @@ export -f stdsort
# Test amount of parallelization
# parallel --shuf --jl /tmp/myjl -j1 'export JOBS={1};'bash tests-to-run/parallel-local-0.3s.sh ::: {1..16} ::: {1..5}
par_resume_k() {
echo '### --resume -k'
tmp=$(tempfile)
parallel -k --resume --joblog $tmp echo job{}id\;exit {} ::: 0 1 2 3 0 5
echo try 2 = nothing
parallel -k --resume --joblog $tmp echo job{}id\;exit {} ::: 0 1 2 3 0 5
echo two extra
parallel -k --resume --joblog $tmp echo job{}id\;exit 0 ::: 0 1 2 3 0 5 6 7
rm -f $tmp
}
par_empty_string_quote() {
echo "bug #37694: Empty string argument skipped when using --quote"
parallel -q --nonall perl -le 'print scalar @ARGV' 'a' 'b' ''
}
par_trim_illegal_value() {
echo '### Test of --trim illegal'
stdout parallel --trim fj ::: echo
}
par_dirnamereplace() {
echo '### Test --dnr'
parallel --dnr II -k echo II {} ::: a a/b a/b/c
echo '### Test --dirnamereplace'
parallel --dirnamereplace II -k echo II {} ::: a a/b a/b/c
}
par_negative_replacement() {
echo '### Negative replacement strings'
parallel -X -j1 -N 6 echo {-1}orrec{1} ::: t B X D E c
parallel -N 6 echo {-1}orrect ::: A B X D E c
parallel --colsep ' ' echo '{2} + {4} = {2} + {-1}=' '$(( {2} + {-1} ))' ::: "1 2 3 4"
parallel --colsep ' ' echo '{-3}orrect' ::: "1 c 3 4"
}
par_replacement_string_on_utf8() {
echo '### test {} {.} on UTF8 input'
inputlist() {
@ -23,6 +60,26 @@ par_replacement_string_on_utf8() {
inputlist | parallel -k echo {} {.}
}
par_rpl_repeats() {
echo '### Test {.} does not repeat more than {}'
seq 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
seq 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.}
}
par_do_not_export_PARALLEL_ENV() {
echo '### Do not export $PARALLEL_ENV to children'
doit() {
echo Should be 0
echo "$PARALLEL_ENV" | wc
echo Should give 60k and not overflow
PARALLEL_ENV="$PARALLEL_ENV" parallel echo '{=$_="\""x$_=}' ::: 60000 | wc
}
. `which env_parallel.bash`
# Make PARALLEL_ENV as big as possible
PARALLEL_ENV="a='$(seq 100000 | head -c $((139000-$(set|wc -c) )) )'"
env_parallel doit ::: 1
}
par_compress_stdout_stderr() {
echo '### Test compress - stdout'
parallel --compress echo ::: OK
@ -154,16 +211,6 @@ par_verbose_t() {
(echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null
}
par_show_limits() {
echo '### Test --show-limits'
(
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
(echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar
echo "### BUG: empty lines with --show-limit"
echo | stdout parallel --show-limits
) | perl -pe 's/131\d\d\d/131xxx/'
}
par_test_zero_args() {
echo '### Test 0-arguments'

View file

@ -10,6 +10,22 @@ export TMP5G
rm -f /tmp/*.{tmx,pac,arg,all,log,swp,loa,ssh,df,pip,tmb,chr,tms,par}
par_squared() {
export PARALLEL="--load 300%"
squared() {
i=$1
i2=$[i*i]
seq $i2 | parallel -j0 --load 300% -kX echo {} | wc
seq 1 ${i2}0000 |
parallel -kj20 --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum
}
export -f squared
seq 10 -1 2 | stdout parallel -j5 -k squared |
grep -Ev 'processes took|Consider adjusting -j'
}
linebuffer_matters() {
echo "### (--linebuffer) --compress $TAG should give different output"
nolbfile=$(mktemp)

View file

@ -4,6 +4,88 @@
# Each should be taking 10-30s and be possible to run in parallel
# I.e.: No race conditions, no logins
par_shard() {
echo '### --shard'
# Each of the 5 lines should match:
# ##### ##### ######
seq 100000 | parallel --pipe --shard 1 -j5 wc |
perl -pe 's/(.*\d{5,}){3}/OK/'
# Data should be sharded to all processes
shard_on_col() {
col=$1
seq 10 99 | shuf | perl -pe 's/(.)/$1\t/g' |
parallel --pipe --shard $col -j2 --colsep "\t" sort -k$col |
field $col | sort | uniq -c
}
shard_on_col 1
shard_on_col 2
shard_on_col_name() {
colname=$1
col=$2
(echo AB; seq 10 99 | shuf) | perl -pe 's/(.)/$1\t/g' |
parallel --header : --pipe --shard $colname -j2 --colsep "\t" sort -k$col |
field $col | sort | uniq -c
}
shard_on_col_name A 1
shard_on_col_name B 2
shard_on_col_expr() {
colexpr="$1"
col=$2
(seq 10 99 | shuf) | perl -pe 's/(.)/$1\t/g' |
parallel --pipe --shard "$colexpr" -j2 --colsep "\t" "sort -k$col; echo c1 c2" |
field $col | sort | uniq -c
}
shard_on_col_expr '1 $_%=3' 1
shard_on_col_expr '2 $_%=3' 2
shard_on_col_name_expr() {
colexpr="$1"
col=$2
(echo AB; seq 10 99 | shuf) | perl -pe 's/(.)/$1\t/g' |
parallel --header : --pipe --shard "$colexpr" -j2 --colsep "\t" "sort -k$col; echo c1 c2" |
field $col | sort | uniq -c
}
shard_on_col_name_expr 'A $_%=3' 1
shard_on_col_name_expr 'B $_%=3' 2
echo '*** broken'
# Shorthand for --pipe -j+0
seq 100000 | parallel --shard 1 wc |
perl -pe 's/(.*\d{5,}){3}/OK/'
# Combine with arguments
seq 100000 | parallel --shard 1 echo {}\;wc ::: {1..5} ::: a b |
perl -pe 's/(.*\d{5,}){3}/OK/'
}
par_bin() {
echo '### Test --bin'
seq 10 | parallel --pipe --bin 1 -j4 wc | sort
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin 2 -j4 wc | sort
echo '### Test --bin with expression that gives 1..n'
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_=$_%2+1' -j4 wc | sort
echo '### Test --bin with expression that gives 0..n-1'
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_%=2' -j4 wc | sort
# Fails - blocks!
# paste <(seq 10) <(seq 10 -1 1) | parallel --pipe --colsep '\t' --bin 2 wc
}
par_load_blocks() {
echo "### Test if --load blocks. Bug.";
export PARALLEL="--load 300%"
(seq 1 1000 |
parallel -kj2 --load 300% --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum
seq 1 1000 |
parallel -kj200 --load 300% --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum) 2>&1 |
grep -Ev 'processes took|Consider adjusting -j'
}
par_compress_prg_fails() {
echo '### bug #44546: If --compress-program fails: fail'
doit() {
@ -546,14 +628,6 @@ par_results_csv() {
perl -pe 's:/par......par:/tmpfile:g;s/\d+\.\d+/999.999/g'
}
par_results_compress() {
tmp=$(mktemp)
rm "$tmp"
parallel --results $tmp --compress echo ::: 1 | wc -l
parallel --results $tmp echo ::: 1 | wc -l
rm -r "$tmp"
}
par_kill_children_timeout() {
echo '### Test killing children with --timeout and exit value (failed if timed out)'
pstree $$ | grep sleep | grep -v anacron | grep -v screensave | wc

View file

@ -4,6 +4,23 @@
# Each should be taking 1-3s and be possible to run in parallel
# I.e.: No race conditions, no logins
par_sqlandworker_uninstalled_dbd() {
echo 'bug #56096: dbi-csv no such column'
mkdir -p /tmp/parallel-bug-56096
sudo mv /usr/share/perl5/DBD/CSV.pm /usr/share/perl5/DBD/CSV.pm.gone
parallel --sqlandworker csv:///%2Ftmp%2Fparallel-bug-56096/mytable echo ::: must_fail
sudo cp /usr/share/perl5/DBD/CSV.pm.gone /usr/share/perl5/DBD/CSV.pm
parallel --sqlandworker csv:///%2Ftmp%2Fparallel-bug-56096/mytable echo ::: works
}
par_results_compress() {
tmp=$(mktemp)
rm "$tmp"
parallel --results $tmp --compress echo ::: 1 | wc -l
parallel --results $tmp echo ::: 1 | wc -l
rm -r "$tmp"
}
par_I_X_m() {
echo '### Test -I with -X and -m'
@ -129,11 +146,6 @@ par_test_gt_quoting() {
(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
@ -864,6 +876,17 @@ par_null_resume() {
rm "$log"
}
par_pipepart_block() {
echo '### --pipepart --block -# (# < 0)'
seq 1000 > /run/shm/parallel$$
parallel -j2 -k --pipepart echo {#} :::: /run/shm/parallel$$
parallel -j2 -k --block -1 --pipepart echo {#}-2 :::: /run/shm/parallel$$
parallel -j2 -k --block -2 --pipepart echo {#}-4 :::: /run/shm/parallel$$
parallel -j2 -k --block -10 --pipepart echo {#}-20 :::: /run/shm/parallel$$
rm /run/shm/parallel$$
}
par_block_negative_prefix() {
tmp=`mktemp`
seq 100000 > $tmp

View file

@ -4,74 +4,16 @@
# Each should be taking 30-100s and be possible to run in parallel
# I.e.: No race conditions, no logins
par_shard() {
echo '### --shard'
# Each of the 5 lines should match:
# ##### ##### ######
seq 100000 | parallel --pipe --shard 1 -j5 wc |
perl -pe 's/(.*\d{5,}){3}/OK/'
# Data should be sharded to all processes
shard_on_col() {
col=$1
seq 10 99 | shuf | perl -pe 's/(.)/$1\t/g' |
parallel --pipe --shard $col -j2 --colsep "\t" sort -k$col |
field $col | sort | uniq -c
}
shard_on_col 1
shard_on_col 2
shard_on_col_name() {
colname=$1
col=$2
(echo AB; seq 10 99 | shuf) | perl -pe 's/(.)/$1\t/g' |
parallel --header : --pipe --shard $colname -j2 --colsep "\t" sort -k$col |
field $col | sort | uniq -c
}
shard_on_col_name A 1
shard_on_col_name B 2
shard_on_col_expr() {
colexpr="$1"
col=$2
(seq 10 99 | shuf) | perl -pe 's/(.)/$1\t/g' |
parallel --pipe --shard "$colexpr" -j2 --colsep "\t" "sort -k$col; echo c1 c2" |
field $col | sort | uniq -c
}
shard_on_col_expr '1 $_%=3' 1
shard_on_col_expr '2 $_%=3' 2
shard_on_col_name_expr() {
colexpr="$1"
col=$2
(echo AB; seq 10 99 | shuf) | perl -pe 's/(.)/$1\t/g' |
parallel --header : --pipe --shard "$colexpr" -j2 --colsep "\t" "sort -k$col; echo c1 c2" |
field $col | sort | uniq -c
}
shard_on_col_name_expr 'A $_%=3' 1
shard_on_col_name_expr 'B $_%=3' 2
echo '*** broken'
# Shorthand for --pipe -j+0
seq 100000 | parallel --shard 1 wc |
perl -pe 's/(.*\d{5,}){3}/OK/'
# Combine with arguments
seq 100000 | parallel --shard 1 echo {}\;wc ::: {1..5} ::: a b |
perl -pe 's/(.*\d{5,}){3}/OK/'
}
par_bin() {
echo '### Test --bin'
seq 10 | parallel --pipe --bin 1 -j4 wc | sort
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin 2 -j4 wc | sort
echo '### Test --bin with expression that gives 1..n'
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_=$_%2+1' -j4 wc | sort
echo '### Test --bin with expression that gives 0..n-1'
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_%=2' -j4 wc | sort
# Fails - blocks!
# paste <(seq 10) <(seq 10 -1 1) | parallel --pipe --colsep '\t' --bin 2 wc
par_load_from_PARALLEL() {
echo "### Test reading load from PARALLEL"
export PARALLEL="--load 300%"
# Ignore stderr due to 'Starting processes took > 2 sec'
seq 1 1000000 |
parallel -kj200 --recend "\n" --spreadstdin gzip -1 2>/dev/null |
zcat | sort -n | md5sum
seq 1 1000000 |
parallel -kj20 --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum
}
par_exit_code() {

View file

@ -4,6 +4,22 @@
# Each should be taking 3-10s and be possible to run in parallel
# I.e.: No race conditions, no logins
par_show_limits() {
echo '### Test --show-limits'
(
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
(echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar
echo "### BUG: empty lines with --show-limit"
echo | stdout parallel --show-limits
) | perl -pe 's/131\d\d\d/131xxx/'
}
par_test_delimiter() {
echo "### Test : as delimiter. This can be confusing for uptime ie. --load";
export PARALLEL="--load 300%"
parallel -k --load 300% -d : echo ::: a:b:c
}
par_10000_m_X() {
echo '### Test -m with 10000 args'
seq 10000 | perl -pe 's/$/.gif/' |
@ -25,12 +41,6 @@ par_10000_5_rpl_X() {
seq 10000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b | wc -l
}
par_rpl_repeats() {
echo '### Test {.} does not repeat more than {}'
seq 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
seq 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.}
}
par_X_I_meta() {
echo '### Test -X -I with shell meta chars'
@ -52,11 +62,6 @@ par_sshdelay() {
perl -ne 'print($_ > 1.30 ? "OK\n" : "Not OK\n")'
}
par_empty_string_quote() {
echo "bug #37694: Empty string argument skipped when using --quote"
parallel -q --nonall perl -le 'print scalar @ARGV' 'a' 'b' ''
}
par_compute_command_len() {
echo "### Computing length of command line"
seq 1 2 | parallel -k -N2 echo {1} {2}
@ -83,22 +88,6 @@ par_replacement_slashslash() {
parallel -k echo {1//} {} ::: ./a.jpg ./a/b.jpg ./a/b/c.jpg
}
par_dirnamereplace() {
echo '### Test --dnr'
parallel --dnr II -k echo II {} ::: a a/b a/b/c
echo '### Test --dirnamereplace'
parallel --dirnamereplace II -k echo II {} ::: a a/b a/b/c
}
par_negative_replacement() {
echo '### Negative replacement strings'
parallel -X -j1 -N 6 echo {-1}orrec{1} ::: t B X D E c
parallel -N 6 echo {-1}orrect ::: A B X D E c
parallel --colsep ' ' echo '{2} + {4} = {2} + {-1}=' '$(( {2} + {-1} ))' ::: "1 2 3 4"
parallel --colsep ' ' echo '{-3}orrect' ::: "1 c 3 4"
}
par_eta() {
echo '### Test of --eta'
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
@ -224,17 +213,6 @@ par_test_X_with_multiple_source() {
parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f
}
par_resume_k() {
echo '### --resume -k'
tmp=$(tempfile)
parallel -k --resume --joblog $tmp echo job{}id\;exit {} ::: 0 1 2 3 0 5
echo try 2 = nothing
parallel -k --resume --joblog $tmp echo job{}id\;exit {} ::: 0 1 2 3 0 5
echo two extra
parallel -k --resume --joblog $tmp echo job{}id\;exit 0 ::: 0 1 2 3 0 5 6 7
rm -f $tmp
}
par_slow_args_generation() {
echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834'
seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo
@ -289,17 +267,6 @@ par_wrong_slot_rpl_resume() {
'sleep 1; echo {%} {=$_==110 and exit =}'
}
par_pipepart_block() {
echo '### --pipepart --block -# (# < 0)'
seq 1000 > /run/shm/parallel$$
parallel -j2 -k --pipepart echo {#} :::: /run/shm/parallel$$
parallel -j2 -k --block -1 --pipepart echo {#}-2 :::: /run/shm/parallel$$
parallel -j2 -k --block -2 --pipepart echo {#}-4 :::: /run/shm/parallel$$
parallel -j2 -k --block -10 --pipepart echo {#}-20 :::: /run/shm/parallel$$
rm /run/shm/parallel$$
}
par_multiline_commands() {
echo 'bug #50781: joblog format with multiline commands'
rm -f /tmp/jl.$$
@ -321,15 +288,6 @@ par_sqlworker_hostname() {
perl -pe "s/$hostname/<hostname>/g"
}
par_sqlandworker_uninstalled_dbd() {
echo 'bug #56096: dbi-csv no such column'
mkdir -p /tmp/parallel-bug-56096
sudo mv /usr/share/perl5/DBD/CSV.pm /usr/share/perl5/DBD/CSV.pm.gone
parallel --sqlandworker csv:///%2Ftmp%2Fparallel-bug-56096/mytable echo ::: must_fail
sudo cp /usr/share/perl5/DBD/CSV.pm.gone /usr/share/perl5/DBD/CSV.pm
parallel --sqlandworker csv:///%2Ftmp%2Fparallel-bug-56096/mytable echo ::: works
}
par_commandline_with_newline() {
echo 'bug #51299: --retry-failed with command with newline'
echo 'The format must remain the same'
@ -383,20 +341,6 @@ par_exitval_signal() {
rm -f /tmp/parallel_joblog_exitval /tmp/parallel_joblog_signal
}
par_do_not_export_PARALLEL_ENV() {
echo '### Do not export $PARALLEL_ENV to children'
doit() {
echo Should be 0
echo "$PARALLEL_ENV" | wc
echo Should give 60k and not overflow
PARALLEL_ENV="$PARALLEL_ENV" parallel echo '{=$_="\""x$_=}' ::: 60000 | wc
}
. `which env_parallel.bash`
# Make PARALLEL_ENV as big as possible
PARALLEL_ENV="a='$(seq 100000 | head -c $((139000-$(set|wc -c) )) )'"
env_parallel doit ::: 1
}
par_lb_mem_usage() {
long_line() {
perl -e 'print "x"x100_000_000'

View file

@ -187,6 +187,170 @@ par_remote_nice() {
perl -pe 's/\S*parallel-server\S*/one-server/;s:="[0-9]+":="XXXXX":i;'
}
par_hgrp_agrp() {
echo '### Test --hgrp {hgrp} {agrp}'
parallel --plus --hgrp -S @b+lo/bash@lo,@c+lo/csh@lo --tag 'echo hgrp={hgrp};echo agrp={agrp}' ::: A@b+c B@b C@c D@c+b@u E |
grep -vF -f <(cat <<_
A agrp=b+c
A hgrp=b+bash@lo+lo
A hgrp=b+lo+bash@lo
A hgrp=bash@lo+b+lo
A hgrp=bash@lo+lo+b
A hgrp=c+csh@lo+lo
A hgrp=c+lo+csh@lo
A hgrp=csh@lo+c+lo
A hgrp=csh@lo+lo+c
A hgrp=lo+b+bash@lo
A hgrp=lo+bash@lo+b
A hgrp=lo+c+csh@lo
A hgrp=lo+csh@lo+c
B agrp=b
B hgrp=b+bash@lo+lo
B hgrp=b+lo+bash@lo
B hgrp=bash@lo+b+lo
B hgrp=bash@lo+lo+b
B hgrp=lo+b+bash@lo
B hgrp=lo+bash@lo+b
C agrp=c
C hgrp=c+csh@lo+lo
C hgrp=c+lo+csh@lo
C hgrp=csh@lo+c+lo
C hgrp=csh@lo+lo+c
C hgrp=lo+c+csh@lo
C hgrp=lo+csh@lo+c
D agrp=c+b@u
D hgrp=c+csh@lo+lo
D hgrp=c+lo+csh@lo
D hgrp=csh@lo+c+lo
D hgrp=csh@lo+lo+c
D hgrp=lo+c+csh@lo
D hgrp=lo+csh@lo+c
E agrp=lo+b+c+bash@lo+csh@lo
E agrp=b+bash@lo+c+lo+csh@lo
E agrp=b+bash@lo+csh@lo+c+lo
E agrp=b+bash@lo+csh@lo+lo+c
E agrp=b+bash@lo+lo+c+csh@lo
E agrp=b+bash@lo+lo+csh@lo+c
E agrp=b+c+bash@lo+csh@lo+lo
E agrp=b+c+bash@lo+lo+csh@lo
E agrp=b+c+csh@lo+bash@lo+lo
E agrp=b+c+lo+bash@lo+csh@lo
E agrp=b+c+lo+csh@lo+bash@lo
E agrp=b+csh@lo+bash@lo+c+lo
E agrp=b+csh@lo+bash@lo+lo+c
E agrp=b+csh@lo+c+bash@lo+lo
E agrp=b+csh@lo+c+lo+bash@lo
E agrp=b+csh@lo+lo+bash@lo+c
E agrp=b+csh@lo+lo+c+bash@lo
E agrp=b+lo+bash@lo+c+csh@lo
E agrp=b+lo+bash@lo+csh@lo+c
E agrp=b+lo+c+bash@lo+csh@lo
E agrp=b+lo+c+csh@lo+bash@lo
E agrp=b+lo+csh@lo+bash@lo+c
E agrp=b+lo+csh@lo+c+bash@lo
E agrp=bash@lo+b+c+csh@lo+lo
E agrp=bash@lo+b+csh@lo+c+lo
E agrp=bash@lo+b+csh@lo+lo+c
E agrp=bash@lo+b+lo+c+csh@lo
E agrp=bash@lo+b+lo+csh@lo+c
E agrp=bash@lo+c+b+csh@lo+lo
E agrp=bash@lo+c+b+lo+csh@lo
E agrp=bash@lo+c+csh@lo+b+lo
E agrp=bash@lo+c+csh@lo+lo+b
E agrp=bash@lo+c+lo+b+csh@lo
E agrp=bash@lo+c+lo+csh@lo+b
E agrp=bash@lo+csh@lo+b+c+lo
E agrp=bash@lo+csh@lo+b+lo+c
E agrp=bash@lo+csh@lo+c+b+lo
E agrp=bash@lo+csh@lo+c+lo+b
E agrp=bash@lo+csh@lo+lo+b+c
E agrp=bash@lo+csh@lo+lo+c+b
E agrp=bash@lo+lo+b+c+csh@lo
E agrp=bash@lo+lo+b+csh@lo+c
E agrp=bash@lo+lo+c+b+csh@lo
E agrp=bash@lo+lo+c+csh@lo+b
E agrp=bash@lo+lo+csh@lo+b+c
E agrp=bash@lo+lo+csh@lo+c+b
E agrp=c+b+bash@lo+csh@lo+lo
E agrp=c+b+bash@lo+lo+csh@lo
E agrp=c+b+csh@lo+lo+bash@lo
E agrp=c+b+lo+bash@lo+csh@lo
E agrp=c+b+lo+csh@lo+bash@lo
E agrp=c+bash@lo+b+csh@lo+lo
E agrp=c+bash@lo+b+lo+csh@lo
E agrp=c+bash@lo+csh@lo+lo+b
E agrp=c+bash@lo+lo+b+csh@lo
E agrp=c+bash@lo+lo+csh@lo+b
E agrp=c+csh@lo+b+bash@lo+lo
E agrp=c+csh@lo+b+lo+bash@lo
E agrp=c+csh@lo+bash@lo+b+lo
E agrp=c+csh@lo+lo+b+bash@lo
E agrp=c+csh@lo+lo+bash@lo+b
E agrp=c+lo+b+bash@lo+csh@lo
E agrp=c+lo+b+csh@lo+bash@lo
E agrp=c+lo+bash@lo+b+csh@lo
E agrp=c+lo+bash@lo+csh@lo+b
E agrp=c+lo+csh@lo+b+bash@lo
E agrp=csh@lo+b+bash@lo+c+lo
E agrp=csh@lo+b+bash@lo+lo+c
E agrp=csh@lo+b+c+bash@lo+lo
E agrp=csh@lo+b+c+lo+bash@lo
E agrp=csh@lo+b+lo+c+bash@lo
E agrp=csh@lo+bash@lo+b+c+lo
E agrp=csh@lo+bash@lo+b+lo+c
E agrp=csh@lo+bash@lo+c+b+lo
E agrp=csh@lo+bash@lo+c+lo+b
E agrp=csh@lo+bash@lo+lo+b+c
E agrp=csh@lo+bash@lo+lo+c+b
E agrp=csh@lo+c+b+bash@lo+lo
E agrp=csh@lo+c+b+lo+bash@lo
E agrp=csh@lo+c+bash@lo+b+lo
E agrp=csh@lo+c+bash@lo+lo+b
E agrp=csh@lo+c+lo+b+bash@lo
E agrp=csh@lo+c+lo+bash@lo+b
E agrp=csh@lo+lo+b+bash@lo+c
E agrp=csh@lo+lo+b+c+bash@lo
E agrp=csh@lo+lo+bash@lo+b+c
E agrp=csh@lo+lo+bash@lo+c+b
E agrp=csh@lo+lo+c+b+bash@lo
E agrp=csh@lo+lo+c+bash@lo+b
E agrp=lo+b+bash@lo+c+csh@lo
E agrp=lo+b+bash@lo+csh@lo+c
E agrp=lo+b+c+csh@lo+bash@lo
E agrp=lo+b+csh@lo+bash@lo+c
E agrp=lo+b+csh@lo+c+bash@lo
E agrp=lo+bash@lo+b+c+csh@lo
E agrp=lo+bash@lo+b+csh@lo+c
E agrp=lo+bash@lo+c+b+csh@lo
E agrp=lo+bash@lo+c+csh@lo+b
E agrp=lo+bash@lo+csh@lo+c+b
E agrp=lo+c+b+bash@lo+csh@lo
E agrp=lo+c+b+csh@lo+bash@lo
E agrp=lo+c+bash@lo+b+csh@lo
E agrp=lo+c+bash@lo+csh@lo+b
E agrp=lo+c+csh@lo+b+bash@lo
E agrp=lo+c+csh@lo+bash@lo+b
E agrp=lo+csh@lo+b+c+bash@lo
E agrp=lo+csh@lo+bash@lo+b+c
E agrp=lo+csh@lo+bash@lo+c+b
E agrp=lo+csh@lo+c+b+bash@lo
E agrp=lo+csh@lo+c+bash@lo+b
E hgrp=b+bash@lo+lo
E hgrp=b+lo+bash@lo
E hgrp=bash@lo+b+lo
E hgrp=bash@lo+lo+b
E hgrp=c+csh@lo+lo
E hgrp=c+lo+csh@lo
E hgrp=csh@lo+c+lo
E hgrp=csh@lo+lo+c
E hgrp=lo+b+bash@lo
E hgrp=lo+bash@lo+b
E hgrp=lo+c+csh@lo
E hgrp=lo+csh@lo+c
_
)
}
export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | LC_ALL=C sort |
parallel --timeout 130 -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'

View file

@ -74,7 +74,14 @@ par_progress_text_max_jobs_to_run() {
par_hgrp_rpl() {
echo '### Implement {hgrp} replacement string'
parallel -k --plus --hgrp -S @b/bash@lo -S @c/csh@lo 'echo {sshlogin} {hgrp}' ::: b@b c@c
parallel -k --plus --hgrp -S @b/bash@lo -S @c/csh@lo 'echo {sshlogin} {hgrp}' ::: b@b c@c |
grep -v -F -f <(cat <<EOF
bash@lo bash@lo+b
bash@lo b+bash@lo
csh@lo c+csh@lo
csh@lo csh@lo+c
EOF
)
}
par_header_in_return() {

View file

@ -1719,9 +1719,9 @@ par_bash_environment_too_big() {
len_var_remote=$len_overhead+50+25
len_var_quote=$len_overhead+50+25-12-6
len_var_quote_remote=$len_overhead+50-25+12+6-3
len_fun=$len_overhead+100
len_fun=$len_overhead+110
len_fun_remote=$len_overhead+50+25
len_fun_quote=$len_overhead+100
len_fun_quote=$len_overhead+110
len_fun_quote_remote=$len_overhead+50+25
. `which env_parallel.bash`;

View file

@ -1,48 +1,6 @@
#!/bin/bash
export PARALLEL="--load 300%"
par_test_delimiter() {
echo "### Test : as delimiter. This can be confusing for uptime ie. --load";
parallel -k --load 300% -d : echo ::: a:b:c
}
par_squared() {
squared() {
i=$1
i2=$[i*i]
seq $i2 | parallel -j0 --load 300% -kX echo {} | wc
seq 1 ${i2}0000 |
parallel -kj20 --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum
}
export -f squared
seq 10 -1 2 | stdout parallel -j5 -k squared |
grep -Ev 'processes took|Consider adjusting -j'
}
par_load_blocks() {
echo "### Test if --load blocks. Bug.";
(seq 1 1000 |
parallel -kj2 --load 300% --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum
seq 1 1000 |
parallel -kj200 --load 300% --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum) 2>&1 |
grep -Ev 'processes took|Consider adjusting -j'
}
par_load_from_PARALLEL() {
echo "### Test reading load from PARALLEL"
# Ignore stderr due to 'Starting processes took > 2 sec'
seq 1 1000000 |
parallel -kj200 --recend "\n" --spreadstdin gzip -1 2>/dev/null |
zcat | sort -n | md5sum
seq 1 1000000 |
parallel -kj20 --recend "\n" --spreadstdin gzip -1 |
zcat | sort -n | md5sum
}
par_dummy() { true; }
export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | sort |

View file

@ -40,7 +40,7 @@ doit() {
$maxlen=-39+262144 - $envn - $envv - $onechar*5 - $envc*10;
print("Computed max len = $maxlen\n");
$bin='$binlen';
print("Actual:$bin Diff:",$bin-$maxlen," Vars: $onechar $envc $envn $envv\n");
print("Diff:",$bin-$maxlen," Actual:$bin Vars: $onechar $envc $envn $envv\n");
'
}
export -f doit

View file

@ -17,7 +17,8 @@ MAXTIME=50
RETRIES=3
# 11 too much for debian
MAXPROC=${maxproc:-9}
MAXINNERPROC=${maxinnerproc:-3}
# 3 is too much for freebsd
MAXINNERPROC=${maxinnerproc:-2}
export PARALLEL_SSH="ssh -oLogLevel=quiet"

View file

@ -108,12 +108,25 @@ par_delimiter line 3
par_delimiter_space ### Does space as delimiter work?
par_delimiter_space 1
par_delimiter_space done
par_dirnamereplace ### Test --dnr
par_dirnamereplace . a
par_dirnamereplace a a/b
par_dirnamereplace a/b a/b/c
par_dirnamereplace ### Test --dirnamereplace
par_dirnamereplace . a
par_dirnamereplace a a/b
par_dirnamereplace a/b a/b/c
par_disk_full ### Disk full
par_disk_full cat: write error: No space left on device
par_disk_full parallel: Error: Output is incomplete.
par_disk_full parallel: Error: Cannot append to buffer file in /mnt/ram.
par_disk_full parallel: Error: Is the disk full?
par_disk_full parallel: Error: Change $TMPDIR with --tmpdir or use --compress.
par_do_not_export_PARALLEL_ENV ### Do not export $PARALLEL_ENV to children
par_do_not_export_PARALLEL_ENV Should be 0
par_do_not_export_PARALLEL_ENV 1 0 1
par_do_not_export_PARALLEL_ENV Should give 60k and not overflow
par_do_not_export_PARALLEL_ENV 1 1 60001
par_dryrun_append_joblog --dry-run should not append to joblog
par_dryrun_append_joblog 1
par_dryrun_append_joblog 2
@ -139,6 +152,8 @@ par_empty_input_on_stdin This should give no output
par_empty_line ### Test bug: empty line for | sh with -k
par_empty_line a
par_empty_line b
par_empty_string_quote bug #37694: Empty string argument skipped when using --quote
par_empty_string_quote 3
par_exit_val ### Test bug #45619: "--halt" erroneous error exit code (should give 0)
par_exit_val 0
par_exit_val ### Test exit val - true
@ -476,6 +491,11 @@ par_maxproc 200% proc 7
par_maxproc 200% proc 8
par_maxproc 200% proc 9
par_maxproc 200% proc 10
par_negative_replacement ### Negative replacement strings
par_negative_replacement correct
par_negative_replacement correct
par_negative_replacement 2 + 4 = 2 + 4= 6
par_negative_replacement correct
par_newline_in_command Command with newline and positional replacement strings
par_newline_in_command O K
par_nice_locally ### Test --nice locally
@ -822,6 +842,17 @@ par_results c
par_results_arg_256 ### bug #42089: --results with arg > 256 chars (should be 1 char shorter)
par_results_arg_256 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
par_results_arg_256 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
par_resume_k ### --resume -k
par_resume_k job0id
par_resume_k job1id
par_resume_k job2id
par_resume_k job3id
par_resume_k job0id
par_resume_k job5id
par_resume_k try 2 = nothing
par_resume_k two extra
par_resume_k job6id
par_resume_k job7id
par_retries_replacement_string 11
par_retries_replacement_string 22
par_retries_replacement_string 22
@ -833,6 +864,13 @@ par_roundrobin_k 315464 315464 2097143
par_roundrobin_k 299592 299592 2097144
par_roundrobin_k 235148 235148 1646037
par_roundrobin_k 149796 149796 1048572
par_rpl_repeats ### Test {.} does not repeat more than {}
par_rpl_repeats a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
par_rpl_repeats a7.gifb7c7 a8.gifb8c8 a9.gifb9c9 a10.gifb10c10 a11.gifb11c11 a12.gifb12c12
par_rpl_repeats a13.gifb13c13 a14.gifb14c14 a15.gifb15c15
par_rpl_repeats a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7
par_rpl_repeats a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13
par_rpl_repeats a14.gif 15.gifb14 15c14 15
par_rpl_that_is_substring_of_longer_rpl ### --rpl % that is a substring of longer --rpl %D
par_rpl_that_is_substring_of_longer_rpl a.b/c.d/e.f=a.b/c.d/e.f
par_rpl_that_is_substring_of_longer_rpl a.b/c.d=a.b/c.d
@ -842,30 +880,6 @@ par_rpl_that_is_substring_of_longer_rpl a.b/c.d/e.f=a.b/c.d/e.f
par_sem_quote ### sem --quote should not add empty argument
par_sem_quote echo
par_sem_quote
par_show_limits ### Test --show-limits
par_show_limits Maximal size of command: 131xxx
par_show_limits Maximal used size of command: 131xxx
par_show_limits
par_show_limits Execution of will continue now, and it will try to read its input
par_show_limits and run commands; if this is not what you wanted to happen, please
par_show_limits press CTRL-D or CTRL-C
par_show_limits bar
par_show_limits car
par_show_limits far
par_show_limits Maximal size of command: 131xxx
par_show_limits Maximal used size of command: 100
par_show_limits
par_show_limits Execution of will continue now, and it will try to read its input
par_show_limits and run commands; if this is not what you wanted to happen, please
par_show_limits press CTRL-D or CTRL-C
par_show_limits bar car far
par_show_limits ### BUG: empty lines with --show-limit
par_show_limits Maximal size of command: 131xxx
par_show_limits Maximal used size of command: 131xxx
par_show_limits
par_show_limits Execution of will continue now, and it will try to read its input
par_show_limits and run commands; if this is not what you wanted to happen, please
par_show_limits press CTRL-D or CTRL-C
par_slow_pipe_regexp ### bug #53718: --pipe --regexp -N blocks
par_slow_pipe_regexp This should take a few ms, but took more than 2 hours
par_slow_pipe_regexp 980 981 5881
@ -1074,6 +1088,8 @@ par_tricolonplus 3 22 b cc
par_tricolonplus 3 23 c aa
par_tricolonplus 3 23 c bb
par_tricolonplus 3 23 c cc
par_trim_illegal_value ### Test of --trim illegal
par_trim_illegal_value parallel: Error: --trim must be one of: r l rl lr.
par_unquote_replacement_string ### Can part of the replacement string be unquoted using uq()?
par_unquote_replacement_string `echo foo`foo
par_verbose_t ### Test --verbose and -t

View file

@ -100,6 +100,24 @@ par_linebuffer_matters_compress ### (--linebuffer) --compress should give diffe
par_linebuffer_matters_compress OK: --linebuffer makes a difference
par_linebuffer_matters_compress_tag ### (--linebuffer) --compress --tag should give different output
par_linebuffer_matters_compress_tag OK: --linebuffer makes a difference
par_squared 100 100 292
par_squared 8a7095c1c23bfadc311fe6b16d950582 -
par_squared 81 81 234
par_squared c88e1757ddc619efd9ee507a7702b53c -
par_squared 64 64 183
par_squared f78c5b3d13146c60c9b586f51d05a4ae -
par_squared 49 49 138
par_squared 2af8be7306df18164a68e30e427217e0 -
par_squared 36 36 99
par_squared 5ee21398ecde0f3ea9b6093fbaf5a3c2 -
par_squared 25 25 66
par_squared 17e914b4a407dccd370c13173865deb1 -
par_squared 16 16 39
par_squared 6f5db0373227d2281dc26b1bf63b4027 -
par_squared 9 9 18
par_squared fa364205fcf6665c6f3e6cb868f65fd6 -
par_squared 4 4 8
par_squared 1c0f34fee7176dc367bead8f96cba6bc -
par_timeout ### test --timeout
par_timeout OK
par_timeout OK

View file

@ -24,6 +24,25 @@ par__pipepart_spawn 1:local / 2+ / 2+2+2+
par__pipepart_tee bug #45479: --pipe/--pipepart --tee
par__pipepart_tee --pipepart --tee
par__pipepart_tee 314572800
par_bin ### Test --bin
par_bin 2 2 4
par_bin 2 2 4
par_bin 3 3 6
par_bin 3 3 7
par_bin 2 4 8
par_bin 2 4 8
par_bin 3 6 13
par_bin 3 6 13
par_bin ### Test --bin with expression that gives 1..n
par_bin 0 0 0
par_bin 0 0 0
par_bin 5 10 21
par_bin 5 10 21
par_bin ### Test --bin with expression that gives 0..n-1
par_bin 0 0 0
par_bin 0 0 0
par_bin 5 10 21
par_bin 5 10 21
par_colsep ### Test of --colsep
par_colsep a b c
par_colsep a b c
@ -277,9 +296,10 @@ par_jobs_file sleep 5
par_jobs_file sleep 4
par_k ### Test -k
par_k parallel: Warning: Only enough file handles to run X jobs in parallel.
par_k parallel: Warning: Running 'parallel -jX -N X --pipe parallel -jX' or
par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
par_k parallel: Warning: or /proc/sys/fs/file-max may help.
par_k parallel: Warning: Try running 'parallel -jX -N X --pipe parallel -jX'
par_k parallel: Warning: or increasing 'ulimit -n' (try: ulimit -n `ulimit -Hn`)
par_k parallel: Warning: or increasing 'nofile' in /etc/security/limits.conf
par_k parallel: Warning: or increasing /proc/sys/fs/file-max
par_k begin
par_k 1
par_k 2
@ -492,6 +512,9 @@ par_kill_children_timeout 0 0 0
par_line_buffer ### --line-buffer
par_line_buffer 55 55 120
par_line_buffer These must diff: 1
par_load_blocks ### Test if --load blocks. Bug.
par_load_blocks 53d025127ae99ab79e8502aae2d9bea6 -
par_load_blocks 53d025127ae99ab79e8502aae2d9bea6 -
par_long_line_remote ### Deal with long command lines on remote servers
par_long_line_remote 2 6 30006
par_long_line_remote 3 50 250050
@ -711,8 +734,6 @@ par_pipe_line_buffer 200 400 1202
par_pipe_line_buffer These must diff: 1
par_pipe_line_buffer_compress ### --pipe --line-buffer --compress
par_pipe_line_buffer_compress 200 400 1202
par_results_compress 0
par_results_compress 1
par_results_csv bug #: --results csv
par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
@ -911,6 +932,97 @@ par_semaphore job3a 4
par_semaphore job2b 5
par_semaphore job3b 6
par_semaphore done
par_shard ### --shard
par_shard OK
par_shard OK
par_shard OK
par_shard OK
par_shard OK
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 2 c1
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 2 c2
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 2 c1
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 2 c2
par_shard *** broken
par_shard parallel: Error: --shard requires --jobs to be higher than the number of
par_shard parallel: Error: arguments. Increase --jobs.
par_shard parallel: Error: --shard requires --jobs to be higher than the number of
par_shard parallel: Error: arguments. Increase --jobs.
par_shellquote ### Test --shellquote in all shells
par_shellquote ash '
par_shellquote ash par_shellquote ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'

View file

@ -266,9 +266,10 @@ par_null_resume B
par_null_resume C
par_open_files_blocks bug #38439: "open files" with --files --pipe blocks after a while
par_open_files_blocks parallel: Warning: Only enough file handles to run 2 jobs in parallel.
par_open_files_blocks parallel: Warning: Running 'parallel -j0 -N 2 --pipe parallel -j0' or
par_open_files_blocks parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
par_open_files_blocks parallel: Warning: or /proc/sys/fs/file-max may help.
par_open_files_blocks parallel: Warning: Try running 'parallel -j0 -N 2 --pipe parallel -j0'
par_open_files_blocks parallel: Warning: or increasing 'ulimit -n' (try: ulimit -n `ulimit -Hn`)
par_open_files_blocks parallel: Warning: or increasing 'nofile' in /etc/security/limits.conf
par_open_files_blocks parallel: Warning: or increasing /proc/sys/fs/file-max
par_open_files_blocks 1 of 21
par_open_files_blocks 2 of 21
par_open_files_blocks 3 of 21
@ -327,6 +328,53 @@ par_pipe_unneeded_procs bug #34241: --pipe should not spawn unneeded processes -
par_pipe_unneeded_procs 2
par_pipe_unneeded_procs No .par should exist
par_pipe_unneeded_procs ls: cannot access '*.par': No such file or directory
par_pipepart_block ### --pipepart --block -# (# < 0)
par_pipepart_block 1
par_pipepart_block 2
par_pipepart_block 3
par_pipepart_block 4
par_pipepart_block 5
par_pipepart_block 6
par_pipepart_block 7
par_pipepart_block 8
par_pipepart_block 9
par_pipepart_block 10
par_pipepart_block 11
par_pipepart_block 12
par_pipepart_block 13
par_pipepart_block 14
par_pipepart_block 15
par_pipepart_block 16
par_pipepart_block 17
par_pipepart_block 18
par_pipepart_block 19
par_pipepart_block 20
par_pipepart_block 1-2
par_pipepart_block 2-2
par_pipepart_block 1-4
par_pipepart_block 2-4
par_pipepart_block 3-4
par_pipepart_block 4-4
par_pipepart_block 1-20
par_pipepart_block 2-20
par_pipepart_block 3-20
par_pipepart_block 4-20
par_pipepart_block 5-20
par_pipepart_block 6-20
par_pipepart_block 7-20
par_pipepart_block 8-20
par_pipepart_block 9-20
par_pipepart_block 10-20
par_pipepart_block 11-20
par_pipepart_block 12-20
par_pipepart_block 13-20
par_pipepart_block 14-20
par_pipepart_block 15-20
par_pipepart_block 16-20
par_pipepart_block 17-20
par_pipepart_block 18-20
par_pipepart_block 19-20
par_pipepart_block 20-20
par_profiles_with_space ### bug #42902: profiles containing arguments with space
par_profiles_with_space /bin/bash=/bin/bash
par_profiles_with_space echo '/bin/bash=/bin/bash'
@ -650,6 +698,8 @@ 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_results_compress 0
par_results_compress 1
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
@ -689,6 +739,9 @@ par_sql_colsep b B 1 11 b B 2 22 b B 3 33
par_sql_colsep b B 4 44 b B 5 55 b B 6 66
par_sql_colsep c C 1 11 c C 2 22 c C 3 33
par_sql_colsep c C 4 44 c C 5 55 c C 6 66
par_sqlandworker_uninstalled_dbd bug #56096: dbi-csv no such column
par_sqlandworker_uninstalled_dbd parallel: Error: CSV not supported. Are you missing a perl DBD::CSV module?
par_sqlandworker_uninstalled_dbd works
par_test_E ### Test -E
par_test_E 1 2 3
par_test_E 1 2 4
@ -876,5 +929,3 @@ par_trailing_space_line_continuation ### Test of trailing space continuation wit
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.

View file

@ -158,9 +158,10 @@ par_mem_leak ### test for mem leak
par_mem_leak no mem leak detected
par_outside_file_handle_limit ### Test Force outside the file handle limit, 2009-02-17 Gave fork error
par_outside_file_handle_limit parallel: Warning: Only enough file handles to run 999 jobs in parallel.
par_outside_file_handle_limit parallel: Warning: Running 'parallel -j0 -N 999 --pipe parallel -j0' or
par_outside_file_handle_limit parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
par_outside_file_handle_limit parallel: Warning: or /proc/sys/fs/file-max may help.
par_outside_file_handle_limit parallel: Warning: Try running 'parallel -j0 -N 999 --pipe parallel -j0'
par_outside_file_handle_limit parallel: Warning: or increasing 'ulimit -n' (try: ulimit -n `ulimit -Hn`)
par_outside_file_handle_limit parallel: Warning: or increasing 'nofile' in /etc/security/limits.conf
par_outside_file_handle_limit parallel: Warning: or increasing /proc/sys/fs/file-max
par_outside_file_handle_limit Start
par_outside_file_handle_limit end
par_over_4GB ### Test if we can deal with output > 4 GB

View file

@ -1,22 +1,3 @@
par_bin ### Test --bin
par_bin 2 2 4
par_bin 2 2 4
par_bin 3 3 6
par_bin 3 3 7
par_bin 2 4 8
par_bin 2 4 8
par_bin 3 6 13
par_bin 3 6 13
par_bin ### Test --bin with expression that gives 1..n
par_bin 0 0 0
par_bin 0 0 0
par_bin 5 10 21
par_bin 5 10 21
par_bin ### Test --bin with expression that gives 0..n-1
par_bin 0 0 0
par_bin 0 0 0
par_bin 5 10 21
par_bin 5 10 21
par_exit_code bug #52207: Exit status 0 when child job is killed, even with "now,fail=1"
par_exit_code # Ideally the command should return the same
par_exit_code # with or without parallel
@ -1449,6 +1430,9 @@ par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results
par_keeporder_roundrobin OK
par_load_from_PARALLEL ### Test reading load from PARALLEL
par_load_from_PARALLEL 8a7095c1c23bfadc311fe6b16d950582 -
par_load_from_PARALLEL 8a7095c1c23bfadc311fe6b16d950582 -
par_macron ### See if \257\256 \257<\257> is replaced correctly
par_macron ¯ -X ¯
par_macron ¯ -X ¯
@ -1656,97 +1640,6 @@ par_race_condition1 9
par_race_condition1 10
par_round_robin_blocks bug #49664: --round-robin does not complete
par_round_robin_blocks 8
par_shard ### --shard
par_shard OK
par_shard OK
par_shard OK
par_shard OK
par_shard OK
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 2 c1
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 2 c2
par_shard 10 1
par_shard 10 2
par_shard 10 3
par_shard 10 4
par_shard 10 5
par_shard 10 6
par_shard 10 7
par_shard 10 8
par_shard 10 9
par_shard 2 c1
par_shard 9 0
par_shard 9 1
par_shard 9 2
par_shard 9 3
par_shard 9 4
par_shard 9 5
par_shard 9 6
par_shard 9 7
par_shard 9 8
par_shard 9 9
par_shard 2 c2
par_shard *** broken
par_shard parallel: Error: --shard requires --jobs to be higher than the number of
par_shard parallel: Error: arguments. Increase --jobs.
par_shard parallel: Error: --shard requires --jobs to be higher than the number of
par_shard parallel: Error: arguments. Increase --jobs.
par_sighup ### Test SIGHUP
par_sighup 1
par_sighup 10

View file

@ -66,14 +66,6 @@ par_delay_human_readable c
par_delay_human_readable a
par_delay_human_readable b
par_delay_human_readable c
par_dirnamereplace ### Test --dnr
par_dirnamereplace . a
par_dirnamereplace a a/b
par_dirnamereplace a/b a/b/c
par_dirnamereplace ### Test --dirnamereplace
par_dirnamereplace . a
par_dirnamereplace a a/b
par_dirnamereplace a/b a/b/c
par_distribute_args_at_EOF ### Test distribute arguments at EOF to 2 jobslots
par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
@ -122,13 +114,6 @@ par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9
par_distribute_args_at_EOF ### Test -N is not broken by distribution - two lines
par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10
par_distribute_args_at_EOF 11 12 13 14 15 16 17 18 19
par_do_not_export_PARALLEL_ENV ### Do not export $PARALLEL_ENV to children
par_do_not_export_PARALLEL_ENV Should be 0
par_do_not_export_PARALLEL_ENV 1 0 1
par_do_not_export_PARALLEL_ENV Should give 60k and not overflow
par_do_not_export_PARALLEL_ENV 1 1 60001
par_empty_string_quote bug #37694: Empty string argument skipped when using --quote
par_empty_string_quote 3
par_eta ### Test of --eta
par_eta 16
par_eta ### Test of --eta with no jobs
@ -223,58 +208,6 @@ par_multiline_commands echo finish 4
par_multiline_commands parallel: Warning: Command lines contain newline. Forcing --null.
par_multiline_commands 4
par_multiline_commands finish 4
par_negative_replacement ### Negative replacement strings
par_negative_replacement correct
par_negative_replacement correct
par_negative_replacement 2 + 4 = 2 + 4= 6
par_negative_replacement correct
par_pipepart_block ### --pipepart --block -# (# < 0)
par_pipepart_block 1
par_pipepart_block 2
par_pipepart_block 3
par_pipepart_block 4
par_pipepart_block 5
par_pipepart_block 6
par_pipepart_block 7
par_pipepart_block 8
par_pipepart_block 9
par_pipepart_block 10
par_pipepart_block 11
par_pipepart_block 12
par_pipepart_block 13
par_pipepart_block 14
par_pipepart_block 15
par_pipepart_block 16
par_pipepart_block 17
par_pipepart_block 18
par_pipepart_block 19
par_pipepart_block 20
par_pipepart_block 1-2
par_pipepart_block 2-2
par_pipepart_block 1-4
par_pipepart_block 2-4
par_pipepart_block 3-4
par_pipepart_block 4-4
par_pipepart_block 1-20
par_pipepart_block 2-20
par_pipepart_block 3-20
par_pipepart_block 4-20
par_pipepart_block 5-20
par_pipepart_block 6-20
par_pipepart_block 7-20
par_pipepart_block 8-20
par_pipepart_block 9-20
par_pipepart_block 10-20
par_pipepart_block 11-20
par_pipepart_block 12-20
par_pipepart_block 13-20
par_pipepart_block 14-20
par_pipepart_block 15-20
par_pipepart_block 16-20
par_pipepart_block 17-20
par_pipepart_block 18-20
par_pipepart_block 19-20
par_pipepart_block 20-20
par_progress ### Test of --progress
par_progress 16
par_progress ### Test of --progress with no jobs
@ -320,31 +253,34 @@ par_replacement_slashslash /a/b /a/b/c.jpg
par_replacement_slashslash . ./a.jpg
par_replacement_slashslash ./a ./a/b.jpg
par_replacement_slashslash ./a/b ./a/b/c.jpg
par_resume_k ### --resume -k
par_resume_k job0id
par_resume_k job1id
par_resume_k job2id
par_resume_k job3id
par_resume_k job0id
par_resume_k job5id
par_resume_k try 2 = nothing
par_resume_k two extra
par_resume_k job6id
par_resume_k job7id
par_rpl_repeats ### Test {.} does not repeat more than {}
par_rpl_repeats a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
par_rpl_repeats a7.gifb7c7 a8.gifb8c8 a9.gifb9c9 a10.gifb10c10 a11.gifb11c11 a12.gifb12c12
par_rpl_repeats a13.gifb13c13 a14.gifb14c14 a15.gifb15c15
par_rpl_repeats a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7
par_rpl_repeats a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13
par_rpl_repeats a14.gif 15.gifb14 15c14 15
par_show_limits ### Test --show-limits
par_show_limits Maximal size of command: 131xxx
par_show_limits Maximal used size of command: 131xxx
par_show_limits
par_show_limits Execution of will continue now, and it will try to read its input
par_show_limits and run commands; if this is not what you wanted to happen, please
par_show_limits press CTRL-D or CTRL-C
par_show_limits bar
par_show_limits car
par_show_limits far
par_show_limits Maximal size of command: 131xxx
par_show_limits Maximal used size of command: 100
par_show_limits
par_show_limits Execution of will continue now, and it will try to read its input
par_show_limits and run commands; if this is not what you wanted to happen, please
par_show_limits press CTRL-D or CTRL-C
par_show_limits bar car far
par_show_limits ### BUG: empty lines with --show-limit
par_show_limits Maximal size of command: 131xxx
par_show_limits Maximal used size of command: 131xxx
par_show_limits
par_show_limits Execution of will continue now, and it will try to read its input
par_show_limits and run commands; if this is not what you wanted to happen, please
par_show_limits press CTRL-D or CTRL-C
par_slow_args_generation ### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834
par_slow_args_generation 1
par_slow_args_generation 2
par_slow_args_generation 3
par_sqlandworker_uninstalled_dbd bug #56096: dbi-csv no such column
par_sqlandworker_uninstalled_dbd parallel: Error: CSV not supported. Are you missing a perl DBD::CSV module?
par_sqlandworker_uninstalled_dbd works
par_sqlworker_hostname bug #50901: --sqlworker should use hostname in the joblog instead of :
par_sqlworker_hostname 1
par_sqlworker_hostname 2
@ -415,6 +351,10 @@ par_test_X_with_multiple_source b-b f-f
par_test_X_with_multiple_source c-c d-d
par_test_X_with_multiple_source c-c e-e
par_test_X_with_multiple_source c-c f-f
par_test_delimiter ### Test : as delimiter. This can be confusing for uptime ie. --load
par_test_delimiter a
par_test_delimiter b
par_test_delimiter c
par_totaljob_repl {##} bug #45841: Replacement string for total no of jobs
par_totaljob_repl 10
par_totaljob_repl 10

View file

@ -16,6 +16,7 @@ par_filename_colon remote-:.:
par_filename_colon content-of-:
par_files_nonall ### bug #40002: --files and --nonall seem not to work together:
par_files_nonall 1
par_hgrp_agrp ### Test --hgrp {hgrp} {agrp}
par_joblog_nonall ### bug #40001: --joblog and --nonall seem not to work together:
par_joblog_nonall 3
par_onall_transfer ### bug #46519: --onall ignores --transfer

View file

@ -4,8 +4,6 @@ par_export_functions_csh OK
par_header_in_return ### bug #45907: --header : + --return {header}
par_header_in_return returnfile45907
par_hgrp_rpl ### Implement {hgrp} replacement string
par_hgrp_rpl bash@lo b
par_hgrp_rpl csh@lo c
par_hostgroup_only_on_args ### Auto add hostgroup if given on on argument
par_hostgroup_only_on_args parallel: Warning: Adding hostgroups: sh@lo
par_hostgroup_only_on_args sh

View file

@ -2110,10 +2110,37 @@ 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_remote
par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc
par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /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_remote
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_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /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: /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_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

View file

@ -1,28 +0,0 @@
par_load_blocks ### Test if --load blocks. Bug.
par_load_blocks 53d025127ae99ab79e8502aae2d9bea6 -
par_load_blocks 53d025127ae99ab79e8502aae2d9bea6 -
par_load_from_PARALLEL ### Test reading load from PARALLEL
par_load_from_PARALLEL 8a7095c1c23bfadc311fe6b16d950582 -
par_load_from_PARALLEL 8a7095c1c23bfadc311fe6b16d950582 -
par_squared 100 100 292
par_squared 8a7095c1c23bfadc311fe6b16d950582 -
par_squared 81 81 234
par_squared c88e1757ddc619efd9ee507a7702b53c -
par_squared 64 64 183
par_squared f78c5b3d13146c60c9b586f51d05a4ae -
par_squared 49 49 138
par_squared 2af8be7306df18164a68e30e427217e0 -
par_squared 36 36 99
par_squared 5ee21398ecde0f3ea9b6093fbaf5a3c2 -
par_squared 25 25 66
par_squared 17e914b4a407dccd370c13173865deb1 -
par_squared 16 16 39
par_squared 6f5db0373227d2281dc26b1bf63b4027 -
par_squared 9 9 18
par_squared fa364205fcf6665c6f3e6cb868f65fd6 -
par_squared 4 4 8
par_squared 1c0f34fee7176dc367bead8f96cba6bc -
par_test_delimiter ### Test : as delimiter. This can be confusing for uptime ie. --load
par_test_delimiter a
par_test_delimiter b
par_test_delimiter c

View file

@ -1374,7 +1374,7 @@ This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
parallel --version
GNU parallel VERSION
Copyright (C) 2007-2020 Ole Tange, http://ole.tange.dk and Free Software
Copyright (C) 2007-2021 Ole Tange, http://ole.tange.dk and Free Software
Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
@ -1424,4 +1424,4 @@ C
echo A
echo B
echo C
8
7