parallel: Fixed bug #58802. Now passes testsuite.

This commit is contained in:
Ole Tange 2020-08-07 22:20:30 +02:00
parent d8f99bf85f
commit 79b56269bb
55 changed files with 998 additions and 637 deletions

21
NEWS
View file

@ -42,21 +42,28 @@ New in this release:
News about GNU Parallel:
* GNU Parallel is used at NERSC: https://www.nersc.gov/assets/Uploads/08-Workflows-20200616.pdf
* GNU Parallel is used at NERSC:
https://www.nersc.gov/assets/Uploads/08-Workflows-20200616.pdf
* Resumable batch jobs with GNU Parallel https://igor.io/parallel/
* Lab Meeting technical talk https://www.slideshare.net/hoffmanlab/gnu-parallel-194030490
* Lab Meeting technical talk
https://www.slideshare.net/hoffmanlab/gnu-parallel-194030490
* Open Sky Software Website Credits https://www.openskysoftware.com/site-credits.htm
* Open Sky Software Website Credits
https://www.openskysoftware.com/site-credits.htm
* Speed up your Python Scripts using Ubuntu and GNU Parallel https://ecce.esri.ca/wpecce/2019/12/24/speed-up-your-python-scripts-using-ubuntu-and-gnu-parallel/
* Speed up your Python Scripts using Ubuntu and GNU Parallel
https://ecce.esri.ca/wpecce/2019/12/24/speed-up-your-python-scripts-using-ubuntu-and-gnu-parallel/
* Indispensable command-line tools https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
* Indispensable command-line tools
https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
* GNU Parallel for simulations http://pdebuyl.be/blog/2020/gnu-parallel-for-simulations.html
* GNU Parallel for simulations
http://pdebuyl.be/blog/2020/gnu-parallel-for-simulations.html
* Introduction to GNU parallel https://bioinformaticsworkbook.org/Appendix/GNUparallel/GNU_parallel_examples.html
* Introduction to GNU parallel
https://bioinformaticsworkbook.org/Appendix/GNUparallel/GNU_parallel_examples.html
20200522

4
README
View file

@ -125,6 +125,10 @@ publication please cite:
Tange, O. (2020, July 22). GNU Parallel 20200722 ('Privacy Shield').
Zenodo. https://doi.org/10.5281/zenodo.3956817
Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,
2016, 2017, 2018, 2019, 2020 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.
= New versions =

View file

@ -1,14 +1,15 @@
Quote of the month:
Gnu parallel is also awesome, fwiw.
-- Rogan Dawes @RoganDawes@twitter
Gnu parallel is also awesome, fwiw.
-- Rogan Dawes @RoganDawes@twitter
I get a weird sense of satisfaction every single time I see the lovely logo of #GNU Parallel (plus, what an underrated piece of great software!)
-- Emre Sevinç @EmreSevinc@twitter
I get a weird sense of satisfaction every single time I see the
lovely logo of #GNU Parallel (plus, what an underrated piece of
great software!)
-- Emre Sevinç @EmreSevinc@twitter
I have gotten a *ton* of mileage out of jq, awk, and GNU parallel,
I have gotten a *ton* of mileage out of jq, awk, and GNU parallel,
even at multi-GB sizes.
-- Eric Wolak @ericthewolak@twitter
@ -31,9 +32,6 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
GNU Parallel is awesome
-- Gaurav Jain @gauravjain49@twitter
With multicore systems everywhere GNU Parallel is a must have tool.
-- Neil H. Watson @neil_h_watson@twitter
My new favourite command line tool is GNU Parallel. After knowing it for a while I just recently came back to it for a refactor of a script and now I've changed like 4 different huge scripts into tiny parallel scripts that do their job literally 3 to 10 times faster and just [mind blown]
-- Izzy @angry_izzy@twitter
@ -70,6 +68,9 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
=== Used ===
With multicore systems everywhere GNU Parallel is a must have tool.
-- Neil H. Watson @neil_h_watson@twitter
Who needs spark when GNU Parallel exists
-- MatthijsB @MatthijsBrs@twitter

View file

@ -24,7 +24,7 @@ https://zenodo.org/deposit/new
(*) Software
(Reserve DOI)
GNU Parallel 20200622 ('Floyd')
GNU Parallel 20xxxx22 ('Xxxx')
Ole Tange
https://orcid.org/0000-0002-6345-1437
Description
@ -69,7 +69,7 @@ export YYYYMMDD
cd ~/privat/parallel/packager/obs
find home:tange/parallel/* -type f |
grep -v parallel.spec |
grep -Ev '(PKGBUILD|parallel.spec)' |
parallel -j1 'osc rm {} || rm {}'
# This should not create new files
osc up home:tange/parallel/
@ -189,9 +189,9 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20200722 ('Privacy Shield') released <<[stable]>>
Subject: GNU Parallel 20200822 ('Beirut/Juan Carlos') released <<[stable]>>
GNU Parallel 20200622 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
GNU Parallel 20200822 ('') <<[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.>>

View file

@ -5,7 +5,10 @@ all:
cp ../debian/parallel_*.dsc ../debian/parallel_*.tar.gz home\:tange/parallel/
cp `ls ../../parallel-2*.tar.bz2|grep -v latest|tail -n1` home\:tange/parallel/
perl -i -pe '/Version:/ and s/20\d\d\d\d\d\d/$$ENV{YYYYMMDD}/g' home:tange/parallel/parallel.spec
# Update sha256sum
cd home:tange/parallel && s=`sha256sum parallel-*.tar.bz2|field 1` perl -i -pe 's/(sha256sums=..)\w+(..)/$$1$$ENV{s}$$2/' PKGBUILD
# Update version
cd home:tange/parallel && perl -i -pe 's/pkgver=.*/pkgver=$$ENV{YYYYMMDD}/' PKGBUILD
cd home\:tange/parallel/ && osc diff
cd home\:tange/parallel/ && osc up
cd home\:tange/parallel/ && parallel osc add ::: *.spec *.dsc *.tar.gz *.tar.bz2 && echo Src added OK || true

View file

@ -1,10 +1,7 @@
<directory name="parallel" rev="288" vrev="1" srcmd5="491309d25a3aab963ac0e24d8eaa9d06">
<entry name="PKGBUILD" md5="983b2b5948aeba85c5cd4e1ded5bc76a" size="1442" mtime="1595451728" />
<entry name="parallel-20200622.tar.bz2" md5="d23e078dda56fa4a601cce888bf550e0" size="2102861" mtime="1595029269" />
<entry name="parallel-20200622.tar.bz2.sig" md5="a579b17a046ebb5684a8b0b4adab6296" size="2080" mtime="1594940468" />
<entry name="parallel-20200722.tar.bz2" md5="ed6aaa413182afd091b08bf922bb986b" size="2101125" mtime="1595451728" />
<directory name="parallel" rev="289" vrev="2" srcmd5="f2fd10de667323622518e3653fe1a05b">
<entry name="PKGBUILD" md5="e6ac64e8d3065f4be850b3568268b42b" size="936" mtime="1595494017" />
<entry name="parallel-20200722.tar.bz2" md5="09c6b0ad719f1beae5622d2e56a1f831" size="2102288" mtime="1595494018" />
<entry name="parallel.spec" md5="e2eb4d93448e26b8ebefb7973d998d14" size="4876" mtime="1595451728" />
<entry name="parallel_20200622.tar.gz" md5="e768cdd4a388538dc4ecdf2175a8f3d7" size="2290573" mtime="1594972044" />
<entry name="parallel_20200722.dsc" md5="85208bd8f159a9e475dc21a3adaa082c" size="556" mtime="1595451729" />
<entry name="parallel_20200722.tar.gz" md5="2a965430557424f6778592bbd1660fd5" size="2294662" mtime="1595451729" />
</directory>

View file

@ -23,7 +23,7 @@
use strict;
use Getopt::Long;
$Global::progname="niceload";
$Global::version = 20200722;
$Global::version = 20200723;
Getopt::Long::Configure("bundling","require_order");
get_options_from_array(\@ARGV) || die_usage();
if($opt::version) {

View file

@ -1618,6 +1618,7 @@ sub options_hash() {
"halt-on-error|halt=s" => \$opt::halt,
"limit=s" => \$opt::limit,
"memfree=s" => \$opt::memfree,
"memsuspend=s" => \$opt::memsuspend,
"retries=s" => \$opt::retries,
"timeout=s" => \$opt::timeout,
"termseq|term-seq=s" => \$opt::termseq,
@ -1838,6 +1839,8 @@ sub parse_options(@) {
warning("--blocksize >= 64K causes problems on Cygwin.");
}
$opt::memfree = multiply_binary_prefix($opt::memfree);
$opt::memsuspend = multiply_binary_prefix($opt::memsuspend);
$Global::memlimit = $opt::memsuspend + $opt::memfree;
check_invalid_option_combinations();
if((defined $opt::fifo or defined $opt::cat)
and not $opt::pipepart) {
@ -2157,7 +2160,7 @@ sub check_invalid_option_combinations() {
sub init_globals() {
# Defaults:
$Global::version = 20200722;
$Global::version = 20200623;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@ -3343,7 +3346,9 @@ sub init_run_jobs() {
# Over limit
next;
}
if($opt::memfree and $sshlogin->memfree() < $opt::memfree) {
if(($opt::memfree or $opt::memsuspend)
and
$sshlogin->memfree() < $Global::memlimit) {
# The server has not enough mem free
::debug("mem", "Not starting job: not enough mem\n");
next;
@ -3835,7 +3840,8 @@ sub progress() {
$last_column_time = time;
$columns = $ENV{'COLUMNS'};
if(not $columns) {
my $stty = ::qqx("stty -a </dev/tty");
# && true is to force spawning a shell and not just exec'ing
my $stty = qx{stty -a </dev/tty 2>/dev/null && true};
# FreeBSD/OpenBSD/NetBSD/Dragonfly/MirOS
# MacOSX/IRIX/AIX/Tru64
$stty =~ /(\d+) columns/ and do { $columns = $1; };
@ -3847,7 +3853,8 @@ sub progress() {
$stty =~ /rows=\d+,(\d+)/ and do { $columns = $1; };
}
if(not $columns) {
my $resize = ::qqx("resize");
# && true is to force spawning a shell and not just exec'ing
my $resize = qx{resize 2>/dev/null && true};
$resize =~ /COLUMNS=(\d+);/ and do { $columns = $1; };
}
$columns ||= 80;
@ -4519,6 +4526,7 @@ sub onall($@) {
my $options =
join(" ",
((defined $opt::memfree) ? "--memfree ".$opt::memfree : ""),
((defined $opt::memsuspend) ? "--memfree ".$opt::memsuspend : ""),
((defined $opt::D) ? "-D $opt::D" : ""),
((defined $opt::group) ? "-g" : ""),
((defined $opt::jobs) ? "-P $opt::jobs" : ""),
@ -4800,8 +4808,12 @@ sub kill_sleep_seq(@) {
# Convert pids to process groups ($processgroup = -$pid)
my @pgrps = map { -$_ } @_;
my @term_seq = split/,/,$opt::termseq;
if(not @term_seq) {
@term_seq = ("TERM",200,"TERM",100,"TERM",50,"KILL",25);
if($opt::memsuspend) {
@term_seq = ("STOP",1);
} else {
if(not @term_seq) {
@term_seq = ("TERM",200,"TERM",100,"TERM",50,"KILL",25);
}
}
while(@term_seq) {
@pgrps = kill_sleep(shift @term_seq, shift @term_seq, @pgrps);
@ -4907,8 +4919,8 @@ sub usage() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
" Tange, O. (2020, July 22). GNU Parallel 20200722 ('Privacy Shield').",
" Zenodo. https://doi.org/10.5281/zenodo.3956817",
" Tange, O. (2020, June 22). GNU Parallel 20200622 ('Floyd').",
" Zenodo. https://doi.org/10.5281/zenodo.3903853",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
@ -4938,8 +4950,8 @@ sub citation_notice() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
" Tange, O. (2020, July 22). GNU Parallel 20200722 ('Privacy Shield').",
" Zenodo. https://doi.org/10.5281/zenodo.3956817",
" Tange, O. (2020, June 22). GNU Parallel 20200622 ('Floyd').",
" Zenodo. https://doi.org/10.5281/zenodo.3903853",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@ -5052,20 +5064,20 @@ sub citation() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
"\@software{tange_2020_3956817,",
"\@software{tange_2020_3903853,",
" author = {Tange, Ole},",
" title = {GNU Parallel 20200722 ('Privacy Shield')},",
" month = Jul,",
" title = {GNU Parallel 20200622 ('Floyd')},",
" month = Jun,",
" year = 2020,",
" note = {{GNU Parallel is a general parallelizer to run",
" multiple serial command line programs in parallel",
" without changing them.}},",
" publisher = {Zenodo},",
" doi = {10.5281/zenodo.3956817},",
" url = {https://doi.org/10.5281/zenodo.3956817}",
" doi = {10.5281/zenodo.3903853},",
" url = {https://doi.org/10.5281/zenodo.3903853}",
"}",
"",
"(Feel free to use \\nocite{tange_2020_3956817})",
"(Feel free to use \\nocite{tange_2020_3903853})",
"",
# Before changing this line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice and
@ -5327,7 +5339,7 @@ sub qqx(@) {
# ssh with ssh-agent needs PATH SSH_AUTH_SOCK SSH_AGENT_PID
# ssh with Kerberos needs KRB5CCNAME
# tmux needs LC_CTYPE
# lsh needs LOGNAME HOME
# lsh needs HOME LOGNAME
my @keep = qw(PATH SSH_AUTH_SOCK SSH_AGENT_PID KRB5CCNAME LC_CTYPE HOME LOGNAME);
@env{@keep} = @ENV{@keep};
local %ENV;
@ -5336,10 +5348,29 @@ sub qqx(@) {
# && true is to force spawning a shell and not just exec'ing
return qx{ @_ && true };
} else {
local *STDERR;
open(STDERR, ">", "/dev/null");
# && true is to force spawning a shell and not just exec'ing
return qx{ @_ && true };
# CygWin does not respect 2>/dev/null
# so we do that by hand
# This trick does not work:
# https://stackoverflow.com/questions/13833088/why-doesnt-local-work-on-stderr-and-stdout
# local *STDERR;
# open(STDERR, ">", "/dev/null");
open(local *CHILD_STDIN, '<', '/dev/null') or die $!;
open(local *CHILD_STDERR, '>', '/dev/null') or die $!;
my $out;
# eval is needed if open3 fails (e.g. command line too long)
eval {
my $pid = open3(
'<&CHILD_STDIN',
$out,
'>&CHILD_STDERR',
# && true is to force spawning a shell and not just exec'ing
"@_ && true");
my @arr = <$out>;
close $out;
# Make sure $? is set
waitpid($pid, 0);
return wantarray ? @arr : join "",@arr;
}
}
}
@ -5846,7 +5877,10 @@ sub reap_usleep() {
$Global::timeoutq->process_timeouts();
}
if($opt::memfree) {
kill_youngster_if_not_enough_mem();
kill_youngster_if_not_enough_mem($opt::memfree*0.5);
}
if($opt::memsuspend) {
kill_youngster_if_not_enough_mem($opt::memsuspend*0.5);
}
if($opt::limit) {
kill_youngest_if_over_limit();
@ -5917,6 +5951,7 @@ sub kill_youngster_if_not_enough_mem() {
# Put the child back in the queue.
# Uses:
# %Global::running
my $limit = shift;
my %jobs_of;
my @sshlogins;
@ -5928,12 +5963,12 @@ sub kill_youngster_if_not_enough_mem() {
}
for my $sshlogin (@sshlogins) {
for my $job (sort { $b->seq() <=> $a->seq() } @{$jobs_of{$sshlogin}}) {
if($sshlogin->memfree() < $opt::memfree * 0.5) {
if($sshlogin->memfree() < $limit) {
::debug("mem","\n",map { $_->seq()." " }
(sort { $b->seq() <=> $a->seq() }
@{$jobs_of{$sshlogin}}));
::debug("mem","\n", $job->seq(), "killed ",
$sshlogin->memfree()," < ",$opt::memfree * 0.5);
$sshlogin->memfree()," < ",$limit);
$job->kill();
$sshlogin->memfree_recompute();
} else {
@ -5941,7 +5976,7 @@ sub kill_youngster_if_not_enough_mem() {
}
}
::debug("mem","Free mem OK ",
$sshlogin->memfree()," > ",$opt::memfree * 0.5);
$sshlogin->memfree()," > ",$limit);
}
}
@ -8498,6 +8533,21 @@ sub kill($) {
my $self = shift;
$self->set_exitstatus(-1);
::kill_sleep_seq($self->pid());
# push job onto start stack
if($opt::memsuspend) {
$self->{'suspended'} = 1;
$Global::JobQueue->{'commandlinequeue'}->unget($self);
}
}
sub set_suspended($$) {
my $self = shift;
$self->{'suspended'} = shift;
}
sub suspended($) {
my $self = shift;
return $self->{'suspended'};
}
sub failed($) {
@ -9502,6 +9552,11 @@ sub start($) {
}
my $job = shift;
if($job->suspended()) {
# Job is kill -STOP'ped: Restart it.
kill "CONT", $job->pid();
return $job;
}
# Get the shell command to be executed (possibly with ssh infront).
my $command = $job->wrapped();
my $pid;

View file

@ -481,8 +481,8 @@ completed, estimated seconds left, and number of jobs started.
It is compatible with B<zenity>:
seq 1000 | parallel -j30 --bar '(echo {};sleep 0.1)' \
2> >(zenity --progress --auto-kill) | wc
2> >(perl -pe 'BEGIN{$/="\r";$|=1};s/\r/\n/g' |
zenity --progress --auto-kill) | wc
=item B<--basefile> I<file>

View file

@ -1489,7 +1489,8 @@ A progress bar can be shown with B<--bar>:
And a graphic bar can be shown with B<--bar> and B<zenity>:
seq 1000 | parallel -j10 --bar '(echo -n {};sleep 0.1)' \
2> >(zenity --progress --auto-kill --auto-close)
2> >(perl -pe 'BEGIN{$/="\r";$|=1};s/\r/\n/g' |
zenity --progress --auto-kill --auto-close)
A logfile of the jobs completed so far can be generated with B<--joblog>:

View file

@ -574,7 +574,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err);
sub parse_options {
$Global::version = 20200722;
$Global::version = 20200723;
$Global::progname = 'sql';
# This must be done first as this may exec myself

View file

@ -65,7 +65,7 @@ portable:
time bash Portable.sh
### Prerequisites
prereqlocal: installparallel
prereqlocal: installparallel startvm
tcsh -c echo tcsh installed || (echo tcsh is required for testsuite; /bin/false)
seq 1 2 >/dev/null || (echo seq is required for testsuite; /bin/false)
stdout echo || (echo stdout is required for testsuite; /bin/false)
@ -81,26 +81,21 @@ prereqlocal: installparallel
which lsh || (echo lsh is required for testsuite; /bin/false)
timeout 20 ssh sh@lo true || (echo ssh sh@lo is required for testsuite; /bin/false)
timeout 5 ssh csh@lo true || (echo ssh csh@lo is required for testsuite; /bin/false)
parallel -j1 ssh-keygen -R parallel-server{} ::: 1 2 3 || true
parallel 'ssh vagrant@parallel-server{} mkdir -p bin; scp `which parallel` vagrant@parallel-server{}:bin/' ::: 1 2 3 4
prereqremote: installparallel startvm
parallel -j0 --timeout 10 --tag ssh parallel@parallel-server{} parallel --minversion 20121021 ::: 1 2 || (echo parallel on remote required for testsuite; /bin/true)
parallel -j0 --timeout 10 --tag ssh vagrant@parallel-server{} parallel --minversion 20121021 ::: 1 2 || (echo parallel on remote required for testsuite; /bin/true)
startvm:
# Make sure we can reach the virtual machines
#sudo ifconfig wlp13s0:0 192.168.1.72 || sudo ifconfig wlan0:0 192.168.1.72
sudo ifconfig enp14s0:0 192.168.1.72 || sudo ifconfig eth0:0 192.168.1.72
# If they are already running: Don't fail
VBoxManage startvm CentOS3-root:centos3\ Clone2 || VBoxManage controlvm CentOS3-root:centos3\ Clone2 resume || true
VBoxManage startvm RedHat9-root:redhat9 || VBoxManage controlvm RedHat9-root:redhat9 resume || true
parallel 'ping {} | read' ::: redhat9.tange.dk centos3.tange.dk
parallel 'cd vagrant/generic/{} && vagrant up' ::: centos8 freebsd11 freebsd12 rhel8
stopvm:
# || true - because this should not fail if the VM is not running
VBoxManage controlvm CentOS3-root:centos3 savestate || true
VBoxManage controlvm RedHat9-root:redhat9 savestate || true
VBoxManage controlvm OracleXE savestate || true
parallel 'cd vagrant/generic/{} && vagrant suspend' ::: centos8 freebsd11 freebsd12 rhel8
startdb:
true 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
VBoxManage startvm OracleXE || true

View file

@ -3,11 +3,15 @@
echo "### These tests requires VirtualBox running with the following images"
echo `whoami`"@freebsd7"
VBoxManage startvm FreeBSD71 >/dev/null 2>&1
ping -c 1 freebsd7.tange.dk >/dev/null 2>&1
SERVER1=freebsd11
SSHUSER1=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
ssh freebsd7.tange.dk touch .parallel/will-cite
scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} freebsd7.tange.dk:bin/
#VBoxManage startvm FreeBSD71 >/dev/null 2>&1
#ping -c 1 freebsd7.tange.dk >/dev/null 2>&1
ssh $SSHLOGIN1 touch .parallel/will-cite
scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} $SSHLOGIN1:bin/
. `which env_parallel.bash`
env_parallel --session
@ -49,13 +53,13 @@ par_shebang() {
chmod 755 ./shebang; ./shebang
echo 'bug #40134: FreeBSD: --shebang(-wrap) not working'
(echo '#!/usr/bin/env -S parallel --shebang-wrap /usr/bin/perl :::';
(echo '#!/usr/bin/env -S parallel --shebang-wrap /usr/local/bin/perl :::';
echo 'print @ARGV,"\n";') > shebang-wrap
chmod 755 ./shebang-wrap
./shebang-wrap wrap works | sort -r
echo 'bug #40134: FreeBSD: --shebang(-wrap) with options not working'
(echo '#!/usr/bin/env -S parallel --shebang-wrap -v -k -j 0 /usr/bin/perl -w :::'
(echo '#!/usr/bin/env -S parallel --shebang-wrap -v -k -j 0 /usr/local/bin/perl -w :::'
echo 'print @ARGV,"\n";') > shebang-wrap-opt;
chmod 755 ./shebang-wrap-opt
./shebang-wrap-opt wrap works with options
@ -108,8 +112,8 @@ unset TMPDIR
# We can safely ignore those.
PARALLEL_SHELL=sh env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \
-S freebsd7.tange.dk --tag '{} 2>&1' \
-S $SSHLOGIN1 --tag '{} 2>&1' \
::: $(compgen -A function | grep par_ | sort) \
2> >(grep -Ev 'shopt: not found|declare: not found')
VBoxManage controlvm FreeBSD71 savestate
#VBoxManage controlvm FreeBSD71 savestate

View file

@ -16,7 +16,7 @@ par_bin() {
paste <(seq 10) <(seq 10 -1 1) |
parallel --pipe --colsep '\t' --bin '2 $_%=2' -j4 wc | sort
# Fails - blocks!
# paste <(seq 10000000) <(seq 10000000 -1 1) | parallel --pipe --colsep '\t' --bin 2 wc
# paste <(seq 10) <(seq 10 -1 1) | parallel --pipe --colsep '\t' --bin 2 wc
}
par_nice() {
@ -103,10 +103,10 @@ par_colsep() {
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'
@ -276,66 +276,77 @@ par_END() {
par_xargs_compat() {
echo xargs compatibility
a_b-c() { echo a_b; echo c; }
a_b_-c-d() { echo a_b' '; echo c; echo d; }
a_b_-c-d-e() { echo a_b' '; echo c; echo d; echo e; }
one_mb_line() { perl -e 'print "z"x1000000'; }
stdsort() { "$@" | LC_ALL=C sort; }
echo '### Test -L -l and --max-lines'
(echo a_b;echo c) | parallel -km -L2 echo
(echo a_b;echo c) | parallel -k -L2 echo
(echo a_b;echo c) | xargs -L2 echo
a_b-c | parallel -km -L2 echo
a_b-c | parallel -k -L2 echo
a_b-c | xargs -L2 echo
echo '### xargs -L1 echo'
(echo a_b;echo c) | parallel -km -L1 echo
(echo a_b;echo c) | parallel -k -L1 echo
(echo a_b;echo c) | xargs -L1 echo
a_b-c | parallel -km -L1 echo
a_b-c | parallel -k -L1 echo
a_b-c | xargs -L1 echo
echo 'Lines ending in space should continue on next line'
echo '### xargs -L1 echo'
(echo a_b' ';echo c;echo d) | parallel -km -L1 echo
(echo a_b' ';echo c;echo d) | parallel -k -L1 echo
(echo a_b' ';echo c;echo d) | xargs -L1 echo
a_b_-c-d | parallel -km -L1 echo
a_b_-c-d | parallel -k -L1 echo
a_b_-c-d | xargs -L1 echo
echo '### xargs -L2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -L2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo
a_b_-c-d-e | parallel -km -L2 echo
a_b_-c-d-e | parallel -k -L2 echo
a_b_-c-d-e | xargs -L2 echo
echo '### xargs -l echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | parallel -l -k echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | xargs -l echo
a_b_-c-d-e | parallel -l -km echo # This behaves wrong
a_b_-c-d-e | parallel -l -k echo # This behaves wrong
a_b_-c-d-e | xargs -l echo
echo '### xargs -l2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo
a_b_-c-d-e | parallel -km -l2 echo
a_b_-c-d-e | parallel -k -l2 echo
a_b_-c-d-e | xargs -l2 echo
echo '### xargs -l1 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l1 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -l1 echo
a_b_-c-d-e | parallel -km -l1 echo
a_b_-c-d-e | parallel -k -l1 echo
a_b_-c-d-e | xargs -l1 echo
echo '### xargs --max-lines=2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k --max-lines 2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo
a_b_-c-d-e | parallel -km --max-lines 2 echo
a_b_-c-d-e | parallel -k --max-lines 2 echo
a_b_-c-d-e | xargs --max-lines=2 echo
echo '### xargs --max-lines echo'
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -k echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines echo
a_b_-c-d-e | parallel --max-lines -km echo # This behaves wrong
a_b_-c-d-e | parallel --max-lines -k echo # This behaves wrong
a_b_-c-d-e | xargs --max-lines echo
echo '### test too long args'
perl -e 'print "z"x1000000' | parallel echo 2>&1
perl -e 'print "z"x1000000' | xargs echo 2>&1
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort parallel -j1 -km -s 10 echo
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort xargs -s 10 echo
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdsort parallel -j1 -kX -s 10 echo
one_mb_line | parallel echo 2>&1
one_mb_line | xargs echo 2>&1
(seq 1 10; one_mb_line; seq 12 15) | stdsort parallel -j1 -km -s 10 echo
(seq 1 10; one_mb_line; seq 12 15) | stdsort xargs -s 10 echo
(seq 1 10; one_mb_line; seq 12 15) | stdsort parallel -j1 -kX -s 10 echo
echo '### Test -x'
echo '-km'
(seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo
echo '-kX'
(seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -kX -s 10 -x echo
echo '-x'
(seq 1 10; echo 12345; seq 12 15) | stdsort xargs -s 10 -x echo
echo '-km -x'
(seq 1 10; echo 1234; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo
echo '-kX -x'
(seq 1 10; echo 1234; seq 12 15) | stdsort parallel -j1 -kX -s 10 -x echo
echo '-x'
(seq 1 10; echo 1234; seq 12 15) | stdsort xargs -s 10 -x echo
}
@ -534,6 +545,7 @@ par_retries_all_fail() {
par_sockets_cores_threads() {
echo '### Test --number-of-sockets/cores/threads'
unset PARALLEL_CPUINFO
parallel --number-of-sockets
parallel --number-of-cores
parallel --number-of-threads
@ -593,6 +605,8 @@ export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | LC_ALL=C sort |
parallel --timeout 1000% -j10 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
perl -pe 's/,31,0/,15,0/' |
perl -pe 's:~:'$HOME':' |
perl -pe 's:'$PWD':.:' |
perl -pe 's:'$HOME':~:'
perl -pe 's/131\d\d\d/131XXX/' |
# Replace $PWD with . even if given as ~/...
perl -pe 's:~:'$HOME':g' |
perl -pe 's:'$PWD':.:g' |
perl -pe 's:'$HOME':~:g'

View file

@ -146,8 +146,11 @@ par_groupby() {
par_groupby_pipepart() {
tsv() {
printf "%s\t" a1 b1 c1 d1 e1 f1; echo
# TSV file
printf "%s\t" header_a1 head_b1 c1 d1 e1 f1; echo
# Make 6 columns: 123456 => 1\t2\t3\t4\t5\t6
seq 100000 999999 | perl -pe '$_=join"\t",split//' |
# Sort reverse on column 3 (This should group on col 3)
sort --parallel=8 --buffer-size=50% -rk3
}
export -f tsv
@ -178,7 +181,8 @@ par_groupby_pipepart() {
echo "### test $generator | --colsep $colsep --groupby $groupby"
$generator > $tmp
parallel --pipepart -a $tmp --colsep "$colsep" --groupby "$groupby" -k 'echo NewRec; wc'
parallel --header 1 --pipepart -k \
-a $tmp --colsep "$colsep" --groupby "$groupby" 'echo NewRec; wc'
}
export -f tester
parallel --tag -k tester \
@ -213,7 +217,7 @@ par_memory_leak() {
}
export -f a_run
echo "### Test for memory leaks"
echo "Of 100 runs of 1 job none should be bigger than a 3000 job run"
echo "Of 100 runs of 1 job at least one should be bigger than a 3000 job run"
. `which env_parallel.bash`
parset small_max,big ::: 'seq 100 | parallel a_run 1 | jq -s max' 'a_run 3000'
if [ $small_max -lt $big ] ; then

View file

@ -4,15 +4,17 @@
par_autossh() {
echo '### --ssh autossh'
export PARALLEL_SSH=autossh; export AUTOSSH_PORT=0
parallel -S lo echo ::: OK
echo OK | parallel --pipe -S lo cat
parallel -S lo false ::: a || echo OK should fail
echo '### --ssh autossh - add commands that fail here'
touch foo_autossh
stdout parallel -S csh@lo --trc {}.out touch {}.out ::: foo_autossh
ls foo_autossh*
rm foo_autossh*
(
export PARALLEL_SSH=autossh; export AUTOSSH_PORT=0
stdout parallel -S lo echo ::: OK
echo OK | stdout parallel --pipe -S lo cat
stdout parallel -S lo false ::: a || echo OK should fail
echo '### --ssh autossh - add commands that fail here'
touch foo_autossh
stdout parallel -S csh@lo --trc {}.out touch {}.out ::: foo_autossh
ls foo_autossh*
rm foo_autossh*
) | grep -Ev 'Warning: remote port forwarding failed for listen'
}
par_basefile_cleanup() {
@ -76,7 +78,6 @@ par_command_len_shellquote() {
stdout parallel --tag -k outer ::: '-Slo -j10' '' |
perl -pe 's/131\d\d\d/131xxx/g';
}
export -f $(compgen -A function | grep par_)

View file

@ -1713,22 +1713,21 @@ _EOF
par_bash_environment_too_big() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_functions=-$(typeset -f | wc -c)/1000
len_variables=-$(typeset -p | wc -c)/1000
len_var=$len_variables+110
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
len_overhead=-$( (shopt;alias;typeset -f;typeset -p) | wc -c)/1000
len_var=$len_overhead+108
len_var_remote=$len_overhead+50+25+6-3+1
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_remote=$len_overhead+50+25
len_fun_quote=$len_overhead+100
len_fun_quote_remote=$len_overhead+50+25
. `which env_parallel.bash`;
repeat() {
# Repeat input string n*1000 times
perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@"
perl -e 'print ((shift)x(eval "1000*int(".shift.")"))' "$@"
}
bigvar=$(repeat x $len_var)
@ -2816,8 +2815,8 @@ par_dash_env_parallel_session() {
alias level1alias='echo l1alias'
echo '### level0 should be hidden, level1 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
@ -2830,18 +2829,18 @@ par_dash_env_parallel_session() {
alias level2alias='echo l2alias'
echo '### level0+1 should be hidden, level2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel --endsession
echo '### level0 should be hidden, level1+2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
@ -3047,8 +3046,8 @@ par_mksh_env_parallel_session() {
alias level1alias='echo l1alias'
echo '### level0 should be hidden, level1 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
@ -3060,18 +3059,18 @@ par_mksh_env_parallel_session() {
alias level2alias='echo l2alias'
echo '### level0+1 should be hidden, level2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel --endsession
echo '### level0 should be hidden, level1+2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
@ -3137,8 +3136,8 @@ par_sh_env_parallel_session() {
# alias level1alias='echo l1alias'
echo '### level0 should be hidden, level1 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
@ -3150,18 +3149,18 @@ par_sh_env_parallel_session() {
# alias level2alias='echo l2alias'
echo '### level0+1 should be hidden, level2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel --endsession
echo '### level0 should be hidden, level1+2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
@ -3236,8 +3235,8 @@ par_zsh_env_parallel_session() {
alias level1alias='echo l1alias'
echo '### level0 should be hidden, level1 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
@ -3249,18 +3248,18 @@ par_zsh_env_parallel_session() {
alias level2alias='echo l2alias'
echo '### level0+1 should be hidden, level2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel --endsession
echo '### level0 should be hidden, level1+2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail 2>&1
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK

View file

@ -7,7 +7,7 @@ par_path_remote_bash() {
rm -rf /tmp/parallel
cp /usr/local/bin/parallel /tmp
cat <<'_EOS' | stdout ssh nopathbash@lo -T | perl -ne '/logged in/..0 and print' | uniq
cat <<'_EOS' |
echo logged in
echo BASH Path before: $PATH with no parallel
parallel echo ::: 1
@ -21,6 +21,9 @@ par_path_remote_bash() {
# --filter to see if $PATH with parallel is transferred
env_parallel --filter --env A,PATH -Slo echo '$PATH' ::: OK
_EOS
stdout ssh nopathbash@lo -T |
perl -ne '/logged in/..0 and print' |
uniq
echo
}
@ -29,7 +32,7 @@ par_path_remote_csh() {
rm -rf /tmp/parallel
cp /usr/local/bin/parallel /tmp
cat <<'_EOS' | stdout ssh nopathcsh@lo -T | perl -ne '/logged in/..0 and print' | uniq
cat <<'_EOS' |
echo logged in
echo CSH Path before: $PATH with no parallel
which parallel >& /dev/stdout
@ -49,6 +52,9 @@ par_path_remote_csh() {
sleep 1
echo Done
_EOS
stdout ssh nopathcsh@lo -T |
perl -ne '/logged in/..0 and print' |
uniq
}
par_keep_order() {
@ -109,5 +115,5 @@ par_retries_4() {
export -f $(compgen -A function | grep par_)
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
compgen -A function | grep par_ | LC_ALL=C sort |
parallel --joblog /tmp/jl-`basename $0` --delay 0.1 -j10 --tag -k '{} 2>&1' |
grep -Ev 'microk8s|smart connected IoT'
parallel --joblog /tmp/jl-`basename $0` --delay 0.1 -j10 --tag -k '{} 2>&1'

View file

@ -119,7 +119,7 @@ echo '### Negative replacement strings'
parallel --colsep ' ' echo '{-3}orrect' ::: "1 c 3 4"
echo 'bug #38439: "open files" with --files --pipe blocks after a while'
ulimit -n 20; yes "`seq 3000`" |head -c 20M | parallel --pipe -k echo {#} of 21
ulimit -n 28; yes "`seq 3000`" |head -c 20M | parallel --pipe -k echo {#} of 21
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files wc >/dev/null;

View file

@ -1,23 +1,5 @@
#!/bin/bash
get_tmux() {
# To install tmux in different version run this
cd /tmp
doit() {
wget https://github.com/tmux/tmux/archive/$1.tar.gz
tar xvf $1.tar.gz
cd tmux-$1
./autogen.sh
./configure --prefix /tmp/tmux/$1
make
make install
sudo cp /tmp/tmux/$1/bin/tmux /usr/local/bin/tmux-$1
}
. `which env_parallel.bash`
seq 1.8 0.1 2.9 | env_parallel --tag --lb doit
}
par_tmux_filter() {
# /tmp/parallel-local7/tmsOU2Ig
perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;s/ p\d+/pID/;'

View file

@ -1,10 +1,20 @@
#!/bin/bash
SERVER1=parallel-server1
SERVER2=lo
SSHLOGIN1=parallel@parallel-server1
SSHLOGIN2=parallel@lo
SSHLOGIN3=parallel@parallel-server2
SERVER2=parallel-server2
SERVER3=parallel-server3
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHUSER3=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
SSHLOGIN3=$SSHUSER3@$SERVER3
#SERVER1=parallel-server1
#SERVER2=lo
#SSHLOGIN1=parallel@parallel-server1
#SSHLOGIN2=parallel@lo
#SSHLOGIN3=parallel@parallel-server2
echo '### Test use special ssh'
echo 'TODO test ssh with > 9 simultaneous'
@ -21,8 +31,8 @@ echo '### test --filter-hosts with server w/o ssh, non-existing server'
parallel -S 192.168.1.197,8.8.8.8,$SSHLOGIN1,$SSHLOGIN2,$SSHLOGIN3 --filter-hosts --nonall -k --tag echo
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
(parallel -S redhat9.tange.dk true ::: {1..20}; echo No --controlmaster - finish last) &
(parallel -M -S redhat9.tange.dk true ::: {1..20}; echo With --controlmaster - finish first) &
(parallel -S $SSHLOGIN1 true ::: {1..20}; echo No --controlmaster - finish last) &
(parallel -M -S $SSHLOGIN1 true ::: {1..20}; echo With --controlmaster - finish first) &
wait
echo '### --filter-hosts - OK, non-such-user, connection refused, wrong host'

View file

@ -2,8 +2,15 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHLOGIN1=parallel@$SERVER1
SSHLOGIN2=parallel@$SERVER2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
#SERVER1=parallel-server1
#SERVER2=parallel-server2
#SSHLOGIN1=parallel@$SERVER1
#SSHLOGIN2=parallel@$SERVER2
export PARALLEL=-j0
#export PARALLEL="--sshdelay 0.3"

View file

@ -2,8 +2,12 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHLOGIN1=parallel@$SERVER1
SSHLOGIN2=parallel@$SERVER2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
#SSHLOGIN1=parallel@$SERVER1
#SSHLOGIN2=parallel@$SERVER2
echo '### Check -S .. and --serverloginfile ..'
echo $SSHLOGIN1 > ~/.parallel/sshloginfile
@ -19,7 +23,7 @@ cd /tmp
(echo ':'; echo file:name; echo file:name.foo; echo file: name.foo; echo file : name.foo;) \
> /tmp/test18
cat /tmp/test18 | parallel echo content-{} ">" {}
cat /tmp/test18 | parallel -j1 --trc {}.{.} -S $SSHLOGIN1,parallel@$SERVER2,: \
cat /tmp/test18 | parallel -j1 --trc {}.{.} -S $SSHLOGIN1,$SSHLOGIN2,: \
'(echo remote-{}.{.};cat {}) > {}.{.}'
cat /tmp/test18 | parallel -j1 -k 'cat {}.{.}'
@ -34,10 +38,10 @@ echo | stdout parallel -k --cleanup echo
echo '### Test --sshlogin -S --sshloginfile'
echo localhost >/tmp/parallel-sshlogin
seq 1 3 | parallel -k --sshlogin 8/$SSHLOGIN1 -S "7/ssh -l parallel $SERVER2",: --sshloginfile /tmp/parallel-sshlogin echo
seq 1 3 | parallel -k --sshlogin 8/$SSHLOGIN1 -S "7/ssh -l $SSHUSER2 $SERVER2",: --sshloginfile /tmp/parallel-sshlogin echo
echo '### Test --sshloginfile with extra content'
echo "2/ssh -l parallel $SERVER2" >>/tmp/parallel-sshlogin
echo "2/ssh -l $SSHUSER2 $SERVER2" >>/tmp/parallel-sshlogin
echo ":" >>/tmp/parallel-sshlogin
echo "#2/ssh -l tange nothing" >>/tmp/parallel-sshlogin
seq 1 10 | parallel -k --sshloginfile /tmp/parallel-sshlogin echo

View file

@ -4,8 +4,12 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHLOGIN1=parallel@parallel-server1
SSHLOGIN2=parallel@parallel-server2
SSHUSER1=vagrant
SSHUSER2=vagrant
#SSHLOGIN1=parallel@$SERVER1
#SSHLOGIN2=parallel@$SERVER2
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
echo '### Test --transfer --return --cleanup - files with newline'

View file

@ -2,23 +2,33 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SERVER2=parallel-server3
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHUSER3=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
SSHLOGIN3=$SSHUSER3@$SERVER3
#SERVER1=parallel-server1
#SERVER2=parallel-server2
echo '### Test $PARALLEL - single line'
echo | PARALLEL=--number-of-cpus parallel
(echo 1; echo 1) | PARALLEL="-Sparallel\@$SERVER1 -Sssh\ -l\ parallel\ $SERVER2 -j1" parallel -kv hostname\; echo | sort
(echo 1; echo 1) | PARALLEL="-S$SSHLOGIN1 -Sssh\ -l\ $SSHUSER2\ $SERVER2 -j1" parallel -kv hostname\; echo | sort
echo '### Test $PARALLEL - multi line'
(echo 1; echo 1) | PARALLEL="-Sparallel\@$SERVER1
-Sssh\ -l\ parallel\ $SERVER2
(echo 1; echo 1) | PARALLEL="-S$SSHLOGIN1
-Sssh\ -l\ $SSHUSER2\ $SERVER2
-j1" parallel -kv hostname\; echo | sort
echo '### Test ~/.parallel/config - single line'
echo "-Sparallel\@$SERVER1 -Sssh\ -l\ parallel\ $SERVER2 -j1" > ~/.parallel/config
echo "-S$SSHLOGIN1 -Sssh\ -l\ $SSHUSER2\ $SERVER2 -j1" > ~/.parallel/config
(echo 1; echo 1) | parallel -kv hostname\; echo | sort
echo '### Test ~/.parallel/config - multi line'
echo "-Sparallel\@$SERVER1
-Sssh\ -l\ parallel\ $SERVER2
echo "-S$SSHLOGIN1
-Sssh\ -l\ $SSHUSER2\ $SERVER2
-j1" > ~/.parallel/config
(echo 1; echo 1) | parallel -kv hostname\; echo | sort
rm ~/.parallel/config

View file

@ -2,8 +2,12 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHLOGIN1=parallel@$SERVER1
SSHLOGIN2=parallel@$SERVER2
SSHUSER1=vagrant
SSHUSER2=vagrant
#SSHLOGIN1=parallel@$SERVER1
#SSHLOGIN2=parallel@$SERVER2
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
cd /tmp

View file

@ -1,5 +1,12 @@
#!/bin/bash
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r
echo '### Test of --eta'
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
@ -14,5 +21,5 @@ echo '### Test of --progress with no jobs'
stdout parallel --progress "sleep 1; echo {}" < /dev/null
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
parallel -j0 --timeout 6 --onall -S localhost,$SSHLOGIN1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
EOF

View file

@ -1,19 +1,23 @@
#!/bin/bash
SERVER1=parallel-server1
SSHUSER1=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
rsync -Ha --delete input-files/testdir/ tmp/
cd tmp
SERVER2=parallel@parallel-server2
echo $SERVER2 >~/.parallel/sshloginfile
echo $SSHLOGIN1 >~/.parallel/sshloginfile
echo '### Test --wd newtempdir/newdir/tmp/ with space dirs';
ssh $SERVER2 rm -rf newtempdir;
ssh $SSHLOGIN1 rm -rf newtempdir;
stdout parallel -j9 -k --wd newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.6 -S .. -v echo ">"{}.6 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg';
find . -name '*.6' | LC_ALL=C sort
echo '### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs';
ssh $SERVER2 rm -rf /tmp/newtempdir;
ssh $SSHLOGIN1 rm -rf /tmp/newtempdir;
stdout parallel -j9 -k --wd /tmp/newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.7 -S .. -v echo ">"{}.7 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg';
find . -name '*.7' | LC_ALL=C sort

View file

@ -2,15 +2,25 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SERVER2=parallel-server3
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHUSER3=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
SSHLOGIN3=$SSHUSER3@$SERVER3
#SERVER1=parallel-server1
#SERVER2=parallel-server2
echo '### Test $PARALLEL_SEQ - local'
seq 1 20 | parallel -kN2 echo arg1:{1} seq:'$'PARALLEL_SEQ arg2:{2}
echo '### Test $PARALLEL_SEQ - remote'
seq 1 20 | parallel -kN2 -S parallel@$SERVER1,parallel@$SERVER2 echo arg1:{1} seq:'$'PARALLEL_SEQ arg2:{2}
seq 1 20 | parallel -kN2 -S $SSHLOGIN1,$SSHLOGIN2 echo arg1:{1} seq:'$'PARALLEL_SEQ arg2:{2}
echo '### Test $PARALLEL_PID - local'
seq 1 20 | parallel -kN2 echo arg1:{1} pid:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d{3,}/0/g'
echo '### Test $PARALLEL_PID - remote'
seq 1 20 | parallel -kN2 -S parallel@$SERVER1,parallel@$SERVER2 echo arg1:{1} pid:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d{3,}/0/g'
seq 1 20 | parallel -kN2 -S $SSHLOGIN1,$SSHLOGIN2 echo arg1:{1} pid:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d{3,}/0/g'

View file

@ -1,7 +1,11 @@
#!/bin/bash
SERVER1=redhat9.tange.dk
SERVER2=centos3.tange.dk
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
echo '### Test $PARALLEL'
PARALLEL="-k
@ -27,7 +31,7 @@ PARALLEL="-k --jobs 1 echo 1" parallel -v echo 2 ::: a b c
echo '### Test ugly quoting from $PARALLEL'
PARALLEL="-k --jobs 1 perl -pe \'\$a=1; print\$a\'" parallel -v ::: <(echo a) <(echo b)
PARALLEL='-k --jobs 1 -S parallel@'$SERVER1' perl -pe \"\\$a=1; print\\$a\"' parallel -v '<(echo {})' ::: foo
PARALLEL='-k --jobs 1 -S '$SSHLOGIN1' perl -pe \"\\$a=1; print\\$a\"' parallel -v '<(echo {})' ::: foo
echo '### Test ugly quoting from profile file'
cat <<EOF >~/.parallel/test_profile
@ -39,27 +43,27 @@ parallel -v -J test_profile ::: <(echo a) <(echo b)
echo '### Test ugly quoting from profile file --plain'
parallel -v -J test_profile --plain echo ::: <(echo a) <(echo b)
PARALLEL='-k --jobs 1 echo' parallel -S ssh\ parallel\@$SERVER1 -v ::: foo
PARALLEL='-k --jobs 1 perl -pe \"\\$a=1; print \\$a\"' parallel -S ssh\ parallel\@$SERVER1 -v '<(echo {})' ::: foo
PARALLEL='-k --jobs 1 echo' parallel -S ssh\ $SSHLOGIN1 -v ::: foo
PARALLEL='-k --jobs 1 perl -pe \"\\$a=1; print \\$a\"' parallel -S ssh\ $SSHLOGIN1 -v '<(echo {})' ::: foo
echo '### Test quoting of $ in command from profile file'
cat <<EOF >~/.parallel/test_profile
-k --jobs 1 perl -pe \'\\\$a=1; print \\\$a\'
EOF
parallel -v -J test_profile -S ssh\ parallel\@$SERVER1 '<(echo {})' ::: foo
parallel -v -J test_profile -S ssh\ $SSHLOGIN1 '<(echo {})' ::: foo
echo '### Test quoting of $ in command from profile file --plain'
parallel -v -J test_profile --plain -S ssh\ parallel\@$SERVER1 'cat <(echo {})' ::: foo
parallel -v -J test_profile --plain -S ssh\ $SSHLOGIN1 'cat <(echo {})' ::: foo
echo '### Test quoting of $ in command from $PARALLEL'
PARALLEL='-k --jobs 1 perl -pe \"\\$a=1; print \\$a\" ' parallel -S ssh\ parallel\@$SERVER1 -v '<(echo {})' ::: foo
PARALLEL='-k --jobs 1 perl -pe \"\\$a=1; print \\$a\" ' parallel -S ssh\ $SSHLOGIN1 -v '<(echo {})' ::: foo
echo '### Test quoting of $ in command from $PARALLEL --plain'
PARALLEL='-k --jobs 1 perl -pe \"\\$a=1; print \\$a\" ' parallel --plain -S ssh\ parallel\@$SERVER1 -v 'cat <(echo {})' ::: foo
PARALLEL='-k --jobs 1 perl -pe \"\\$a=1; print \\$a\" ' parallel --plain -S ssh\ $SSHLOGIN1 -v 'cat <(echo {})' ::: foo
echo '### Test quoting of space in arguments (-S) from profile file'
cat <<EOF >~/.parallel/test_profile
-k --jobs 1 -S ssh\ parallel\@$SERVER1 perl -pe \'\$a=1; print \$a\'
-k --jobs 1 -S ssh\ $SSHLOGIN1 perl -pe \'\$a=1; print \$a\'
EOF
parallel -v -J test_profile '<(echo {})' ::: foo
@ -67,23 +71,23 @@ echo '### Test quoting of space in arguments (-S) from profile file --plain'
parallel -v -J test_profile --plain 'cat <(echo {})' ::: foo
echo '### Test quoting of space in arguments (-S) from $PARALLEL'
PARALLEL='-k --jobs 1 -S ssh\ parallel@'$SERVER1' perl -pe \"\\$a=1; print \\$a\" ' parallel -v '<(echo {})' ::: foo
PARALLEL='-k --jobs 1 -S ssh\ '$SSHLOGIN1' perl -pe \"\\$a=1; print \\$a\" ' parallel -v '<(echo {})' ::: foo
echo '### Test quoting of space in long arguments (--sshlogin) from profile file'
cat <<EOF >~/.parallel/test_profile
# testprofile
-k --jobs 1 --sshlogin ssh\ parallel\@$SERVER1 perl -pe \'\$a=1; print \$a\'
-k --jobs 1 --sshlogin ssh\ $SSHLOGIN1 perl -pe \'\$a=1; print \$a\'
EOF
parallel -v -J test_profile '<(echo {})' ::: foo
echo '### Test quoting of space in arguments (-S) from $PARALLEL'
PARALLEL='-k --jobs 1 --sshlogin ssh\ parallel\@'$SERVER1' perl -pe \"\\$a=1; print \\$a\" ' parallel -v '<(echo {})' ::: foo
PARALLEL='-k --jobs 1 --sshlogin ssh\ '$SSHLOGIN1' perl -pe \"\\$a=1; print \\$a\" ' parallel -v '<(echo {})' ::: foo
echo '### Test merging of profiles - sort needed because -k only works on the single machine'
echo --tag > ~/.parallel/test_tag
echo -S .. > ~/.parallel/test_S..
echo parallel@parallel-server1 > ~/.parallel/sshloginfile
echo parallel@parallel-server2 >> ~/.parallel/sshloginfile
echo $SSHLOGIN1 > ~/.parallel/sshloginfile
echo $SSHLOGIN2 >> ~/.parallel/sshloginfile
parallel -Jtest_tag -Jtest_S.. --nonall echo a | sort
echo '### Test merging of profiles - sort needed because -k only works on the single machine --plain'

View file

@ -2,8 +2,12 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
echo '### Test -M (--retries to avoid false errors)'
seq 1 30 | parallel -j5 --retries 3 -k -M -S parallel@$SERVER1,parallel@$SERVER2 echo 2>/dev/null
seq 1 30 | parallel -j10 --retries 3 -k -M -S parallel@$SERVER1,parallel@$SERVER2 echo 2>/dev/null
seq 1 30 | parallel -j5 --retries 3 -k -M -S $SSHLOGIN1,$SSHLOGIN2 echo 2>/dev/null
seq 1 30 | parallel -j10 --retries 3 -k -M -S $SSHLOGIN1,$SSHLOGIN2 echo 2>/dev/null

View file

@ -1,10 +1,20 @@
#!/bin/bash
# must be other servers than localhost
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHLOGIN1=parallel@$SERVER1
SSHLOGIN2=parallel@$SERVER2
SERVER2=parallel-server3
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHUSER3=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
SSHLOGIN3=$SSHUSER3@$SERVER3
## must be other servers than localhost
#SERVER1=parallel-server1
#SERVER2=parallel-server2
#SSHLOGIN1=parallel@$SERVER1
#SSHLOGIN2=parallel@$SERVER2
export SSHLOGIN1
export SSHLOGIN2
# Minimal version of test17

View file

@ -2,8 +2,15 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHLOGIN1=parallel@$SERVER1
SSHLOGIN2=parallel@$SERVER2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
#SERVER1=parallel-server1
#SERVER2=parallel-server2
#SSHLOGIN1=parallel@$SERVER1
#SSHLOGIN2=parallel@$SERVER2
# -L1 will join lines ending in ' '
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r

View file

@ -2,10 +2,14 @@
SERVER1=parallel-server1
SERVER2=parallel-server2
SSHUSER1=vagrant
SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r | perl -pe 's/(PARALLEL_PID....)\d+/$1XXXXX/g'
echo '### Test --return of weirdly named file'
stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' |
stdout parallel --return {} -vv -S $SSHLOGIN1 echo '>'{} ::: 'aa<${#}" b' |
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
echo '### Test if remote login shell is csh'

View file

@ -0,0 +1,75 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "%%VMBOX%%"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "%%IP%%"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
vb.memory = "512"
end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
config.vm.provision "shell" do |s|
ssh_pub_key = File.readlines("../../authorized_keys").first.strip
s.inline = <<-SHELL
mkdir /root/.ssh
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} >> /root/.ssh/authorized_keys
sudo apt install rsync || sudo yum install -y rsync || sudo pkg install -y rsync
SHELL
end
end

107
testsuite/vagrant/setup.sh Normal file
View file

@ -0,0 +1,107 @@
#!/bin/bash
setup_one() {
# setup_one ubuntu/trusty64 172.27.27.2
if [ -z "$2" ] ; then
echo Usage: setup_one ubuntu/trusty64 172.27.27.2
return 1
fi
vfile="$1"/Vagrantfile
mkdir -p "$1"
cp Vagrantfile.tmpl "$vfile"
(
cd "$1"
perl -i -pe "s{%%VMBOX%%}{$1}g;s/%%IP%%/$2/" Vagrantfile
vagrant up
vagrant ssh -c 'ip addr || ifconfig'
)
ssh-keygen -R $2
ssh vagrant@$2 hostname
}
export -f setup_one
destroy_one() {
(
cd "$1"
vagrant destroy -f
)
rm -r ./"$1"
}
export -f destroy_one
server_list() {
cat <<SSHOK
generic/arch.98
generic/centos6.6
generic/centos7.7
generic/centos8.8
generic/debian8.18
generic/debian9.19
generic/debian10.30
generic/devuan3.43
generic/freebsd11.71
generic/freebsd12.72
generic/gentoo.99
generic/netbsd9.89
generic/oracle7.127
generic/rhel6.106
generic/rhel7.107
generic/rhel8.108
generic/ubuntu1604.216
generic/ubuntu1804.218
generic/ubuntu2004.220
SSHOK
# Ignore for now
true <<EOF
generic/alpine310
generic/alpine311
generic/alpine312
generic/alpine35
generic/alpine36
generic/alpine37
generic/alpine38
generic/alpine39
generic/dragonflybsd5
generic/fedora25
generic/fedora26
generic/fedora27
generic/fedora28
generic/fedora29
generic/fedora30
generic/fedora31
generic/fedora32
generic/hardenedbsd11
generic/hardenedbsd12
generic/netbsd8
generic/openbsd6
generic/opensuse15
generic/opensuse42
generic/oracle8
generic/ubuntu1604
generic/ubuntu1610
generic/ubuntu1704
generic/ubuntu1710
generic/ubuntu1804
generic/ubuntu1810
generic/ubuntu1904
generic/ubuntu1910
generic/ubuntu2004
EOF
}
destroy_all() {
server_list | parallel -j50% --plus --tag destroy_one {.} 172.27.27.{+.}
}
# No ssh to ip-addr
# generic/devuan1
# generic/devuan2
# Gamle: Centos3, Centos5, OracleXE, Debian7
setup_all() {
# IP address *.2 and up
server_list | parallel -j50% --plus --tag setup_one {.} 172.27.27.{+.}
}

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
@ -469,7 +488,7 @@ 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
par_maxlinelen_X_I ### Test max line length -X -I
par_maxlinelen_X_I 3cfc69ee81b0fe7fdbe8eb059ad2da61 -
par_maxlinelen_X_I 201ecb8ca789cecf39ee914a6d75611b -
par_maxlinelen_X_I Chars per line (817788/7): 116826
par_maxlinelen_m_I ### Test max line length -m -I
par_maxlinelen_m_I c78bd0799bc23d8946732f8b3ae3c94e -
@ -939,15 +958,77 @@ par_xargs_compat a_b c
par_xargs_compat d
par_xargs_compat e
par_xargs_compat ### test too long args
par_xargs_compat parallel: Error: Command line too long (1000005 >= 131049) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
par_xargs_compat parallel: Error: Command line too long (1000005 >= 131XXX) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
par_xargs_compat xargs: argument line too long
par_xargs_compat environment: line 109: stdsort: command not found
par_xargs_compat environment: line 112: stdsort: command not found
par_xargs_compat environment: line 115: stdsort: command not found
par_xargs_compat parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
par_xargs_compat 1 2
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat xargs: argument line too long
par_xargs_compat 1 2
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
par_xargs_compat 1 2
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat ### Test -x
par_xargs_compat environment: line 119: stdsort: command not found
par_xargs_compat environment: line 122: stdsort: command not found
par_xargs_compat environment: line 125: stdsort: command not found
par_xargs_compat environment: line 128: stdsort: command not found
par_xargs_compat environment: line 131: stdsort: command not found
par_xargs_compat environment: line 134: stdsort: command not found
par_xargs_compat -km
par_xargs_compat parallel: Error: Command line too long (10 >= 10) at input 0: 12345
par_xargs_compat 1 2
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat -kX
par_xargs_compat parallel: Error: Command line too long (10 >= 10) at input 0: 12345
par_xargs_compat 1 2
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat -x
par_xargs_compat xargs: argument line too long
par_xargs_compat 1 2
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat -km -x
par_xargs_compat 1 2
par_xargs_compat 12
par_xargs_compat 1234
par_xargs_compat 13
par_xargs_compat 14
par_xargs_compat 15
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat -kX -x
par_xargs_compat 1 2
par_xargs_compat 12
par_xargs_compat 1234
par_xargs_compat 13
par_xargs_compat 14
par_xargs_compat 15
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10
par_xargs_compat -x
par_xargs_compat 1 2
par_xargs_compat 12
par_xargs_compat 1234
par_xargs_compat 13
par_xargs_compat 14
par_xargs_compat 15
par_xargs_compat 3 4
par_xargs_compat 5 6
par_xargs_compat 7 8
par_xargs_compat 9 10

View file

@ -740,448 +740,424 @@ par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer tha
par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66.
par_groupby_pipepart tsv \t 3 $_%=2 ### test tsv | --colsep \t --groupby 3 $_%=2
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 1 6 19
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 NewRec
par_groupby_pipepart tsv \t 3 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t 3 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t 3 ### test tsv | --colsep \t --groupby 3
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 1 6 19
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 NewRec
par_groupby_pipepart tsv \t 3 90000 540000 1170000
par_groupby_pipepart tsv \t 3 90001 540006 1170031
par_groupby_pipepart tsv \t c1 ### test tsv | --colsep \t --groupby c1
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90001 540006 1170019
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 NewRec
par_groupby_pipepart tsv \t c1 90000 540000 1170000
par_groupby_pipepart tsv \t c1 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 ### test tsv | --colsep \t --groupby c1 $_%=2
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170019
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t c1 $_%=2 NewRec
par_groupby_pipepart tsv \t c1 $_%=2 90000 540000 1170000
par_groupby_pipepart tsv \t c1 $_%=2 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test tsv | --colsep \t --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 6 19
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart tsv \t s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 ### test ssv | --colsep \s+ --groupby 3 $_%=2
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 1 6 19
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 NewRec
par_groupby_pipepart ssv \s+ 3 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 ### test ssv | --colsep \s+ --groupby 3
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 1 6 19
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 NewRec
par_groupby_pipepart ssv \s+ 3 90000 540000 1170000
par_groupby_pipepart ssv \s+ 3 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 ### test ssv | --colsep \s+ --groupby c1
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90001 540006 1170019
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 NewRec
par_groupby_pipepart ssv \s+ c1 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 ### test ssv | --colsep \s+ --groupby c1 $_%=2
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170019
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ c1 $_%=2 NewRec
par_groupby_pipepart ssv \s+ c1 $_%=2 90000 540000 1170000
par_groupby_pipepart ssv \s+ c1 $_%=2 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test ssv | --colsep \s+ --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 6 19
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1170000
par_groupby_pipepart ssv \s+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1170031
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 ### test cssv | --colsep [\s,]+ --groupby 3 $_%=2
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 1 6 25
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 ### test cssv | --colsep [\s,]+ --groupby 3
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 1 6 25
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 NewRec
par_groupby_pipepart cssv [\s,]+ 3 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ 3 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 ### test cssv | --colsep [\s,]+ --groupby c1
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710025
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 NewRec
par_groupby_pipepart cssv [\s,]+ c1 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 ### test cssv | --colsep [\s,]+ --groupby c1 $_%=2
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710025
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 NewRec
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ c1 $_%=2 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test cssv | --colsep [\s,]+ --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 6 25
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 540000 1710000
par_groupby_pipepart cssv [\s,]+ s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 540006 1710037
par_groupby_pipepart csv , 3 $_%=2 ### test csv | --colsep , --groupby 3 $_%=2
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 1 1 19
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 NewRec
par_groupby_pipepart csv , 3 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , 3 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , 3 ### test csv | --colsep , --groupby 3
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 1 1 19
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 NewRec
par_groupby_pipepart csv , 3 90000 90000 1170000
par_groupby_pipepart csv , 3 90001 90001 1170031
par_groupby_pipepart csv , c1 ### test csv | --colsep , --groupby c1
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90001 90001 1170019
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 NewRec
par_groupby_pipepart csv , c1 90000 90000 1170000
par_groupby_pipepart csv , c1 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 ### test csv | --colsep , --groupby c1 $_%=2
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170019
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , c1 $_%=2 NewRec
par_groupby_pipepart csv , c1 $_%=2 90000 90000 1170000
par_groupby_pipepart csv , c1 $_%=2 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ ### test csv | --colsep , --groupby s/^(\d+[\t ,]+){2}(\d+).*/$2/
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 1 1 19
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90001 90001 1170031
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ NewRec
par_groupby_pipepart csv , s/^(\d+[\t ,]+){2}(\d+).*/$2/ 90000 90000 1170000
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_macron ### See if \257\256 \257<\257> is replaced correctly
@ -1295,7 +1271,7 @@ par_memfree Free mem: 1k
par_memfree parallel: Warning: This job was killed because it timed out:
par_memfree parallel: Warning: parallel --memfree 1t echo Free mem: ::: 1t
par_memory_leak ### Test for memory leaks
par_memory_leak Of 100 runs of 1 job none should be bigger than a 3000 job run
par_memory_leak Of 100 runs of 1 job at least one should be bigger than a 3000 job run
par_memory_leak Good: No memleak detected.
par_no_newline_compress bug #41613: --compress --line-buffer - no newline
par_no_newline_compress tagstring=--tagstring {#} compress=--compress

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_children_receive_sig ### Do children receive --termseq signals
par_children_receive_sig parallel: Warning: This job was killed because it timed out:
par_children_receive_sig parallel: Warning: show_signals ''

View file

@ -2110,37 +2110,10 @@ 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 /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
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: /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_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
@ -2254,6 +2227,14 @@ par_bash_env_parallel OK
par_bash_env_parallel OK
par_bash_env_parallel alias line 1
par_bash_env_parallel alias line 1
par_bash_env_parallel alias line 2
par_bash_env_parallel alias line 2
par_bash_env_parallel alias line 3
par_bash_env_parallel alias line 3
par_bash_env_parallel alias2 line 1
par_bash_env_parallel alias2 line 1
par_bash_env_parallel alias2 line 2
par_bash_env_parallel alias2 line 2
par_bash_env_parallel bug #50435: Remote fifo broke in 20150522
par_bash_env_parallel bug #52534: Tail of multiline alias is ignored
par_bash_env_parallel data from stdin

View file

@ -278,7 +278,7 @@ correct
correct
echo 'bug #38439: "open files" with --files --pipe blocks after a while'
bug #38439: "open files" with --files --pipe blocks after a while
ulimit -n 20; yes "`seq 3000`" |head -c 20M | parallel --pipe -k echo {#} of 21
ulimit -n 28; yes "`seq 3000`" |head -c 20M | parallel --pipe -k echo {#} of 21
1 of 21
2 of 21
3 of 21
@ -300,8 +300,8 @@ bug #38439: "open files" with --files --pipe blocks after a while
19 of 21
20 of 21
21 of 21
parallel: Warning: Only enough file handles to run 1 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 1 --pipe parallel -j0' or
parallel: Warning: Only enough file handles to run 2 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 2 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'

View file

@ -107,7 +107,7 @@ a1.gif 2.gif 3.gif 4.gif 5.gif 6.gifb1 2 3 4 5 6c1 2 3 4 5 6
a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
echo '### Test -m with 10000 args'; seq 10000 | perl -pe 's/$/.gif/' | parallel -j1 -km echo a{}b{.}c{.} | tee >(wc; sleep 1) >(md5sum; sleep 1) >/dev/null; wait; sleep 1
### Test -m with 10000 args
dc1624c3316077d0d95803a2eb30f455 -
c606aec1723ee5cc15f2a1b95d83d3cf -
2 29996 186684
echo '### Test -X with 10000 args'; seq 10000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | tee >(wc; sleep 1) >(md5sum; sleep 1) >/dev/null; wait; sleep 1
### Test -X with 10000 args

View file

@ -5,12 +5,12 @@ Chars per line: 116300
6 119994 697800
echo '### Test of xargs -X command lines > 130k'; seq 1 60000 | parallel -X -j1 echo a{}b{}c | tee >(wc >/tmp/bwc$$) >(sort | (sleep 1; md5sum)) >/tmp/b$$; wait; CHAR=$(cat /tmp/b$$ | wc -c); LINES=$(cat /tmp/b$$ | wc -l); echo "Chars per line:" $(echo "$CHAR/$LINES" | bc); cat /tmp/bwc$$; rm /tmp/b$$ /tmp/bwc$$
### Test of xargs -X command lines > 130k
3cfc69ee81b0fe7fdbe8eb059ad2da61 -
201ecb8ca789cecf39ee914a6d75611b -
Chars per line: 116826
7 60000 817788
echo '### Test of xargs -m command lines > 130k'; seq 1 60000 | parallel -k -j1 -m echo | md5sum
### Test of xargs -m command lines > 130k
00b8aed2c1bc28368381273aa2ae104e -
590091fd85dcb98f91c5e89cdddf21ef -
echo '### This causes problems if we kill child processes'; # 2>/dev/null to avoid parallel: Warning: Starting 45 processes took > 2 sec.
### This causes problems if we kill child processes
seq 2 40 | parallel -j 0 seq 1 10 2>/dev/null | sort | md5sum

View file

@ -73,8 +73,8 @@ please cite as described in 'parallel --citation'.
echo '### bug #39787: --xargs broken'
### bug #39787: --xargs broken
nice perl -e 'for(1..30000){print "$_\n"}' | $NICEPAR --xargs -k echo | perl -ne 'print length $_,"\n"'
131040
37854
131052
37842
echo '### --delay should grow by 3 sec per arg'
### --delay should grow by 3 sec per arg
stdout /usr/bin/time -f %e parallel --delay 3 true ::: 1 2 | perl -ne '$_ >= 3 and $_ <= 8 and print "OK\n"'

View file

@ -102,19 +102,16 @@ TODO test ssh with > 9 simultaneous
100
echo '### test --timeout --retries'
### test --timeout --retries
parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 parallel@parallel-server1 parallel@lo parallel@parallel-server2
parallel@parallel-server1
parallel@lo
parallel@parallel-server2
parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 vagrant@parallel-server1 vagrant@parallel-server2 vagrant@parallel-server3
vagrant@parallel-server1
vagrant@parallel-server2
vagrant@parallel-server3
echo '### test --filter-hosts with server w/o ssh, non-existing server'
### test --filter-hosts with server w/o ssh, non-existing server
parallel -S 192.168.1.197,8.8.8.8,parallel@parallel-server1,parallel@lo,parallel@parallel-server2 --filter-hosts --nonall -k --tag echo
parallel@lo
parallel@parallel-server1
parallel@parallel-server2
parallel -S 192.168.1.197,8.8.8.8,vagrant@parallel-server1,vagrant@parallel-server2,vagrant@parallel-server3 --filter-hosts --nonall -k --tag echo
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host
(parallel -S redhat9.tange.dk true ::: {1..20}; echo No --controlmaster - finish last) & (parallel -M -S redhat9.tange.dk true ::: {1..20}; echo With --controlmaster - finish first) & wait
(parallel -S vagrant@parallel-server1 true ::: {1..20}; echo No --controlmaster - finish last) & (parallel -M -S vagrant@parallel-server1 true ::: {1..20}; echo With --controlmaster - finish first) & wait
With --controlmaster - finish first
No --controlmaster - finish last
echo '### --filter-hosts - OK, non-such-user, connection refused, wrong host'
@ -123,7 +120,7 @@ echo '### --filter-hosts - OK, non-such-user, connection refused, wrong host'
aspire
echo '### test --workdir . in $HOME'
### test --workdir . in $HOME
cd && mkdir -p parallel-test && cd parallel-test && echo OK > testfile && parallel --workdir . --transfer -S parallel@parallel-server1 cat {} ::: testfile
cd && mkdir -p parallel-test && cd parallel-test && echo OK > testfile && parallel --workdir . --transfer -S vagrant@parallel-server1 cat {} ::: testfile
OK
echo '### TODO: test --filter-hosts proxied through the one host'
### TODO: test --filter-hosts proxied through the one host

View file

@ -565,7 +565,8 @@ Computers / CPU cores / Max jobs to run
1:local / 8 / 8
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
seq 1000 | parallel -j10 --bar '(echo -n {};sleep 0.1)' \
2> >(zenity --timeout=15 --progress --auto-kill --auto-close)
2> >(perl -pe 'BEGIN{$/="\r";$|=1};s/\r/\n/g' |
zenity --timeout=15 --progress --auto-kill --auto-close)
BASE64--joblog /tmp/log exit ::: 1 2 3 0
cat /tmp/log;
parallel --joblog /tmp/log exit ::: 1 2 3 0
@ -1424,4 +1425,4 @@ C
echo A
echo B
echo C
7
8

View file

@ -37,7 +37,7 @@ bytes
3072
Current command: sqlite3
foo
sqltest.sqlite3: SQLite 3.x database, last written using SQLite version 3022000
sqltest.sqlite3: SQLite 3.x database, last written using SQLite version 3031001
n|t
1|Line 1
2|Line 2

View file

@ -4,25 +4,25 @@
file>fire
file : & ) \n*.jpg
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
ls: /tmp/parallel.file*: No such file or directory
### --transfer - relpath
file>fire
file : & ) \n*.jpg
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
ls: tmp/parallel.file*: No such file or directory
### --transfer --cleanup - abspath
file>fire
file : & ) \n*.jpg
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
ls: /tmp/parallel.file*: No such file or directory
### --transfer --cleanup - relpath
file>fire
file : & ) \n*.jpg
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -61,7 +61,7 @@ good if no file
/tmp/parallel.file>fire.file.done
/tmp/parallel.file>fire.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK
@ -71,7 +71,7 @@ OK
/tmp/parallel.file>fire.file.done
/tmp/parallel.file>fire.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -80,7 +80,7 @@ OK
/tmp/parallel.file : & ) \n*.jpg.out
/tmp/parallel.file>fire.file.done
/tmp/parallel.file>fire.out
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -90,7 +90,7 @@ OK
/tmp/parallel.file>fire.file.done
/tmp/parallel.file>fire.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK
@ -100,7 +100,7 @@ tmp/parallel.file : & ) \n*.jpg.out
tmp/parallel.file>fire.file.done
tmp/parallel.file>fire.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -110,7 +110,7 @@ OK
/tmp/parallel.file>fire.file.done
/tmp/parallel.file>fire.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK

View file

@ -91,13 +91,13 @@ aspire
aspire
aspire
aspire
redhat9.tange.dk
redhat9.tange.dk
redhat9.tange.dk
redhat9.tange.dk
redhat9.tange.dk
redhat9.tange.dk
redhat9.tange.dk
centos8.localdomain
centos8.localdomain
centos8.localdomain
centos8.localdomain
centos8.localdomain
centos8.localdomain
centos8.localdomain
### Check more than 9 simultaneous sshlogins
1
2

View file

@ -3,13 +3,13 @@
newline
newline
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
ls: tmp/parallel.file*: No such file or directory
### --transfer --cleanup - file with newline
newline
newline
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
ls: tmp/parallel.file*: No such file or directory
### --return - file with newline
tmp/parallel.file.
@ -22,7 +22,7 @@ newline1.out
tmp/parallel.file.
newline2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -32,7 +32,7 @@ newline1.out
tmp/parallel.file.
newline2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -42,7 +42,7 @@ newline1.out
tmp/parallel.file.
newline2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -56,7 +56,7 @@ newline2.out
tmp/parallel.file.
newline2.out2
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -70,34 +70,34 @@ newline2.out
tmp/parallel.file.
newline2.out2
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
Input for ssh
-l parallel one-server -- mkdir -p ./.
-l parallel one-server rsync --server -lDrRze.iLsfxC . ./.
-l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
-l vagrant one-server -- mkdir -p ./.
-l vagrant one-server rsync --server -lDrRze.iLsfxC . ./.
-l vagrant one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64
-l vagrant one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
newlineX.out'
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
-l vagrant one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
newlineX.out2'
-l parallel one-server -- rm -f './tmp/parallel.file.
-l vagrant one-server -- rm -f './tmp/parallel.file.
newlineX'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f './tmp/parallel.file.
-l vagrant one-server -- rm -f './tmp/parallel.file.
newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f './tmp/parallel.file.
-l vagrant one-server -- rm -f './tmp/parallel.file.
newlineX.out2'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- mkdir -p ./.
-l parallel one-server rsync --server -lDrRze.iLsfxC . ./.
-l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
-l vagrant one-server -- mkdir -p ./.
-l vagrant one-server rsync --server -lDrRze.iLsfxC . ./.
-l vagrant one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64
-l vagrant one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
newlineX.out'
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
-l vagrant one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file.
newlineX.out2'
-l parallel one-server -- rm -f './tmp/parallel.file.
-l vagrant one-server -- rm -f './tmp/parallel.file.
newlineX'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f './tmp/parallel.file.
-l vagrant one-server -- rm -f './tmp/parallel.file.
newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'
-l parallel one-server -- rm -f './tmp/parallel.file.
-l vagrant one-server -- rm -f './tmp/parallel.file.
newlineX.out2'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;'

View file

@ -2,28 +2,28 @@
4
1
1
centos3.tange.dk
centos8.localdomain
freebsd12.localdomain
hostname; echo 1
hostname; echo 1
redhat9.tange.dk
### Test $PARALLEL - multi line
1
1
centos3.tange.dk
centos8.localdomain
freebsd12.localdomain
hostname; echo 1
hostname; echo 1
redhat9.tange.dk
### Test ~/.parallel/config - single line
1
1
centos3.tange.dk
centos8.localdomain
freebsd12.localdomain
hostname; echo 1
hostname; echo 1
redhat9.tange.dk
### Test ~/.parallel/config - multi line
1
1
centos3.tange.dk
centos8.localdomain
freebsd12.localdomain
hostname; echo 1
hostname; echo 1
redhat9.tange.dk

View file

@ -13,9 +13,9 @@ script2 run 4
script1 run 5
script2 run 5
good if no file
ls: script1: No such file or directory
ls: cannot access 'script1': No such file or directory
OK
ls: script2: No such file or directory
ls: cannot access 'script2': No such file or directory
OK
### Test --basefile + --sshlogin :
1

View file

@ -72,7 +72,7 @@ perl -pe '$a=1; print $a' <(echo foo)
perl -pe "\$a=1; print \$a" <(echo foo)
1foo
### Test merging of profiles - sort needed because -k only works on the single machine
parallel@parallel-server1 a
parallel@parallel-server2 a
vagrant@parallel-server1 a
vagrant@parallel-server2 a
### Test merging of profiles - sort needed because -k only works on the single machine --plain
a

View file

@ -4,25 +4,25 @@
file1
file2
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
ls: /tmp/parallel.file*: No such file or directory
### --transfer - relpath
file1
file2
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
ls: tmp/parallel.file*: No such file or directory
### --transfer --cleanup - abspath
file1
file2
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
ls: /tmp/parallel.file*: No such file or directory
### --transfer --cleanup - relpath
file1
file2
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -43,7 +43,7 @@ tmp/parallel.file2.out
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK
@ -53,7 +53,7 @@ tmp/parallel.file1.out
tmp/parallel.file2.file.done
tmp/parallel.file2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -63,7 +63,7 @@ OK
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -73,7 +73,7 @@ OK
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK
@ -83,7 +83,7 @@ OK
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -92,7 +92,7 @@ OK
/tmp/parallel.file1.out
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -102,7 +102,7 @@ OK
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK
@ -112,7 +112,7 @@ tmp/parallel.file1.out
tmp/parallel.file2.file.done
tmp/parallel.file2.out
good if no file
ls: tmp/parallel.file*: No such file or directory
ls: cannot access 'tmp/parallel.file*': No such file or directory
OK
ls: tmp/parallel.file*: No such file or directory
OK
@ -122,7 +122,7 @@ OK
/tmp/parallel.file2.file.done
/tmp/parallel.file2.out
good if no file
ls: /tmp/parallel.file*: No such file or directory
ls: cannot access '/tmp/parallel.file*': No such file or directory
OK
ls: /tmp/parallel.file*: No such file or directory
OK

View file

@ -1,4 +1,4 @@
echo '### Test --onall'; parallel --onall -S parallel@parallel-server1,parallel@parallel-server2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2
echo '### Test --onall'; parallel --onall -S vagrant@parallel-server1,vagrant@parallel-server2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2
### Test --onall
1
2
@ -12,7 +12,7 @@ echo '### Test --onall'; parallel --onall -S parallel@parallel-server1,paralle
2
1
2
echo '### Test | --onall'; seq 3 | parallel --onall -S parallel@parallel-server1,parallel@parallel-server2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c :::: -
echo '### Test | --onall'; seq 3 | parallel --onall -S vagrant@parallel-server1,vagrant@parallel-server2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c :::: -
### Test | --onall
1
2
@ -32,7 +32,7 @@ echo '### Test | --onall'; seq 3 | parallel --onall -S parallel@parallel-serve
1
2
3
echo '### Test --onall -u'; parallel --onall -S parallel@parallel-server1,parallel@parallel-server2 -u '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2 3 | sort
echo '### Test --onall -u'; parallel --onall -S vagrant@parallel-server1,vagrant@parallel-server2 -u '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2 3 | sort
### Test --onall -u
1
1
@ -52,31 +52,31 @@ echo '### Test --onall -u'; parallel --onall -S parallel@parallel-server1,para
3
3
3
echo '### Test --nonall'; parallel --nonall -k -S parallel@parallel-server1,parallel@parallel-server2 'hostname' | sort
echo '### Test --nonall'; parallel --nonall -k -S vagrant@parallel-server1,vagrant@parallel-server2 'hostname' | sort
### Test --nonall
centos3.tange.dk
redhat9.tange.dk
echo '### Test --nonall -u - should be interleaved x y x y'; parallel --nonall -S parallel@parallel-server1,parallel@parallel-server2 -u 'hostname|grep -q redhat9 && sleep 3; hostname;sleep 12;hostname;'
centos8.localdomain
freebsd11.localdomain
echo '### Test --nonall -u - should be interleaved x y x y'; parallel --nonall -S vagrant@parallel-server1,vagrant@parallel-server2 -u 'hostname|grep -q redhat9 && sleep 3; hostname;sleep 12;hostname;'
### Test --nonall -u - should be interleaved x y x y
centos3.tange.dk
redhat9.tange.dk
centos3.tange.dk
redhat9.tange.dk
echo '### Test read sshloginfile from STDIN'; echo parallel@parallel-server1 | parallel -S - --nonall hostname; echo parallel@parallel-server1 | parallel --sshloginfile - --nonall hostname
freebsd11.localdomain
centos8.localdomain
freebsd11.localdomain
centos8.localdomain
echo '### Test read sshloginfile from STDIN'; echo vagrant@parallel-server1 | parallel -S - --nonall hostname; echo vagrant@parallel-server1 | parallel --sshloginfile - --nonall hostname
### Test read sshloginfile from STDIN
redhat9.tange.dk
redhat9.tange.dk
echo '### Test --nonall --basefile'; touch /tmp/nonall--basefile; parallel --nonall --basefile /tmp/nonall--basefile -S parallel@parallel-server1,parallel@parallel-server2 ls /tmp/nonall--basefile\; rm /tmp/nonall--basefile; rm /tmp/nonall--basefile
centos8.localdomain
centos8.localdomain
echo '### Test --nonall --basefile'; touch /tmp/nonall--basefile; parallel --nonall --basefile /tmp/nonall--basefile -S vagrant@parallel-server1,vagrant@parallel-server2 ls /tmp/nonall--basefile\; rm /tmp/nonall--basefile; rm /tmp/nonall--basefile
### Test --nonall --basefile
/tmp/nonall--basefile
/tmp/nonall--basefile
echo '### Test --onall --basefile'; touch /tmp/onall--basefile; parallel --onall --basefile /tmp/onall--basefile -S parallel@parallel-server1,parallel@parallel-server2 ls {}\; rm {} ::: /tmp/onall--basefile; rm /tmp/onall--basefile
echo '### Test --onall --basefile'; touch /tmp/onall--basefile; parallel --onall --basefile /tmp/onall--basefile -S vagrant@parallel-server1,vagrant@parallel-server2 ls {}\; rm {} ::: /tmp/onall--basefile; rm /tmp/onall--basefile
### Test --onall --basefile
/tmp/onall--basefile
/tmp/onall--basefile
echo '### Test --workdir .'; ssh parallel@parallel-server1 mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S parallel@parallel-server1 ::: pwd
echo '### Test --workdir .'; ssh vagrant@parallel-server1 mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S vagrant@parallel-server1 ::: pwd
### Test --workdir .
/home/parallel/mydir
echo '### Test --wd .'; ssh parallel@parallel-server2 mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S parallel@parallel-server2 ::: pwd
/home/vagrant/mydir
echo '### Test --wd .'; ssh vagrant@parallel-server2 mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S vagrant@parallel-server2 ::: pwd
### Test --wd .
/home/parallel/mydir
/usr/home/vagrant/mydir