From 324a9f3a07ad034800167cfa2659ac32abec70d1 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Mon, 6 May 2019 01:06:48 +0200 Subject: [PATCH] parallel: --group-by bug: Column name with Capitals. testsuite: Re-org for faster execution. --- README | 6 +- src/parallel | 2 +- src/parallel.pod | 69 ++ testsuite/tests-to-run/parallel-local-0.3s.sh | 530 ++++-------- testsuite/tests-to-run/parallel-local-10s.sh | 287 +++++-- testsuite/tests-to-run/parallel-local-1s.sh | 92 +-- testsuite/tests-to-run/parallel-local-30s.sh | 113 +++ testsuite/tests-to-run/parallel-local-3s.sh | 179 ++-- testsuite/tests-to-run/parallel-local14.sh | 61 +- testsuite/wanted-results/parallel-local-0.3s | 776 ++++-------------- testsuite/wanted-results/parallel-local-10s | 292 +++++-- testsuite/wanted-results/parallel-local-1s | 76 -- testsuite/wanted-results/parallel-local-30s | 68 ++ testsuite/wanted-results/parallel-local-3s | 724 ++++++++++------ testsuite/wanted-results/parallel-local14 | 4 +- testsuite/wanted-results/parallel-local23 | 2 +- testsuite/wanted-results/parallel-polarhome | 87 +- testsuite/wanted-results/parallel-tutorial | 12 +- 18 files changed, 1620 insertions(+), 1760 deletions(-) diff --git a/README b/README index c497cfc8..4109bfa7 100644 --- a/README +++ b/README @@ -37,11 +37,11 @@ installation. $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \ fetch -o - http://pi.dk/3 ) > install.sh - $ sha1sum install.sh + $ sha1sum install.sh | grep 3374ec53bacb199b245af2dda86df6c9 12345678 3374ec53 bacb199b 245af2dd a86df6c9 - $ md5sum install.sh + $ md5sum install.sh | grep 029a9ac06e8b5bc6052eac57b2c3c9ca 029a9ac0 6e8b5bc6 052eac57 b2c3c9ca - $ sha512sum install.sh + $ sha512sum install.sh | grep f517006d9897747bed8a4694b1acba1b 40f53af6 9e20dae5 713ba06c f517006d 9897747b ed8a4694 b1acba1b 1464beb4 60055629 3f2356f3 3e9c4e3c 76e3f3af a9db4b32 bd33322b 975696fc e6b23cfb $ bash install.sh diff --git a/src/parallel b/src/parallel index a51da911..1d7de725 100755 --- a/src/parallel +++ b/src/parallel @@ -612,7 +612,7 @@ sub group_by_loop($) { if($groupby =~ s/^(\d+)\s*//) { # Column number (possibly prefix) $col = $1-1; - } elsif($groupby =~ s/^([a-z0-9_]+)\s*//) { + } elsif($groupby =~ s/^([a-z0-9_]+)\s*//i) { # Column name (possibly prefix) my $colname = $1; my($read,$char,@line,$header); diff --git a/src/parallel.pod b/src/parallel.pod index 3fd46010..aa6b66d5 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -795,6 +795,75 @@ B<--group> is the default. Can be reversed with B<-u>. See also: B<--line-buffer> B<--ungroup> +=item B<--group-by> I (alpha testing) + +Group input by value. Combined with B<--pipe> B<--group-by> groups +lines with the same value into a record. + +The value can be computed from the full line or from a single column. + +I can be: + +=over 15 + +=item Z<> column number + +Use the value in the column numbered. + +=item Z<> column name + +Treat the first line as a header and use the value in the column +named. + +=item Z<> perl expression + +Run the perl expression and use $_ as the value. + +=item Z<> column number perl expression + +Put the value of the column put in $_, run the perl expression, and use $_ as the value. + +=item Z<> column name perl expression + +Put the value of the column put in $_, run the perl expression, and use $_ as the value. + +=back + +Example: + + UserID, Consumption + 123, 1 + 123, 2 + 12-3, 1 + 221, 3 + 221, 1 + 2/21, 5 + +If you want to group 123, 12-3, 221, and 2/21 into 4 records and pass +one record at a time to B: + + tail -n +2 table.csv | \ + parallel --pipe --colsep , --group-by 1 -kN1 wc + +Make GNU B treat the first line as a header: + + cat table.csv | \ + parallel --pipe --colsep , --header : --group-by 1 -kN1 wc + +Address column by column name: + + cat table.csv | \ + parallel --pipe --colsep , --header : --group-by UserID -kN1 wc + +If 12-3 and 123 are really the same UserID, remove non-digits in +UserID when grouping: + + cat table.csv | parallel --pipe --colsep , --header : \ + --group-by 'UserID s/\D//g' -kN1 wc + +See also B<--shard>. + + =item B<--help> =item B<-h> diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 6fc3c830..4469437f 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -4,20 +4,6 @@ # Each should be taking 0.3-1s and be possible to run in parallel # I.e.: No race conditions, no logins -SMALLDISK=${SMALLDISK:-/mnt/ram} -export SMALLDISK -( - cd /tmp - sudo umount -l smalldisk.img - dd if=/dev/zero of=smalldisk.img bs=100k count=1k - yes|mkfs smalldisk.img - sudo mkdir -p /mnt/ram - sudo mount smalldisk.img /mnt/ram - sudo chmod 777 /mnt/ram -) >/dev/null 2>/dev/null - -# Clean tmp -find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | parallel rm stdsort() { "$@" 2>&1 | LC_ALL=C sort; @@ -27,138 +13,139 @@ export -f stdsort # Test amount of parallelization # parallel --shuf --jl /tmp/myjl -j1 'export JOBS={1};'bash tests-to-run/parallel-local-0.3s.sh ::: {1..16} ::: {1..5} -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj13 -k --joblog /tmp/jl-`basename $0` -L1 -r -echo '### Test bug #43376: {%} and {#} with --pipe' - echo foo | parallel -q --pipe -k echo {#} - echo foo | parallel --pipe -k echo {%} - echo foo | parallel -q --pipe -k echo {%} - echo foo | parallel --pipe -k echo {#} +par_tmux_command_not_found() { + echo '### PARALLEL_TMUX not found' + PARALLEL_TMUX=not-existing parallel --tmux echo ::: 1 +} -echo '**' +par_echo_jobseq() { + echo '### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2' -echo '### {} as part of the command' - echo p /bin/ls | parallel l{= s/p/s/ =} - echo /bin/ls-p | parallel --colsep '-' l{=2 s/p/s/ =} {1} - echo s /bin/ls | parallel l{} - echo /bin/ls | parallel ls {} - echo ls /bin/ls | parallel {} - echo ls /bin/ls | parallel + parallel -k echo {#} ::: 1 2 ::: 1 2 +} -echo '**' +par_no_joblog_with_dryrun() { + echo 'bug #46016: --joblog should not log when --dryrun' -echo '### bug #43817: Some JP char cause problems in positional replacement strings' - parallel -k echo ::: '�<�>' '�<1 $_=2�>' 'ワ' - parallel -k echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' - parallel -Xj1 echo ::: '�<�>' '�<1 $_=2�>' 'ワ' - parallel -Xj1 echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' + parallel --dryrun --joblog - echo ::: Only_this +} -echo '**' +par_tagstring_with_d() { + echo 'bug #47002: --tagstring with -d \n\n' -echo '### --rpl % that is a substring of longer --rpl %D' -parallel --rpl '{+.} s:.*\.::' --rpl '%' - --rpl '%D $_=::shell_quote(::dirname($_));' --rpl '%B s:.*/::;s:\.[^/.]+$::;' --rpl '%E s:.*\.::' - 'echo {}=%;echo %D={//};echo %B={/.};echo %E={+.};echo %D/%B.%E={}' ::: a.b/c.d/e.f + (seq 3; echo; seq 4) | + parallel -k -d '\n\n' --tagstring {%} echo ABC';'echo +} -echo '**' +par_xargs_nul_char_in_input() { + echo 'bug #47290: xargs: Warning: a NUL character occurred in the input' -echo '### Disk full' -cat /dev/zero >$SMALLDISK/out; - parallel --tmpdir $SMALLDISK echo ::: OK; - rm $SMALLDISK/out + perl -e 'print "foo\0not printed"' | parallel echo +} -echo '**' +par_maxproc() { + echo '### Test --max-procs and -P: Number of processes' -echo '### PARALLEL_TMUX not found' - PARALLEL_TMUX=not-existing parallel --tmux echo ::: 1 + seq 1 10 | parallel -k --max-procs +0 echo max proc + seq 1 10 | parallel -k -P 200% echo 200% proc +} -echo '**' +par_maxchar_s() { + echo '### Test --max-chars and -s: Max number of chars in a line' -echo '### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2' + (echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo + (echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo +} -parallel -k echo {#} ::: 1 2 ::: 1 2 +par_no_run_if_empty() { + echo '### Test --no-run-if-empty and -r: This should give no output' -echo '**' + echo " " | parallel -r echo + echo " " | parallel --no-run-if-empty echo +} -echo 'bug #46016: --joblog should not log when --dryrun' +par_help() { + echo '### Test --help and -h: Help output (just check we get the same amount of lines)' - parallel --dryrun --joblog - echo ::: Only_this + echo Output from -h and --help + parallel -h | wc -l + parallel --help | wc -l +} -echo '**' +par_version() { + echo '### Test --version: Version output (just check we get the same amount of lines)' -echo 'bug #47002: --tagstring with -d \n\n' + parallel --version | wc -l +} - (seq 3;echo;seq 4) | parallel -k -d '\n\n' --tagstring {%} echo ABC';'echo +par_verbose_t() { + echo '### Test --verbose and -t' -echo '**' + (echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null + (echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null +} -echo 'bug #47290: xargs: Warning: a NUL character occurred in the input' +par_show_limits() { + echo '### Test --show-limits' - perl -e 'print "foo\0not printed"' | parallel echo + (echo b; echo c; echo f) | parallel -k --show-limits echo {}ar + (echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar +} -echo '**' - -echo '### Test --max-procs and -P: Number of processes' +par_test_zero_args() { + echo '### Test 0-arguments' - seq 1 10 | parallel -k --max-procs +0 echo max proc - seq 1 10 | parallel -k -P 200% echo 200% proc - -echo '### Test --max-chars and -s: Max number of chars in a line' + seq 1 2 | parallel -k -n0 echo n0 + seq 1 2 | parallel -k -L0 echo L0 + seq 1 2 | parallel -k -N0 echo N0 +} - (echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo - (echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo - -echo '### Test --no-run-if-empty and -r: This should give no output' +par_l0_is_l1() { + echo '### Because of --tollef -l, then -l0 == -l1, sorry' - echo " " | parallel -r echo - echo " " | parallel --no-run-if-empty echo - -echo '### Test --help and -h: Help output (just check we get the same amount of lines)' + seq 1 2 | parallel -k -l0 echo l0 +} - echo Output from -h and --help - parallel -h | wc -l - parallel --help | wc -l - -echo '### Test --version: Version output (just check we get the same amount of lines)' +par_replace_replacementstring() { + echo '### Test replace {}' - parallel --version | wc -l - -echo '### Test --verbose and -t' + seq 1 2 | parallel -k -N0 echo replace {} curlies +} - (echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null - (echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null - -echo '### Test --show-limits' +par_arguments_on_cmdline() { + echo '### Test arguments on commandline' - (echo b; echo c; echo f) | parallel -k --show-limits echo {}ar - (echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar - -echo '### Test 0-arguments' + parallel -k -N0 echo args on cmdline ::: 1 2 +} - seq 1 2 | parallel -k -n0 echo n0 - seq 1 2 | parallel -k -L0 echo L0 - seq 1 2 | parallel -k -N0 echo N0 - -echo '### Because of --tollef -l, then -l0 == -l1, sorry' +par_nice_locally() { + echo '### Test --nice locally' - seq 1 2 | parallel -k -l0 echo l0 - -echo '### Test replace {}' + parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b +} - seq 1 2 | parallel -k -N0 echo replace {} curlies - -echo '### Test arguments on commandline' +par_disk_full() { + echo '### Disk full' - parallel -k -N0 echo args on cmdline ::: 1 2 - -echo '### Test --nice locally' + SMALLDISK=${SMALLDISK:-/mnt/ram} + export SMALLDISK + ( + cd /tmp + sudo umount -l smalldisk.img + dd if=/dev/zero of=smalldisk.img bs=100k count=1k + yes|mkfs smalldisk.img + sudo mkdir -p /mnt/ram + sudo mount smalldisk.img /mnt/ram + sudo chmod 777 /mnt/ram + ) >/dev/null 2>/dev/null - parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b -EOF -echo '### 1 .par file from --files expected' -find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | wc -l -find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | parallel rm + cat /dev/zero >$SMALLDISK/out + parallel --tmpdir $SMALLDISK echo ::: OK -sudo umount -l /tmp/smalldisk.img + rm $SMALLDISK/out + + sudo umount -l /tmp/smalldisk.img +} par_delimiter() { echo '### Test --delimiter and -d: Delimiter instead of newline' @@ -177,12 +164,24 @@ par_argfile() { seq 1 10 >/tmp/parallel_$$-2; parallel -k --arg-file /tmp/parallel_$$-2 echo; rm /tmp/parallel_$$-2 } +par_pipe_unneeded_procs() { + echo '### Test bug #34241: --pipe should not spawn unneeded processes' + seq 3 | parallel -j30 --pipe --block-size 10 cat\;echo o 2> >(grep -Ev 'Warning: Starting|Warning: Consider') +} + +par_results_arg_256() { + echo '### bug #42089: --results with arg > 256 chars (should be 1 char shorter)' + parallel --results parallel_test_dir echo ::: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456; + ls parallel_test_dir/1/ + rm -rf parallel_test_dir +} + par_pipe_to_func() { echo '### bug #45998: --pipe to function broken' - myfunc() { echo $1; cat; }; - export -f myfunc; - echo pipefunc OK | parallel --pipe myfunc {#}; + myfunc() { echo $1; cat; } + export -f myfunc + echo pipefunc OK | parallel --pipe myfunc {#} echo pipefunc and more OK | parallel --pipe 'myfunc {#};echo and more OK' } @@ -203,30 +202,11 @@ par_pipepart_header() { rm /tmp/parallel_44616 } -par_maxargs() { - echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)' - - (echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo - (echo line 1;echo line 1;echo line 2) | parallel -k -n2 -m echo - (echo line 1;echo line 2;echo line 3) | parallel -k -n1 -X echo - (echo line 1;echo line 1;echo line 2) | parallel -k -n2 -X echo - (echo line 1;echo line 2;echo line 3) | parallel -k -n1 echo - (echo line 1;echo line 1;echo line 2) | parallel -k -n2 echo - (echo line 1;echo line 2;echo line 3) | parallel -k --max-args=1 -X echo - (echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 -X echo - (echo line 1;echo line 1;echo line 2) | parallel -k --max-args=2 -X echo - (echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 -X echo - (echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 echo - (echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo -} - par_quote() { echo '### Test -q' - parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i" - - echo '### Test -q {#}' + echo '### Test -q {#}' parallel -kq echo {#} ::: a b parallel -kq echo {\#} ::: a b parallel -kq echo {\\#} ::: a b @@ -234,204 +214,46 @@ par_quote() { par_read_from_stdin() { echo '### Test empty line as input' - echo | parallel echo empty input line - + echo '### Tests if (cat | sh) works' - perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort - - echo '### Test if xargs-mode works' + echo '### Test if xargs-mode works' perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort } -par_totaljob_repl() { - echo '{##} bug #45841: Replacement string for total no of jobs' - - parallel -k --plus echo {##} ::: {a..j}; - parallel -k 'echo {= $::G++ > 3 and ($_=$Global::JobQueue->total_jobs());=}' ::: {1..10} - parallel -k -N7 --plus echo {#} {##} ::: {1..14} - parallel -k -N7 --plus echo {#} {##} ::: {1..15} - parallel -k -S 8/: -X --plus echo {#} {##} ::: {1..15} -} - -par_jobslot_repl() { - echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken' - - parallel --bar -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null - parallel --halt now,fail=10% -kj2 --delay 0.1 echo {%} ::: a b ::: c d e - parallel --eta -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null - parallel --shuf -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null - - echo 'bug #46231: {%} with --pipepart broken. Should give 1+2' - - seq 10000 > /tmp/num10000 - parallel -k --pipepart -ka /tmp/num10000 --block 10k -j2 --delay 0.05 echo {%} - rm /tmp/num10000 -} - par_total_from_joblog() { echo 'bug #47086: [PATCH] Initialize total_completed from joblog' - rm -f /tmp/parallel-47086 - parallel -j1 --joblog /tmp/parallel-47086 --halt now,fail=1 echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0 parallel -j1 --joblog /tmp/parallel-47086 --halt now,fail=1 --resume echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0 } par_xapply() { - echo '### Test bug #43284: {%} and {#} with --xapply'; - parallel --xapply 'echo {1} {#} {%} {2}' ::: a ::: b; + echo '### Test bug #43284: {%} and {#} with --xapply' + parallel --xapply 'echo {1} {#} {%} {2}' ::: a ::: b parallel -N2 'echo {%}' ::: a b echo '### bug #47501: --xapply for some input sources' # Wrapping does not work yet parallel -k echo ::: a b c aWRAP :::+ aa bb cc ::: A B :::+ AA BB AAwrap -} - -par_perlexpr_repl() { - echo '### {= and =} in different groups separated by space' - parallel echo {= s/a/b/ =} ::: a - parallel echo {= s/a/b/=} ::: a - parallel echo {= s/a/b/=}{= s/a/b/=} ::: a - parallel echo {= s/a/b/=}{=s/a/b/=} ::: a - parallel echo {= s/a/b/=}{= {= s/a/b/=} ::: a - parallel echo {= s/a/b/=}{={=s/a/b/=} ::: a - parallel echo {= s/a/b/ =} {={==} ::: a - parallel echo {={= =} ::: a - parallel echo {= {= =} ::: a - parallel echo {= {= =} =} ::: a - - echo '### bug #45842: Do not evaluate {= =} twice' - - parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} - parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} - parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} ::: {a..c} - parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} ::: {a..c} - - echo '### bug #45939: {2} in {= =} fails' - - parallel echo '{= s/O{2}//=}' ::: OOOK - parallel echo '{2}-{=1 s/O{2}//=}' ::: OOOK ::: OK -} - -par_END() { - echo '### Test -i and --replace: Replace with argument' - - (echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce - (echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{}ce - (echo a; echo END; echo b) | parallel -k -i+ -eEND echo repl+ce - (echo e; echo END; echo b) | parallel -k -i'*' -eEND echo r'*'plac'*' - (echo a; echo END; echo b) | parallel -k --replace + -eEND echo repl+ce - (echo a; echo END; echo b) | parallel -k --replace== -eEND echo repl=ce - (echo a; echo END; echo b) | parallel -k --replace = -eEND echo repl=ce - (echo a; echo END; echo b) | parallel -k --replace=^ -eEND echo repl^ce - (echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce - - echo '### Test -E: Artificial end-of-file' - - (echo include this; echo END; echo not this) | parallel -k -E END echo - (echo include this; echo END; echo not this) | parallel -k -EEND echo - - echo '### Test -e and --eof: Artificial end-of-file' - - (echo include this; echo END; echo not this) | parallel -k -e END echo - (echo include this; echo END; echo not this) | parallel -k -eEND echo - (echo include this; echo END; echo not this) | parallel -k --eof=END echo - (echo include this; echo END; echo not this) | parallel -k --eof END echo } par_exit_val() { - echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)'; - seq 10 | parallel --halt now,fail=1 true; + echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)' + seq 10 | parallel --halt now,fail=1 true echo $? - echo '### Test exit val - true'; - echo true | parallel; + echo '### Test exit val - true' + echo true | parallel echo $? - echo '### Test exit val - false'; - echo false | parallel; + echo '### Test exit val - false' + echo false | parallel echo $? } -par_xargs_compat() { - echo xargs compatibility - - 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 - - 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 - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - - 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 - - echo '### Test -x' - - (seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo - (seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -kX -s 10 -x echo - (seq 1 10; echo 12345; seq 12 15) | stdsort xargs -s 10 -x echo - (seq 1 10; echo 1234; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo - (seq 1 10; echo 1234; seq 12 15) | stdsort parallel -j1 -kX -s 10 -x echo - (seq 1 10; echo 1234; seq 12 15) | stdsort xargs -s 10 -x echo -} - par_long_cmd_mem_use() { echo '### Test long commands do not take up all memory' @@ -440,28 +262,6 @@ par_long_cmd_mem_use() { sort } -par_distribute_args_at_EOF() { - echo '### Test distribute arguments at EOF to 2 jobslots' - - seq 1 92 | parallel -j2 -kX -s 100 echo - - echo '### Test distribute arguments at EOF to 5 jobslots' - - seq 1 92 | parallel -j5 -kX -s 100 echo - - echo '### Test distribute arguments at EOF to infinity jobslots' - - seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null - - echo '### Test -N is not broken by distribution - single line' - - seq 9 | parallel -N 10 echo - - echo '### Test -N is not broken by distribution - two lines' - - seq 19 | parallel -k -N 10 echo -} - par_test_L_context_replace() { echo '### Test -N context replace' @@ -472,26 +272,6 @@ par_test_L_context_replace() { seq 19 | parallel -k -L 10 echo a{}b } -par_test_X_with_multiple_source() { - echo '### Test {} multiple times in different commands' - - seq 10 | parallel -v -Xj1 echo {} \; echo {} - - echo '### Test of -X {1}-{2} with multiple input sources' - - parallel -j1 -kX echo {1}-{2} ::: a ::: b - parallel -j2 -kX echo {1}-{2} ::: a b ::: c d - parallel -j2 -kX echo {1}-{2} ::: a b c ::: d e f - parallel -j0 -kX echo {1}-{2} ::: a b c ::: d e f - - echo '### Test of -X {}-{.} with multiple input sources' - - parallel -j1 -kX echo {}-{.} ::: a ::: b - parallel -j2 -kX echo {}-{.} ::: a b ::: c d - parallel -j2 -kX echo {}-{.} ::: a b c ::: d e f - parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f -} - par_test_r_with_pipe() { echo '### Test of -r with --pipe - the first should give an empty line. The second should not.' @@ -760,7 +540,7 @@ par_dryrun_append_joblog() { par_0_no_newline() { echo 'A single zero without \n should not be ignored' - echo -n 0 | parallel echo + echo -n 0 | parallel echo } par_csv() { @@ -917,35 +697,47 @@ par_wd_dotdotdot() { parallel --wd ... 'echo $OLDPWD' ::: foo } -par_shard() { - echo '### --shard' - # Each of the 5 lines should match: - # ##### ##### ###### - seq 100000 | parallel --pipe --shard 1 -j5 wc | - perl -pe 's/(.*\d{5,}){3}/OK/' - # Data should be sharded to all processes - shard_on_col() { - col=$1 - seq 10 99 | shuf | perl -pe 's/(.)/$1\t/g' | - parallel --pipe --shard $col -j2 --colsep "\t" sort -k$col | - field $col | uniq -c | sort - } - shard_on_col 1 - shard_on_col 2 - echo '*** broken' - # Shorthand for --pipe -j+0 - seq 100000 | parallel --shard 1 wc | - perl -pe 's/(.*\d{5,}){3}/OK/' - # Combine with arguments - seq 100000 | parallel --shard 1 echo {}\;wc ::: {1..5} ::: a b | - perl -pe 's/(.*\d{5,}){3}/OK/' -} - par_fish() { echo '### https://github.com/fish-shell/fish-shell/issues/5582' echo OK | stdout fish -c 'parallel --pipe cat' } +par_jobslot_jobnumber_pipe() { + echo '### Test bug #43376: {%} and {#} with --pipe' + echo foo | parallel -q --pipe -k echo {#} + echo foo | parallel --pipe -k echo {%} + echo foo | parallel -q --pipe -k echo {%} + echo foo | parallel --pipe -k echo {#} +} + +par_replacement_string_as_part_of_command() { + echo '### {} as part of the command' + echo p /bin/ls | parallel l{= s/p/s/ =} + echo /bin/ls-p | parallel --colsep '-' l{=2 s/p/s/ =} {1} + echo s /bin/ls | parallel l{} + echo /bin/ls | parallel ls {} + echo ls /bin/ls | parallel {} + echo ls /bin/ls | parallel +} + +par_japanese_chars_in_replacement_string() { + echo '### bug #43817: Some JP char cause problems in positional replacement strings' + parallel -k echo ::: '�<�>' '�<1 $_=2�>' 'ワ' + parallel -k echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' + parallel -Xj1 echo ::: '�<�>' '�<1 $_=2�>' 'ワ' + parallel -Xj1 echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' +} + +par_rpl_that_is_substring_of_longer_rpl() { + echo '### --rpl % that is a substring of longer --rpl %D' + parallel --rpl '{+.} s:.*\.::' --rpl '%' \ + --rpl '%D $_=::shell_quote(::dirname($_));' \ + --rpl '%B s:.*/::;s:\.[^/.]+$::;' \ + --rpl '%E s:.*\.::' \ + 'echo {}=%;echo %D={//};echo %B={/.};echo %E={+.};echo %D/%B.%E={}' ::: a.b/c.d/e.f +} + + export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | LC_ALL=C sort | - parallel --timeout 30 -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1' + parallel --timeout 30 -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-10s.sh b/testsuite/tests-to-run/parallel-local-10s.sh index c6aee471..4361f3f0 100644 --- a/testsuite/tests-to-run/parallel-local-10s.sh +++ b/testsuite/tests-to-run/parallel-local-10s.sh @@ -4,6 +4,208 @@ # Each should be taking 10-30s and be possible to run in parallel # I.e.: No race conditions, no logins +par_parset() { + echo '### test parset' + . `which env_parallel.bash` + + echo 'Put output into $myarray' + parset myarray -k seq 10 ::: 14 15 16 + echo "${myarray[1]}" + + echo 'Put output into vars "$seq, $pwd, $ls"' + parset "seq pwd ls" -k ::: "seq 10" pwd ls + echo "$seq" + + echo 'Put output into vars ($seq, $pwd, $ls)': + into_vars=(seq pwd ls) + parset "${into_vars[*]}" -k ::: "seq 5" pwd ls + echo "$seq" + + echo 'The commands to run can be an array' + cmd=("echo '<>'" "pwd") + parset data -k ::: "${cmd[@]}" + echo "${data[0]}" + echo "${data[1]}" + + echo 'You cannot pipe into parset, but must use a tempfile' + seq 10 > /tmp/parset_input_$$ + parset res -k echo :::: /tmp/parset_input_$$ + echo "${res[0]}" + echo "${res[9]}" + rm /tmp/parset_input_$$ + + echo 'or process substitution' + parset res -k echo :::: <(seq 0 10) + echo "${res[0]}" + echo "${res[9]}" + + echo 'Commands with newline require -0' + parset var -k -0 ::: 'echo "line1 +line2"' 'echo "command2"' + echo "${var[0]}" +} + +par_parset2() { + . `which env_parallel.bash` + echo '### parset into array' + parset arr1 echo ::: foo bar baz + echo ${arr1[0]} ${arr1[1]} ${arr1[2]} + + echo '### parset into vars with comma' + parset comma3,comma2,comma1 echo ::: baz bar foo + echo $comma1 $comma2 $comma3 + + echo '### parset into vars with space' + parset 'space3 space2 space1' echo ::: baz bar foo + echo $space1 $space2 $space3 + + echo '### parset with newlines' + parset 'newline3 newline2 newline1' seq ::: 3 2 1 + echo "$newline1" + echo "$newline2" + echo "$newline3" + + echo '### parset into indexed array vars' + parset 'myarray[6],myarray[5],myarray[4]' echo ::: baz bar foo + echo ${myarray[*]} + echo ${myarray[4]} ${myarray[5]} ${myarray[5]} + + echo '### env_parset' + alias myecho='echo myecho "$myvar" "${myarr[1]}"' + myvar="myvar" + myarr=("myarr 0" "myarr 1" "myarr 2") + mynewline="`echo newline1;echo newline2;`" + env_parset arr1 myecho ::: foo bar baz + echo "${arr1[0]} ${arr1[1]} ${arr1[2]}" + env_parset comma3,comma2,comma1 myecho ::: baz bar foo + echo "$comma1 $comma2 $comma3" + env_parset 'space3 space2 space1' myecho ::: baz bar foo + echo "$space1 $space2 $space3" + env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1 + echo "$newline1" + echo "$newline2" + echo "$newline3" + env_parset 'myarray[6],myarray[5],myarray[4]' myecho ::: baz bar foo + echo "${myarray[*]}" + echo "${myarray[4]} ${myarray[5]} ${myarray[5]}" + + echo 'bug #52507: parset arr1 -v echo ::: fails' + parset arr1 -v seq ::: 1 2 3 + echo "${arr1[2]}" +} + +par_perlexpr_repl() { + echo '### {= and =} in different groups separated by space' + parallel echo {= s/a/b/ =} ::: a + parallel echo {= s/a/b/=} ::: a + parallel echo {= s/a/b/=}{= s/a/b/=} ::: a + parallel echo {= s/a/b/=}{=s/a/b/=} ::: a + parallel echo {= s/a/b/=}{= {= s/a/b/=} ::: a + parallel echo {= s/a/b/=}{={=s/a/b/=} ::: a + parallel echo {= s/a/b/ =} {={==} ::: a + parallel echo {={= =} ::: a + parallel echo {= {= =} ::: a + parallel echo {= {= =} =} ::: a + + echo '### bug #45842: Do not evaluate {= =} twice' + parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} + parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} + parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} ::: {a..c} + parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} ::: {a..c} + + echo '### bug #45939: {2} in {= =} fails' + parallel echo '{= s/O{2}//=}' ::: OOOK + parallel echo '{2}-{=1 s/O{2}//=}' ::: OOOK ::: OK +} + +par_END() { + echo '### Test -i and --replace: Replace with argument' + (echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce + (echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{}ce + (echo a; echo END; echo b) | parallel -k -i+ -eEND echo repl+ce + (echo e; echo END; echo b) | parallel -k -i'*' -eEND echo r'*'plac'*' + (echo a; echo END; echo b) | parallel -k --replace + -eEND echo repl+ce + (echo a; echo END; echo b) | parallel -k --replace== -eEND echo repl=ce + (echo a; echo END; echo b) | parallel -k --replace = -eEND echo repl=ce + (echo a; echo END; echo b) | parallel -k --replace=^ -eEND echo repl^ce + (echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce + + echo '### Test -E: Artificial end-of-file' + (echo include this; echo END; echo not this) | parallel -k -E END echo + (echo include this; echo END; echo not this) | parallel -k -EEND echo + + echo '### Test -e and --eof: Artificial end-of-file' + (echo include this; echo END; echo not this) | parallel -k -e END echo + (echo include this; echo END; echo not this) | parallel -k -eEND echo + (echo include this; echo END; echo not this) | parallel -k --eof=END echo + (echo include this; echo END; echo not this) | parallel -k --eof END echo +} + +par_xargs_compat() { + echo xargs compatibility + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + echo '### Test -x' + (seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo + (seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -kX -s 10 -x echo + (seq 1 10; echo 12345; seq 12 15) | stdsort xargs -s 10 -x echo + (seq 1 10; echo 1234; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo + (seq 1 10; echo 1234; seq 12 15) | stdsort parallel -j1 -kX -s 10 -x echo + (seq 1 10; echo 1234; seq 12 15) | stdsort xargs -s 10 -x echo +} + par_sem_2jobs() { echo '### Test semaphore 2 jobs running simultaneously' parallel --semaphore --id 2jobs -u -j2 'echo job1a 1; sleep 4; echo job1b 3' @@ -200,11 +402,6 @@ par_compress_fail() { seq 12 | parallel --compress -k seq {} 10000 | md5sum } -par_round_robin_blocks() { - echo "bug #49664: --round-robin does not complete" - seq 20000000 | parallel -j8 --block 10M --round-robin --pipe wc -c | wc -l -} - par_results_csv() { echo "bug #: --results csv" @@ -248,85 +445,6 @@ par_tmux_fg() { stdout parallel --tmux --fg sleep ::: 3 | perl -pe 's/.tmp\S+/tmp/' } -par_plus_dyn_repl() { - echo "Dynamic replacement strings defined by --plus" - - unset myvar - echo ${myvar:-myval} - parallel --rpl '{:-(.+)} $_ ||= $$1' echo {:-myval} ::: "$myvar" - parallel --plus echo {:-myval} ::: "$myvar" - parallel --plus echo {2:-myval} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2:-myval} ::: "wrong" ::: "$myvar" ::: "wrong" - - myvar=abcAaAdef - echo ${myvar:2} - parallel --rpl '{:(\d+)} substr($_,0,$$1) = ""' echo {:2} ::: "$myvar" - parallel --plus echo {:2} ::: "$myvar" - parallel --plus echo {2:2} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2:2} ::: "wrong" ::: "$myvar" ::: "wrong" - - echo ${myvar:2:3} - parallel --rpl '{:(\d+?):(\d+?)} $_ = substr($_,$$1,$$2);' echo {:2:3} ::: "$myvar" - parallel --plus echo {:2:3} ::: "$myvar" - parallel --plus echo {2:2:3} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2:2:3} ::: "wrong" ::: "$myvar" ::: "wrong" - - echo ${#myvar} - parallel --rpl '{#} $_ = length $_;' echo {#} ::: "$myvar" - # {#} used for job number - parallel --plus echo {#} ::: "$myvar" - - echo ${myvar#bc} - parallel --rpl '{#(.+?)} s/^$$1//;' echo {#bc} ::: "$myvar" - parallel --plus echo {#bc} ::: "$myvar" - parallel --plus echo {2#bc} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2#bc} ::: "wrong" ::: "$myvar" ::: "wrong" - echo ${myvar#abc} - parallel --rpl '{#(.+?)} s/^$$1//;' echo {#abc} ::: "$myvar" - parallel --plus echo {#abc} ::: "$myvar" - parallel --plus echo {2#abc} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2#abc} ::: "wrong" ::: "$myvar" ::: "wrong" - - echo ${myvar%de} - parallel --rpl '{%(.+?)} s/$$1$//;' echo {%de} ::: "$myvar" - parallel --plus echo {%de} ::: "$myvar" - parallel --plus echo {2%de} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2%de} ::: "wrong" ::: "$myvar" ::: "wrong" - echo ${myvar%def} - parallel --rpl '{%(.+?)} s/$$1$//;' echo {%def} ::: "$myvar" - parallel --plus echo {%def} ::: "$myvar" - parallel --plus echo {2%def} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2%def} ::: "wrong" ::: "$myvar" ::: "wrong" - - echo ${myvar/def/ghi} - parallel --rpl '{/(.+?)/(.+?)} s/$$1/$$2/;' echo {/def/ghi} ::: "$myvar" - parallel --plus echo {/def/ghi} ::: "$myvar" - parallel --plus echo {2/def/ghi} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2/def/ghi} ::: "wrong" ::: "$myvar" ::: "wrong" - - echo ${myvar^a} - parallel --rpl '{^(.+?)} s/^($$1)/uc($1)/e;' echo {^a} ::: "$myvar" - parallel --plus echo {^a} ::: "$myvar" - parallel --plus echo {2^a} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2^a} ::: "wrong" ::: "$myvar" ::: "wrong" - echo ${myvar^^a} - parallel --rpl '{^^(.+?)} s/($$1)/uc($1)/eg;' echo {^^a} ::: "$myvar" - parallel --plus echo {^^a} ::: "$myvar" - parallel --plus echo {2^^a} ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo {-2^^a} ::: "wrong" ::: "$myvar" ::: "wrong" - - myvar=AbcAaAdef - echo ${myvar,A} - parallel --rpl '{,(.+?)} s/^($$1)/lc($1)/e;' echo '{,A}' ::: "$myvar" - parallel --plus echo '{,A}' ::: "$myvar" - parallel --plus echo '{2,A}' ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo '{-2,A}' ::: "wrong" ::: "$myvar" ::: "wrong" - echo ${myvar,,A} - parallel --rpl '{,,(.+?)} s/($$1)/lc($1)/eg;' echo '{,,A}' ::: "$myvar" - parallel --plus echo '{,,A}' ::: "$myvar" - parallel --plus echo '{2,,A}' ::: "wrong" ::: "$myvar" ::: "wrong" - parallel --plus echo '{-2,,A}' ::: "wrong" ::: "$myvar" ::: "wrong" -} par_retries_all_fail() { echo "bug #53748: -k --retries 10 + out of filehandles = blocking" @@ -359,6 +477,7 @@ par_long_line_remote() { parallel -j1 -S lo -N 10000 echo {} |wc } + export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | LC_ALL=C sort | parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-1s.sh b/testsuite/tests-to-run/parallel-local-1s.sh index 7925c198..6a47158e 100644 --- a/testsuite/tests-to-run/parallel-local-1s.sh +++ b/testsuite/tests-to-run/parallel-local-1s.sh @@ -125,47 +125,6 @@ par_result_replace() { rm -rf /tmp/par_*_49983-* } -par_parset() { - echo '### test parset' - . `which env_parallel.bash` - - echo 'Put output into $myarray' - parset myarray -k seq 10 ::: 14 15 16 - echo "${myarray[1]}" - - echo 'Put output into vars "$seq, $pwd, $ls"' - parset "seq pwd ls" -k ::: "seq 10" pwd ls - echo "$seq" - - echo 'Put output into vars ($seq, $pwd, $ls)': - into_vars=(seq pwd ls) - parset "${into_vars[*]}" -k ::: "seq 5" pwd ls - echo "$seq" - - echo 'The commands to run can be an array' - cmd=("echo '<>'" "pwd") - parset data -k ::: "${cmd[@]}" - echo "${data[0]}" - echo "${data[1]}" - - echo 'You cannot pipe into parset, but must use a tempfile' - seq 10 > /tmp/parset_input_$$ - parset res -k echo :::: /tmp/parset_input_$$ - echo "${res[0]}" - echo "${res[9]}" - rm /tmp/parset_input_$$ - - echo 'or process substitution' - parset res -k echo :::: <(seq 0 10) - echo "${res[0]}" - echo "${res[9]}" - - echo 'Commands with newline require -0' - parset var -k -0 ::: 'echo "line1 -line2"' 'echo "command2"' - echo "${var[0]}" -} - par_incomplete_linebuffer() { echo 'bug #51337: --lb does not kill jobs at sigpipe' cat > /tmp/parallel--lb-test <<'_EOF' @@ -192,55 +151,6 @@ par_header_parens() { parallel --header : echo {var.} ::: var sub/dir/file.ext } -par_parset2() { - . `which env_parallel.bash` - echo '### parset into array' - parset arr1 echo ::: foo bar baz - echo ${arr1[0]} ${arr1[1]} ${arr1[2]} - - echo '### parset into vars with comma' - parset comma3,comma2,comma1 echo ::: baz bar foo - echo $comma1 $comma2 $comma3 - - echo '### parset into vars with space' - parset 'space3 space2 space1' echo ::: baz bar foo - echo $space1 $space2 $space3 - - echo '### parset with newlines' - parset 'newline3 newline2 newline1' seq ::: 3 2 1 - echo "$newline1" - echo "$newline2" - echo "$newline3" - - echo '### parset into indexed array vars' - parset 'myarray[6],myarray[5],myarray[4]' echo ::: baz bar foo - echo ${myarray[*]} - echo ${myarray[4]} ${myarray[5]} ${myarray[5]} - - echo '### env_parset' - alias myecho='echo myecho "$myvar" "${myarr[1]}"' - myvar="myvar" - myarr=("myarr 0" "myarr 1" "myarr 2") - mynewline="`echo newline1;echo newline2;`" - env_parset arr1 myecho ::: foo bar baz - echo "${arr1[0]} ${arr1[1]} ${arr1[2]}" - env_parset comma3,comma2,comma1 myecho ::: baz bar foo - echo "$comma1 $comma2 $comma3" - env_parset 'space3 space2 space1' myecho ::: baz bar foo - echo "$space1 $space2 $space3" - env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1 - echo "$newline1" - echo "$newline2" - echo "$newline3" - env_parset 'myarray[6],myarray[5],myarray[4]' myecho ::: baz bar foo - echo "${myarray[*]}" - echo "${myarray[4]} ${myarray[5]} ${myarray[5]}" - - echo 'bug #52507: parset arr1 -v echo ::: fails' - parset arr1 -v seq ::: 1 2 3 - echo "${arr1[2]}" -} - par_pipe_compress_blocks() { echo "### bug #41482: --pipe --compress blocks at different -j/seq combinations" seq 1 | parallel -k -j2 --compress -N1 -L1 --pipe cat @@ -2247,4 +2157,4 @@ par_null_resume() { export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | LC_ALL=C sort | - parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1' + parallel -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-30s.sh b/testsuite/tests-to-run/parallel-local-30s.sh index 1842b5c1..498e8194 100755 --- a/testsuite/tests-to-run/parallel-local-30s.sh +++ b/testsuite/tests-to-run/parallel-local-30s.sh @@ -149,6 +149,8 @@ par_test_detected_shell() { test_unknown_shell() { shell="$1" tmp="/tmp/test_unknown_shell_$shell" + # Remove the file to avoid potential text-file-busy + rm -f "$tmp" cp $(which "$shell") "$tmp" chmod +x "$tmp" $tmp -c 'parallel -Dinit echo ::: 1; true' | @@ -249,6 +251,117 @@ par_macron() { print_it "$(perl -e 'print "\257<\257<\257>\257>"')" } +par_round_robin_blocks() { + echo "bug #49664: --round-robin does not complete" + seq 20000000 | parallel -j8 --block 10M --round-robin --pipe wc -c | wc -l +} + +par_plus_dyn_repl() { + echo "Dynamic replacement strings defined by --plus" + + unset myvar + echo ${myvar:-myval} + parallel --rpl '{:-(.+)} $_ ||= $$1' echo {:-myval} ::: "$myvar" + parallel --plus echo {:-myval} ::: "$myvar" + parallel --plus echo {2:-myval} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2:-myval} ::: "wrong" ::: "$myvar" ::: "wrong" + + myvar=abcAaAdef + echo ${myvar:2} + parallel --rpl '{:(\d+)} substr($_,0,$$1) = ""' echo {:2} ::: "$myvar" + parallel --plus echo {:2} ::: "$myvar" + parallel --plus echo {2:2} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2:2} ::: "wrong" ::: "$myvar" ::: "wrong" + + echo ${myvar:2:3} + parallel --rpl '{:(\d+?):(\d+?)} $_ = substr($_,$$1,$$2);' echo {:2:3} ::: "$myvar" + parallel --plus echo {:2:3} ::: "$myvar" + parallel --plus echo {2:2:3} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2:2:3} ::: "wrong" ::: "$myvar" ::: "wrong" + + echo ${#myvar} + parallel --rpl '{#} $_ = length $_;' echo {#} ::: "$myvar" + # {#} used for job number + parallel --plus echo {#} ::: "$myvar" + + echo ${myvar#bc} + parallel --rpl '{#(.+?)} s/^$$1//;' echo {#bc} ::: "$myvar" + parallel --plus echo {#bc} ::: "$myvar" + parallel --plus echo {2#bc} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2#bc} ::: "wrong" ::: "$myvar" ::: "wrong" + echo ${myvar#abc} + parallel --rpl '{#(.+?)} s/^$$1//;' echo {#abc} ::: "$myvar" + parallel --plus echo {#abc} ::: "$myvar" + parallel --plus echo {2#abc} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2#abc} ::: "wrong" ::: "$myvar" ::: "wrong" + + echo ${myvar%de} + parallel --rpl '{%(.+?)} s/$$1$//;' echo {%de} ::: "$myvar" + parallel --plus echo {%de} ::: "$myvar" + parallel --plus echo {2%de} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2%de} ::: "wrong" ::: "$myvar" ::: "wrong" + echo ${myvar%def} + parallel --rpl '{%(.+?)} s/$$1$//;' echo {%def} ::: "$myvar" + parallel --plus echo {%def} ::: "$myvar" + parallel --plus echo {2%def} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2%def} ::: "wrong" ::: "$myvar" ::: "wrong" + + echo ${myvar/def/ghi} + parallel --rpl '{/(.+?)/(.+?)} s/$$1/$$2/;' echo {/def/ghi} ::: "$myvar" + parallel --plus echo {/def/ghi} ::: "$myvar" + parallel --plus echo {2/def/ghi} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2/def/ghi} ::: "wrong" ::: "$myvar" ::: "wrong" + + echo ${myvar^a} + parallel --rpl '{^(.+?)} s/^($$1)/uc($1)/e;' echo {^a} ::: "$myvar" + parallel --plus echo {^a} ::: "$myvar" + parallel --plus echo {2^a} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2^a} ::: "wrong" ::: "$myvar" ::: "wrong" + echo ${myvar^^a} + parallel --rpl '{^^(.+?)} s/($$1)/uc($1)/eg;' echo {^^a} ::: "$myvar" + parallel --plus echo {^^a} ::: "$myvar" + parallel --plus echo {2^^a} ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo {-2^^a} ::: "wrong" ::: "$myvar" ::: "wrong" + + myvar=AbcAaAdef + echo ${myvar,A} + parallel --rpl '{,(.+?)} s/^($$1)/lc($1)/e;' echo '{,A}' ::: "$myvar" + parallel --plus echo '{,A}' ::: "$myvar" + parallel --plus echo '{2,A}' ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo '{-2,A}' ::: "wrong" ::: "$myvar" ::: "wrong" + echo ${myvar,,A} + parallel --rpl '{,,(.+?)} s/($$1)/lc($1)/eg;' echo '{,,A}' ::: "$myvar" + parallel --plus echo '{,,A}' ::: "$myvar" + parallel --plus echo '{2,,A}' ::: "wrong" ::: "$myvar" ::: "wrong" + parallel --plus echo '{-2,,A}' ::: "wrong" ::: "$myvar" ::: "wrong" +} + +par_keeporder_roundrobin() { + echo 'bug #50081: --keep-order --round-robin should give predictable results' + + export PARALLEL="-j13 --block 1m --pipe --roundrobin" + random500m() { + < /dev/zero openssl enc -aes-128-ctr -K 1234 -iv 1234 2>/dev/null | + head -c 500m; + } + a=$(random500m | parallel -k 'echo {#} $(md5sum)' | sort) + b=$(random500m | parallel -k 'echo {#} $(md5sum)' | sort) + c=$(random500m | parallel 'echo {#} $(md5sum)' | sort) + if [ "$a" == "$b" ] ; then + # Good: -k should be == -k + if [ "$a" == "$c" ] ; then + # Bad: without -k the command should give different output + echo 'Broken: a == c' + printf "$a\n$b\n$c\n" + else + echo OK + fi + else + echo 'Broken: a <> b' + printf "$a\n$b\n$c\n" + fi +} + export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | sort | parallel --delay 0.3 -j0 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-3s.sh b/testsuite/tests-to-run/parallel-local-3s.sh index 719bf615..a1956870 100644 --- a/testsuite/tests-to-run/parallel-local-3s.sh +++ b/testsuite/tests-to-run/parallel-local-3s.sh @@ -4,6 +4,109 @@ # Each should be taking 3-10s and be possible to run in parallel # I.e.: No race conditions, no logins +par_maxargs() { + echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)' + + (echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo + (echo line 1;echo line 1;echo line 2) | parallel -k -n2 -m echo + (echo line 1;echo line 2;echo line 3) | parallel -k -n1 -X echo + (echo line 1;echo line 1;echo line 2) | parallel -k -n2 -X echo + (echo line 1;echo line 2;echo line 3) | parallel -k -n1 echo + (echo line 1;echo line 1;echo line 2) | parallel -k -n2 echo + (echo line 1;echo line 2;echo line 3) | parallel -k --max-args=1 -X echo + (echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 -X echo + (echo line 1;echo line 1;echo line 2) | parallel -k --max-args=2 -X echo + (echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 -X echo + (echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 echo + (echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo +} + +par_totaljob_repl() { + echo '{##} bug #45841: Replacement string for total no of jobs' + + parallel -k --plus echo {##} ::: {a..j}; + parallel -k 'echo {= $::G++ > 3 and ($_=$Global::JobQueue->total_jobs());=}' ::: {1..10} + parallel -k -N7 --plus echo {#} {##} ::: {1..14} + parallel -k -N7 --plus echo {#} {##} ::: {1..15} + parallel -k -S 8/: -X --plus echo {#} {##} ::: {1..15} +} + +par_jobslot_repl() { + echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken' + + parallel --bar -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null + parallel --halt now,fail=10% -kj2 --delay 0.1 echo {%} ::: a b ::: c d e + parallel --eta -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null + parallel --shuf -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null + + echo 'bug #46231: {%} with --pipepart broken. Should give 1+2' + + seq 10000 > /tmp/num10000 + parallel -k --pipepart -ka /tmp/num10000 --block 10k -j2 --delay 0.05 echo {%} + rm /tmp/num10000 +} + +par_shard() { + echo '### --shard' + # Each of the 5 lines should match: + # ##### ##### ###### + seq 100000 | parallel --pipe --shard 1 -j5 wc | + perl -pe 's/(.*\d{5,}){3}/OK/' + # Data should be sharded to all processes + shard_on_col() { + col=$1 + seq 10 99 | shuf | perl -pe 's/(.)/$1\t/g' | + parallel --pipe --shard $col -j2 --colsep "\t" sort -k$col | + field $col | uniq -c | sort + } + shard_on_col 1 + shard_on_col 2 + echo '*** broken' + # Shorthand for --pipe -j+0 + seq 100000 | parallel --shard 1 wc | + perl -pe 's/(.*\d{5,}){3}/OK/' + # Combine with arguments + seq 100000 | parallel --shard 1 echo {}\;wc ::: {1..5} ::: a b | + perl -pe 's/(.*\d{5,}){3}/OK/' +} + +par_distribute_args_at_EOF() { + echo '### Test distribute arguments at EOF to 2 jobslots' + seq 1 92 | parallel -j2 -kX -s 100 echo + + echo '### Test distribute arguments at EOF to 5 jobslots' + seq 1 92 | parallel -j5 -kX -s 100 echo + + echo '### Test distribute arguments at EOF to infinity jobslots' + seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null + + echo '### Test -N is not broken by distribution - single line' + seq 9 | parallel -N 10 echo + + echo '### Test -N is not broken by distribution - two lines' + seq 19 | parallel -k -N 10 echo +} + +par_test_X_with_multiple_source() { + echo '### Test {} multiple times in different commands' + + seq 10 | parallel -v -Xj1 echo {} \; echo {} + + echo '### Test of -X {1}-{2} with multiple input sources' + + parallel -j1 -kX echo {1}-{2} ::: a ::: b + parallel -j2 -kX echo {1}-{2} ::: a b ::: c d + parallel -j2 -kX echo {1}-{2} ::: a b c ::: d e f + parallel -j0 -kX echo {1}-{2} ::: a b c ::: d e f + + echo '### Test of -X {}-{.} with multiple input sources' + + parallel -j1 -kX echo {}-{.} ::: a ::: b + parallel -j2 -kX echo {}-{.} ::: a b ::: c d + parallel -j2 -kX echo {}-{.} ::: a b c ::: d e f + parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f +} + par_resume_failed_k() { echo '### bug #38299: --resume-failed -k' tmp=$(tempfile) @@ -28,19 +131,6 @@ par_resume_k() { rm -f $tmp } - -par_pipe_unneeded_procs() { - echo '### Test bug #34241: --pipe should not spawn unneeded processes' - seq 3 | parallel -j30 --pipe --block-size 10 cat\;echo o 2> >(grep -Ev 'Warning: Starting|Warning: Consider') -} - -par_results_arg_256() { - echo '### bug #42089: --results with arg > 256 chars (should be 1 char shorter)' - parallel --results parallel_test_dir echo ::: 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456; - ls parallel_test_dir/1/ - rm -rf parallel_test_dir -} - par_slow_args_generation() { echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834' seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo @@ -63,7 +153,7 @@ par_kill_hup() { parallel -j 2 -q bash -c 'sleep {} & pid=$!; wait $pid' ::: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 & T=$! - sleep 2 + sleep 2.9 pstree $$ kill -HUP $T sleep 2 @@ -118,32 +208,6 @@ par_pipepart_block() { rm /run/shm/parallel$$ } -par_keeporder_roundrobin() { - echo 'bug #50081: --keep-order --round-robin should give predictable results' - - export PARALLEL="-j13 --block 1m --pipe --roundrobin" - random500m() { - < /dev/zero openssl enc -aes-128-ctr -K 1234 -iv 1234 2>/dev/null | - head -c 500m; - } - a=$(random500m | parallel -k 'echo {#} $(md5sum)' | sort) - b=$(random500m | parallel -k 'echo {#} $(md5sum)' | sort) - c=$(random500m | parallel 'echo {#} $(md5sum)' | sort) - if [ "$a" == "$b" ] ; then - # Good: -k should be == -k - if [ "$a" == "$c" ] ; then - # Bad: without -k the command should give different output - echo 'Broken: a == c' - printf "$a\n$b\n$c\n" - else - echo OK - fi - else - echo 'Broken: a <> b' - printf "$a\n$b\n$c\n" - fi -} - par_multiline_commands() { echo 'bug #50781: joblog format with multiline commands' rm -f /tmp/jl.$$ @@ -177,7 +241,7 @@ par_sqlandworker_uninstalled_dbd() { sudo cp /usr/share/perl5/DBD/CSV.pm.gone /usr/share/perl5/DBD/CSV.pm parallel --sqlandworker csv:////%2Ftmp%2Flog.csv echo ::: works } - + par_commandline_with_newline() { echo 'bug #51299: --retry-failed with command with newline' echo 'The format must remain the same' @@ -212,6 +276,7 @@ par_delay_human_readable() { par_exitval_signal() { echo '### Test --joblog with exitval and Test --joblog with signal -- timing dependent' rm -f /tmp/parallel_sleep + rm -f mysleep cp /bin/sleep mysleep chmod +x mysleep parallel --joblog /tmp/parallel_joblog_signal \ @@ -226,7 +291,7 @@ par_exitval_signal() { wait grep -q 134 /tmp/parallel_joblog_exitval && echo exitval=128+6 OK grep -q '[^0-9]6[^0-9]' /tmp/parallel_joblog_signal && echo signal OK - + rm -f /tmp/parallel_joblog_exitval /tmp/parallel_joblog_signal } @@ -314,7 +379,7 @@ par_lb_mem_usage() { par_groupby() { tsv() { - printf "%s\t" a1 b1 c1; echo + printf "%s\t" a1 b1 C1; echo printf "%s\t" 2 2 2; echo printf "%s\t" 3 2 2; echo printf "%s\t" 3 3 2; echo @@ -326,7 +391,7 @@ par_groupby() { ssv() { # space separated - printf "%s\t" a1 b1 c1; echo + printf "%s\t" a1 b1 C1; echo printf "%s " 2 2 2; echo printf "%s \t" 3 2 2; echo printf "%s\t " 3 3 2; echo @@ -338,7 +403,7 @@ par_groupby() { cssv() { # , + space separated - printf "%s,\t" a1 b1 c1; echo + printf "%s,\t" a1 b1 C1; echo printf "%s ," 2 2 2; echo printf "%s ,\t" 3 2 2; echo printf "%s\t, " 3 3 2; echo @@ -350,7 +415,7 @@ par_groupby() { csv() { # , separated - printf "%s," a1 b1 c1; echo + printf "%s," a1 b1 C1; echo printf "%s," 2 2 2; echo printf "%s," 3 2 2; echo printf "%s," 3 3 2; echo @@ -372,18 +437,20 @@ par_groupby() { export -f tester parallel --tag -k tester \ ::: -N1 '--block 20' \ - ::: '3 $_%=2' 3 's/^(.).*/$1/' c1 'c1 $_%=2' \ + ::: '3 $_%=2' 3 's/^(.).*/$1/' C1 'C1 $_%=2' \ ::: tsv ssv cssv csv \ - :::+ '\t' '\s+' '[\s,]+' ',' \ + :::+ '\t' '\s+' '[\s,]+' ',' - # Test --colsep char - # Test --colsep pattern - # Test --colsep -N1 - # Test --colsep --block 20 - # Test --groupby col - # Test --groupby 'col perl' - # Test space sep --colsep '\s' - # Test --colsep --header : + # Test --colsep char: OK + # Test --colsep pattern: OK + # Test --colsep -N1: OK + # Test --colsep --block 20: OK + # Test --groupby colno: OK + # Test --groupby 'colno perl': OK + # Test --groupby colname: OK + # Test --groupby 'colname perl': OK + # Test space sep --colsep '\s': OK + # Test --colsep --header : (OK: --header : not needed) } export -f $(compgen -A function | grep par_) diff --git a/testsuite/tests-to-run/parallel-local14.sh b/testsuite/tests-to-run/parallel-local14.sh index 9d0cd795..0b2e217c 100644 --- a/testsuite/tests-to-run/parallel-local14.sh +++ b/testsuite/tests-to-run/parallel-local14.sh @@ -1,36 +1,41 @@ #!/bin/bash -# Assume /dev/shm is easy to fill up -SHM=/tmp/shm/parallel +# Make a dir that is easy to fill up +SHM=/tmp/shm/parallel-local14 mkdir -p $SHM -sudo umount -l $SHM -sudo mount -t tmpfs -o size=10% none $SHM -echo '3 x terminated is OK' >&2 -echo '### Test $TMPDIR' -TMPDIR=$SHM stdout timeout -k 1 6 parallel pv -qL10m {} ::: /dev/zero >/dev/null & -PID=$! -seq 1 200 | parallel -N0 -I // -j1 "df $SHM | parallel -k --colsep ' +' echo {4}|tail -n 1;sleep 0.1" \ -| stdout timeout -k 1 10 perl -ne 'BEGIN{$a=<>} $b=<>; -if ($a-1000 > $b) { print "More than 1 MB gone. Good!\n";exit }' -kill $PID -wait -sleep 0.1 +check_disk_is_filling() { + # Run df every 0.1 second for 20 seconds + seq 1 200 | + parallel --delay 0.1 -N0 -I // -j1 df $SHM | + grep --line-buffer $SHM | +# tee /dev/tty | + perl -a -F'\s+' -ne '$a ||=$F[3]; $b=$F[3]; + if ($a-1000 > $b) { print "More than 1 MB gone. Good!\n";exit }' +} + +mytest() { + # '' or TMPDIR=$SHM or TMPDIR=/tmp + env="$1" + # '' or --tmpdir $SHM + arg="$2" + + sudo umount -l $SHM 2>/dev/null + sudo mount -t tmpfs -o size=10% none $SHM + eval export $env + parallel --timeout 15 $arg pv -qL10m {} ::: /dev/zero >/dev/null & + PID=$! + TMPDIR=/tmp + check_disk_is_filling + kill -TERM $PID + sudo umount -l $SHM +} echo '### Test --tmpdir' -stdout timeout -k 1 6 parallel --tmpdir $SHM pv -qL10m {} ::: /dev/zero >/dev/null & -PID=$! -seq 1 200 | parallel -N0 -I // -j1 "df $SHM | parallel -k --colsep ' +' echo {4}|tail -n 1;sleep 0.1" \ -| stdout timeout -k 1 10 perl -ne 'BEGIN{$a=<>} $b=<>; if ($a-1000 > $b) { print "More than 1 MB gone. Good!\n"; exit }' -kill $PID -wait -sleep 0.1 +mytest 'Dummy=dummy' "--tmpdir $SHM" + +echo '### Test $TMPDIR' +mytest TMPDIR=$SHM "" echo '### Test $TMPDIR and --tmpdir' -TMPDIR=/tmp stdout timeout -k 1 6 parallel --tmpdir $SHM pv -qL10m {} ::: /dev/zero >/dev/null & -PID=$! -seq 1 200 | parallel -N0 -I // -j1 "df $SHM | parallel -k --colsep ' +' echo {4}|tail -n 1;sleep 0.1" \ -| stdout timeout -k 1 10 perl -ne 'BEGIN{$a=<>} $b=<>; if ($a-1000 > $b) { print "More than 1 MB gone. Good!\n"; exit }' -kill $PID -wait -sleep 0.1 +mytest TMPDIR=/tmp "--tmpdir $SHM" diff --git a/testsuite/wanted-results/parallel-local-0.3s b/testsuite/wanted-results/parallel-local-0.3s index 5ee9e0bb..27f1deaf 100644 --- a/testsuite/wanted-results/parallel-local-0.3s +++ b/testsuite/wanted-results/parallel-local-0.3s @@ -1,244 +1,5 @@ -echo '### Test bug #43376: {%} and {#} with --pipe' -### Test bug #43376: {%} and {#} with --pipe - echo foo | parallel -q --pipe -k echo {#} -1 - echo foo | parallel --pipe -k echo {%} -1 - echo foo | parallel -q --pipe -k echo {%} -1 - echo foo | parallel --pipe -k echo {#} -1 -echo '**' -** -echo '### {} as part of the command' -### {} as part of the command - echo p /bin/ls | parallel l{= s/p/s/ =} -/bin/ls - echo /bin/ls-p | parallel --colsep '-' l{=2 s/p/s/ =} {1} -/bin/ls - echo s /bin/ls | parallel l{} -/bin/ls - echo /bin/ls | parallel ls {} -/bin/ls - echo ls /bin/ls | parallel {} -/bin/ls - echo ls /bin/ls | parallel -/bin/ls -echo '**' -** -echo '### bug #43817: Some JP char cause problems in positional replacement strings' -### bug #43817: Some JP char cause problems in positional replacement strings - parallel -k echo ::: '�<�>' '�<1 $_=2�>' 'ワ' -�<�> -�<1 $_=2�> -ワ - parallel -k echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' -�<�> -�<1 $_=2�> -ワ - parallel -Xj1 echo ::: '�<�>' '�<1 $_=2�>' 'ワ' -�<�> �<1 $_=2�> ワ - parallel -Xj1 echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' -�<�> -echo '**' -** -echo '### --rpl % that is a substring of longer --rpl %D' -### --rpl % that is a substring of longer --rpl %D -parallel --rpl '{+.} s:.*\.::' --rpl '%' --rpl '%D $_=::shell_quote(::dirname($_));' --rpl '%B s:.*/::;s:\.[^/.]+$::;' --rpl '%E s:.*\.::' 'echo {}=%;echo %D={//};echo %B={/.};echo %E={+.};echo %D/%B.%E={}' ::: a.b/c.d/e.f -a.b/c.d/e.f=a.b/c.d/e.f -a.b/c.d=a.b/c.d -e=e -f=f -a.b/c.d/e.f=a.b/c.d/e.f -echo '**' -** -echo '### Disk full' -### Disk full -cat /dev/zero >$SMALLDISK/out; parallel --tmpdir $SMALLDISK echo ::: OK; rm $SMALLDISK/out -cat: write error: No space left on device -parallel: Error: Output is incomplete. -parallel: Error: Cannot append to buffer file in /mnt/ram. -parallel: Error: Is the disk full? -parallel: Error: Change $TMPDIR with --tmpdir or use --compress. -Warning: unable to close filehandle properly: No space left on device during global destruction. -echo '**' -** -echo '### PARALLEL_TMUX not found' -### PARALLEL_TMUX not found - PARALLEL_TMUX=not-existing parallel --tmux echo ::: 1 -parallel: Error: not-existing not found in $PATH. -echo '**' -** -echo '### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2' -### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2 -parallel -k echo {#} ::: 1 2 ::: 1 2 -1 -2 -3 -4 -echo '**' -** -echo 'bug #46016: --joblog should not log when --dryrun' -bug #46016: --joblog should not log when --dryrun - parallel --dryrun --joblog - echo ::: Only_this -echo Only_this -echo '**' -** -echo 'bug #47002: --tagstring with -d \n\n' -bug #47002: --tagstring with -d \n\n - (seq 3;echo;seq 4) | parallel -k -d '\n\n' --tagstring {%} echo ABC';'echo -1 ABC -1 1 -1 2 -1 3 -2 ABC -2 1 -2 2 -2 3 -2 4 -2 -echo '**' -** -echo 'bug #47290: xargs: Warning: a NUL character occurred in the input' -bug #47290: xargs: Warning: a NUL character occurred in the input - perl -e 'print "foo\0not printed"' | parallel echo -foo\0not printed -parallel: Warning: A NUL character in the input was replaced with \0. -parallel: Warning: NUL cannot be passed through in the argument list. -parallel: Warning: Did you mean to use the --null option? -echo '**' -** -echo '### Test --max-procs and -P: Number of processes' -### Test --max-procs and -P: Number of processes - seq 1 10 | parallel -k --max-procs +0 echo max proc -max proc 1 -max proc 2 -max proc 3 -max proc 4 -max proc 5 -max proc 6 -max proc 7 -max proc 8 -max proc 9 -max proc 10 - seq 1 10 | parallel -k -P 200% echo 200% proc -200% proc 1 -200% proc 2 -200% proc 3 -200% proc 4 -200% proc 5 -200% proc 6 -200% proc 7 -200% proc 8 -200% proc 9 -200% proc 10 -echo '### Test --max-chars and -s: Max number of chars in a line' -### Test --max-chars and -s: Max number of chars in a line - (echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo -line 1 line 1 -line 2 - (echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo -line 1 line 1 -line 2 -echo '### Test --no-run-if-empty and -r: This should give no output' -### Test --no-run-if-empty and -r: This should give no output - echo " " | parallel -r echo - echo " " | parallel --no-run-if-empty echo -echo '### Test --help and -h: Help output (just check we get the same amount of lines)' -### Test --help and -h: Help output (just check we get the same amount of lines) - echo Output from -h and --help -Output from -h and --help - parallel -h | wc -l -37 - parallel --help | wc -l -37 -echo '### Test --version: Version output (just check we get the same amount of lines)' -### Test --version: Version output (just check we get the same amount of lines) - parallel --version | wc -l -10 -echo '### Test --verbose and -t' -### Test --verbose and -t - (echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null -echo bar -echo car -echo far - (echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null -echo bar -echo car -echo far -echo '### Test --show-limits' -### Test --show-limits - (echo b; echo c; echo f) | parallel -k --show-limits echo {}ar -Maximal size of command: 131049 -Maximal used size of command: 131049 - -Execution of will continue now, and it will try to read its input -and run commands; if this is not what you wanted to happen, please -press CTRL-D or CTRL-C -bar -car -far - (echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar -Maximal size of command: 131049 -Maximal used size of command: 100 - -Execution of will continue now, and it will try to read its input -and run commands; if this is not what you wanted to happen, please -press CTRL-D or CTRL-C -bar car far -echo '### Test 0-arguments' -### Test 0-arguments - seq 1 2 | parallel -k -n0 echo n0 -n0 -n0 - seq 1 2 | parallel -k -L0 echo L0 -L0 -L0 - seq 1 2 | parallel -k -N0 echo N0 -N0 -N0 -echo '### Because of --tollef -l, then -l0 == -l1, sorry' -### Because of --tollef -l, then -l0 == -l1, sorry - seq 1 2 | parallel -k -l0 echo l0 -l0 1 -l0 2 -echo '### Test replace {}' -### Test replace {} - seq 1 2 | parallel -k -N0 echo replace {} curlies -replace curlies -replace curlies -echo '### Test arguments on commandline' -### Test arguments on commandline - parallel -k -N0 echo args on cmdline ::: 1 2 -args on cmdline -args on cmdline -echo '### Test --nice locally' -### Test --nice locally - parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b -PAR=a bash -c "echo \$PAR b" -a b -### 1 .par file from --files expected -0 par_0_no_newline A single zero without \n should not be ignored par_0_no_newline 0 -par_END ### Test -i and --replace: Replace with argument -par_END replace -par_END replace -par_END replace -par_END replace -par_END replace -par_END replace -par_END replace -par_END replace -par_END replace -par_END ### Test -E: Artificial end-of-file -par_END include this -par_END include this -par_END ### Test -e and --eof: Artificial end-of-file -par_END include this -par_END include this -par_END include this -par_END include this par_PARALLEL_ENV ### PARALLEL_ENV as variable par_PARALLEL_ENV OK as variable par_PARALLEL_ENV ### PARALLEL_ENV as file @@ -273,6 +34,9 @@ par_argfile 7 par_argfile 8 par_argfile 9 par_argfile 10 +par_arguments_on_cmdline ### Test arguments on commandline +par_arguments_on_cmdline args on cmdline +par_arguments_on_cmdline args on cmdline par_basic_halt parallel: This job failed: par_basic_halt false par_basic_halt parallel: This job succeeded: @@ -331,54 +95,13 @@ par_delimiter line 3 par_delimiter delimiter TAB line 1 par_delimiter line 2 par_delimiter line 3 -par_distribute_args_at_EOF ### Test distribute arguments at EOF to 2 jobslots -par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 -par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 -par_distribute_args_at_EOF 66 67 68 69 70 71 72 73 74 75 76 77 78 79 -par_distribute_args_at_EOF 80 81 82 83 84 85 86 87 88 89 90 91 92 -par_distribute_args_at_EOF ### Test distribute arguments at EOF to 5 jobslots -par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 -par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 -par_distribute_args_at_EOF 66 67 68 69 70 71 -par_distribute_args_at_EOF 72 73 74 75 76 77 -par_distribute_args_at_EOF 78 79 80 81 82 83 -par_distribute_args_at_EOF 84 85 86 87 88 89 -par_distribute_args_at_EOF 90 91 92 -par_distribute_args_at_EOF ### Test distribute arguments at EOF to infinity jobslots -par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 -par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 -par_distribute_args_at_EOF 66 -par_distribute_args_at_EOF 67 -par_distribute_args_at_EOF 68 -par_distribute_args_at_EOF 69 -par_distribute_args_at_EOF 70 -par_distribute_args_at_EOF 71 -par_distribute_args_at_EOF 72 -par_distribute_args_at_EOF 73 -par_distribute_args_at_EOF 74 -par_distribute_args_at_EOF 75 -par_distribute_args_at_EOF 76 -par_distribute_args_at_EOF 77 -par_distribute_args_at_EOF 78 -par_distribute_args_at_EOF 79 -par_distribute_args_at_EOF 80 -par_distribute_args_at_EOF 81 -par_distribute_args_at_EOF 82 -par_distribute_args_at_EOF 83 -par_distribute_args_at_EOF 84 -par_distribute_args_at_EOF 85 -par_distribute_args_at_EOF 86 -par_distribute_args_at_EOF 87 -par_distribute_args_at_EOF 88 -par_distribute_args_at_EOF 89 -par_distribute_args_at_EOF 90 -par_distribute_args_at_EOF 91 -par_distribute_args_at_EOF 92 -par_distribute_args_at_EOF ### Test -N is not broken by distribution - single line -par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 -par_distribute_args_at_EOF ### Test -N is not broken by distribution - two lines -par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 -par_distribute_args_at_EOF 11 12 13 14 15 16 17 18 19 +par_disk_full ### Disk full +par_disk_full cat: write error: No space left on device +par_disk_full parallel: Error: Output is incomplete. +par_disk_full parallel: Error: Cannot append to buffer file in /mnt/ram. +par_disk_full parallel: Error: Is the disk full? +par_disk_full parallel: Error: Change $TMPDIR with --tmpdir or use --compress. +par_disk_full Warning: unable to close filehandle properly: No space left on device during global destruction. par_dryrun_append_joblog --dry-run should not append to joblog par_dryrun_append_joblog 1 par_dryrun_append_joblog 2 @@ -388,6 +111,11 @@ par_dryrun_append_joblog echo 2 par_dryrun_append_joblog echo 3 par_dryrun_append_joblog echo 4 par_dryrun_append_joblog 4 +par_echo_jobseq ### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2 +par_echo_jobseq 1 +par_echo_jobseq 2 +par_echo_jobseq 3 +par_echo_jobseq 4 par_empty bug #: par_empty true par_empty_command bug #54647: parset ignores empty lines @@ -437,6 +165,10 @@ par_halt_one_job 1 par_halt_one_job parallel: This job failed: par_halt_one_job echo 1;exit 1 par_halt_one_job parallel: Starting no more jobs. Waiting for 0 jobs to finish. +par_help ### Test --help and -h: Help output (just check we get the same amount of lines) +par_help Output from -h and --help +par_help 37 +par_help 37 par_inefficient_L bug #37325: Inefficiency of --pipe -L par_inefficient_L 276 276 996 par_inefficient_L FOO @@ -456,37 +188,23 @@ par_inefficient_L 200 200 1000 par_inefficient_L FOO par_inefficient_L 184 184 920 par_inefficient_L FOO -par_jobslot_repl bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl bug #46231: {%} with --pipepart broken. Should give 1+2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 -par_jobslot_repl 2 -par_jobslot_repl 1 +par_japanese_chars_in_replacement_string ### bug #43817: Some JP char cause problems in positional replacement strings +par_japanese_chars_in_replacement_string �<�> +par_japanese_chars_in_replacement_string �<1 $_=2�> +par_japanese_chars_in_replacement_string ワ +par_japanese_chars_in_replacement_string �<�> +par_japanese_chars_in_replacement_string �<1 $_=2�> +par_japanese_chars_in_replacement_string ワ +par_japanese_chars_in_replacement_string �<�> �<1 $_=2�> ワ +par_japanese_chars_in_replacement_string �<�> +par_jobslot_jobnumber_pipe ### Test bug #43376: {%} and {#} with --pipe +par_jobslot_jobnumber_pipe 1 +par_jobslot_jobnumber_pipe 1 +par_jobslot_jobnumber_pipe 1 +par_jobslot_jobnumber_pipe 1 +par_l0_is_l1 ### Because of --tollef -l, then -l0 == -l1, sorry +par_l0_is_l1 l0 1 +par_l0_is_l1 l0 2 par_linebuffer_files ### bug #48658: --linebuffer --files par_linebuffer_files 10 par_link_files_as_only_arg bug #50685: single ::::+ does not work @@ -699,96 +417,50 @@ par_long_cmd_mem_use perl -e '$r=rand(shift); for($f = 0; $f < $r; $f++){ $a = " par_long_cmd_mem_use perl -e '$r=rand(shift); for($f = 0; $f < $r; $f++){ $a = "a"x100 } print shift,"\n"' 10000 97 par_long_cmd_mem_use perl -e '$r=rand(shift); for($f = 0; $f < $r; $f++){ $a = "a"x100 } print shift,"\n"' 10000 98 par_long_cmd_mem_use perl -e '$r=rand(shift); for($f = 0; $f < $r; $f++){ $a = "a"x100 } print shift,"\n"' 10000 99 -par_maxargs ### Test -n and --max-args: Max number of args per line (only with -X and -m) -par_maxargs line 1 -par_maxargs line 2 -par_maxargs line 3 -par_maxargs line 1 line 1 -par_maxargs line 2 -par_maxargs line 1 -par_maxargs line 2 -par_maxargs line 3 -par_maxargs line 1 line 1 -par_maxargs line 2 -par_maxargs line 1 -par_maxargs line 2 -par_maxargs line 3 -par_maxargs line 1 line 1 -par_maxargs line 2 -par_maxargs line 1 -par_maxargs line 2 -par_maxargs line 3 -par_maxargs line 1 -par_maxargs line 2 -par_maxargs line 3 -par_maxargs line 1 line 1 -par_maxargs line 2 -par_maxargs line 1 line 1 -par_maxargs line 2 -par_maxargs line 1 -par_maxargs line 2 -par_maxargs line 3 -par_maxargs line 1 line 1 -par_maxargs line 2 +par_maxchar_s ### Test --max-chars and -s: Max number of chars in a line +par_maxchar_s line 1 line 1 +par_maxchar_s line 2 +par_maxchar_s line 1 line 1 +par_maxchar_s line 2 +par_maxproc ### Test --max-procs and -P: Number of processes +par_maxproc max proc 1 +par_maxproc max proc 2 +par_maxproc max proc 3 +par_maxproc max proc 4 +par_maxproc max proc 5 +par_maxproc max proc 6 +par_maxproc max proc 7 +par_maxproc max proc 8 +par_maxproc max proc 9 +par_maxproc max proc 10 +par_maxproc 200% proc 1 +par_maxproc 200% proc 2 +par_maxproc 200% proc 3 +par_maxproc 200% proc 4 +par_maxproc 200% proc 5 +par_maxproc 200% proc 6 +par_maxproc 200% proc 7 +par_maxproc 200% proc 8 +par_maxproc 200% proc 9 +par_maxproc 200% proc 10 par_newline_in_command Command with newline and positional replacement strings par_newline_in_command O K +par_nice_locally ### Test --nice locally +par_nice_locally PAR=a bash -c "echo \$PAR b" +par_nice_locally a b par_no_command_given ### Test bugfix if no command given par_no_command_given 1 2 par_no_command_given /bin/bash: 3: command not found par_no_command_given parallel: Error: Command line too long (1000002 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... +par_no_joblog_with_dryrun bug #46016: --joblog should not log when --dryrun +par_no_joblog_with_dryrun echo Only_this +par_no_run_if_empty ### Test --no-run-if-empty and -r: This should give no output par_parcat_args_stdin bug #51690: parcat: read args from stdin par_parcat_args_stdin OK1 par_parcat_args_stdin OK2 par_parcat_rm bug #51691: parcat --rm remove fifo when opened par_parcat_rm OK1 par_parcat_rm OK file removed -par_perlexpr_repl ### {= and =} in different groups separated by space -par_perlexpr_repl b -par_perlexpr_repl b -par_perlexpr_repl bb -par_perlexpr_repl bb -par_perlexpr_repl b{= b -par_perlexpr_repl b{=b -par_perlexpr_repl b {=a -par_perlexpr_repl {=a -par_perlexpr_repl {= a -par_perlexpr_repl {= a =} -par_perlexpr_repl ### bug #45842: Do not evaluate {= =} twice -par_perlexpr_repl 1 -par_perlexpr_repl 2 -par_perlexpr_repl 3 -par_perlexpr_repl 4 -par_perlexpr_repl 1 -par_perlexpr_repl 2 -par_perlexpr_repl 3 -par_perlexpr_repl 4 -par_perlexpr_repl 1 2 -par_perlexpr_repl 3 4 -par_perlexpr_repl 5 6 -par_perlexpr_repl 7 8 -par_perlexpr_repl 9 10 -par_perlexpr_repl 11 12 -par_perlexpr_repl 13 14 -par_perlexpr_repl 15 16 -par_perlexpr_repl 17 18 -par_perlexpr_repl 19 20 -par_perlexpr_repl 21 22 -par_perlexpr_repl 23 24 -par_perlexpr_repl 1 -par_perlexpr_repl 2 -par_perlexpr_repl 3 -par_perlexpr_repl 4 -par_perlexpr_repl 5 -par_perlexpr_repl 6 -par_perlexpr_repl 7 -par_perlexpr_repl 8 -par_perlexpr_repl 9 -par_perlexpr_repl 10 -par_perlexpr_repl 11 -par_perlexpr_repl 12 -par_perlexpr_repl ### bug #45939: {2} in {= =} fails -par_perlexpr_repl OK -par_perlexpr_repl OK-OK par_perlexpr_with_newline Perl expression spanning 2 lines par_pipe_N1_regexp bug #55131: --regexp --recstart hangs par_pipe_N1_regexp These should give the same @@ -876,6 +548,11 @@ par_pipe_to_func pipefunc OK par_pipe_to_func 1 par_pipe_to_func pipefunc and more OK par_pipe_to_func and more OK +par_pipe_unneeded_procs ### Test bug #34241: --pipe should not spawn unneeded processes +par_pipe_unneeded_procs 1 +par_pipe_unneeded_procs 2 +par_pipe_unneeded_procs 3 +par_pipe_unneeded_procs o par_pipepart_block_bigger_2G ### Test that --pipepart can have blocks > 2GB par_pipepart_block_bigger_2G 1 1 4 par_pipepart_header ### bug #44614: --pipepart --header off by one @@ -1051,47 +728,55 @@ par_read_from_stdin b 6 par_read_from_stdin b 7 par_read_from_stdin b 8 par_read_from_stdin b 9 +par_replace_replacementstring ### Test replace {} +par_replace_replacementstring replace curlies +par_replace_replacementstring replace curlies +par_replacement_string_as_part_of_command ### {} as part of the command +par_replacement_string_as_part_of_command /bin/ls +par_replacement_string_as_part_of_command /bin/ls +par_replacement_string_as_part_of_command /bin/ls +par_replacement_string_as_part_of_command /bin/ls +par_replacement_string_as_part_of_command /bin/ls +par_replacement_string_as_part_of_command /bin/ls par_results ### --results test.csv par_results a par_results b par_results c +par_results_arg_256 ### bug #42089: --results with arg > 256 chars (should be 1 char shorter) +par_results_arg_256 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 +par_results_arg_256 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345 par_retries_replacement_string 11 par_retries_replacement_string 22 par_retries_replacement_string 22 par_retries_replacement_string 33 par_retries_replacement_string 33 par_retries_replacement_string 33 +par_rpl_that_is_substring_of_longer_rpl ### --rpl % that is a substring of longer --rpl %D +par_rpl_that_is_substring_of_longer_rpl a.b/c.d/e.f=a.b/c.d/e.f +par_rpl_that_is_substring_of_longer_rpl a.b/c.d=a.b/c.d +par_rpl_that_is_substring_of_longer_rpl e=e +par_rpl_that_is_substring_of_longer_rpl f=f +par_rpl_that_is_substring_of_longer_rpl a.b/c.d/e.f=a.b/c.d/e.f par_sem_quote ### sem --quote should not add empty argument par_sem_quote echo par_sem_quote -par_shard ### --shard -par_shard OK -par_shard OK -par_shard OK -par_shard OK -par_shard OK -par_shard 10 1 -par_shard 10 2 -par_shard 10 3 -par_shard 10 4 -par_shard 10 5 -par_shard 10 6 -par_shard 10 7 -par_shard 10 8 -par_shard 10 9 -par_shard 9 0 -par_shard 9 1 -par_shard 9 2 -par_shard 9 3 -par_shard 9 4 -par_shard 9 5 -par_shard 9 6 -par_shard 9 7 -par_shard 9 8 -par_shard 9 9 -par_shard *** broken -par_shard parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. -par_shard parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. +par_show_limits ### Test --show-limits +par_show_limits Maximal size of command: 131049 +par_show_limits Maximal used size of command: 131049 +par_show_limits +par_show_limits Execution of will continue now, and it will try to read its input +par_show_limits and run commands; if this is not what you wanted to happen, please +par_show_limits press CTRL-D or CTRL-C +par_show_limits bar +par_show_limits car +par_show_limits far +par_show_limits Maximal size of command: 131049 +par_show_limits Maximal used size of command: 100 +par_show_limits +par_show_limits Execution of will continue now, and it will try to read its input +par_show_limits and run commands; if this is not what you wanted to happen, please +par_show_limits press CTRL-D or CTRL-C +par_show_limits bar car far par_slow_pipe_regexp ### bug #53718: --pipe --regexp -N blocks par_slow_pipe_regexp This should take a few ms, but took more than 2 hours par_slow_pipe_regexp 980 981 5881 @@ -1106,6 +791,17 @@ par_tagstring_pipe bug #50228: --pipe --tagstring broken par_tagstring_pipe 1 1000 1000 3893 par_tagstring_pipe 2 1000 1000 5000 par_tagstring_pipe 3 1000 1000 5000 +par_tagstring_with_d bug #47002: --tagstring with -d \n\n +par_tagstring_with_d 1 ABC +par_tagstring_with_d 1 1 +par_tagstring_with_d 1 2 +par_tagstring_with_d 1 3 +par_tagstring_with_d 2 ABC +par_tagstring_with_d 2 1 +par_tagstring_with_d 2 2 +par_tagstring_with_d 2 3 +par_tagstring_with_d 2 4 +par_tagstring_with_d 2 par_tee 1 a 1 par_tee 1 a 1000000 1000000 6888896 par_tee 1 b 2 @@ -1150,40 +846,6 @@ par_test_L_context_replace a11b a12b a13b a14b a15b a16b a17b a18b a19b par_test_L_context_replace ### Test -L context replace par_test_L_context_replace a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b par_test_L_context_replace a11b a12b a13b a14b a15b a16b a17b a18b a19b -par_test_X_with_multiple_source ### Test {} multiple times in different commands -par_test_X_with_multiple_source echo 1 2 3 4 5 6 7 8 9 10 ; echo 1 2 3 4 5 6 7 8 9 10 -par_test_X_with_multiple_source 1 2 3 4 5 6 7 8 9 10 -par_test_X_with_multiple_source 1 2 3 4 5 6 7 8 9 10 -par_test_X_with_multiple_source ### Test of -X {1}-{2} with multiple input sources -par_test_X_with_multiple_source a-b -par_test_X_with_multiple_source a-c -par_test_X_with_multiple_source b-c -par_test_X_with_multiple_source a-d -par_test_X_with_multiple_source b-f -par_test_X_with_multiple_source a-d -par_test_X_with_multiple_source a-e -par_test_X_with_multiple_source a-f -par_test_X_with_multiple_source b-d -par_test_X_with_multiple_source b-e -par_test_X_with_multiple_source b-f -par_test_X_with_multiple_source c-d -par_test_X_with_multiple_source c-e -par_test_X_with_multiple_source c-f -par_test_X_with_multiple_source ### Test of -X {}-{.} with multiple input sources -par_test_X_with_multiple_source a-a b-b -par_test_X_with_multiple_source a-a c-c a-a d-d -par_test_X_with_multiple_source b-b c-c b-b d-d -par_test_X_with_multiple_source a-a d-d a-a e-e a-a f-f b-b d-d b-b e-e -par_test_X_with_multiple_source b-b f-f c-c d-d c-c e-e c-c f-f -par_test_X_with_multiple_source a-a d-d -par_test_X_with_multiple_source a-a e-e -par_test_X_with_multiple_source a-a f-f -par_test_X_with_multiple_source b-b d-d -par_test_X_with_multiple_source b-b e-e -par_test_X_with_multiple_source b-b f-f -par_test_X_with_multiple_source c-c d-d -par_test_X_with_multiple_source c-c e-e -par_test_X_with_multiple_source c-c f-f par_test_r_with_pipe ### Test of -r with --pipe - the first should give an empty line. The second should not. par_test_r_with_pipe 1 par_test_r_with_pipe 0 @@ -1193,6 +855,13 @@ par_test_tty /dev/tty par_test_tty /dev/tty par_test_tty /dev/tty par_test_tty /dev/tty +par_test_zero_args ### Test 0-arguments +par_test_zero_args n0 +par_test_zero_args n0 +par_test_zero_args L0 +par_test_zero_args L0 +par_test_zero_args N0 +par_test_zero_args N0 par_testquote ash "#&/ par_testquote ash ()*=?' par_testquote bash "#&/ @@ -1233,6 +902,8 @@ par_testquote yash "#&/ par_testquote yash ()*=?' par_testquote zsh "#&/ par_testquote zsh ()*=?' +par_tmux_command_not_found ### PARALLEL_TMUX not found +par_tmux_command_not_found parallel: Error: not-existing not found in $PATH. par_total_from_joblog bug #47086: [PATCH] Initialize total_completed from joblog par_total_from_joblog 0 par_total_from_joblog 1 @@ -1242,40 +913,6 @@ par_total_from_joblog parallel: This job failed: par_total_from_joblog echo 3;exit 1 par_total_from_joblog 4 par_total_from_joblog 5 -par_totaljob_repl {##} bug #45841: Replacement string for total no of jobs -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 1 -par_totaljob_repl 2 -par_totaljob_repl 3 -par_totaljob_repl 4 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 10 -par_totaljob_repl 1 2 2 2 2 2 2 2 -par_totaljob_repl 2 2 2 2 2 2 2 2 -par_totaljob_repl 1 3 3 3 3 3 3 3 -par_totaljob_repl 2 3 3 3 3 3 3 3 -par_totaljob_repl 3 3 -par_totaljob_repl 1 15 15 -par_totaljob_repl 2 14 14 -par_totaljob_repl 3 14 14 -par_totaljob_repl 4 14 14 -par_totaljob_repl 5 14 14 -par_totaljob_repl 6 14 14 -par_totaljob_repl 7 14 14 -par_totaljob_repl 8 14 par_tricolonplus ### bug #48745: :::+ bug par_tricolonplus 11 1 21 a aa par_tricolonplus 11 1 21 b bb @@ -1340,6 +977,15 @@ par_tricolonplus 3 22 b cc par_tricolonplus 3 23 c aa par_tricolonplus 3 23 c bb par_tricolonplus 3 23 c cc +par_verbose_t ### Test --verbose and -t +par_verbose_t echo bar +par_verbose_t echo car +par_verbose_t echo far +par_verbose_t echo bar +par_verbose_t echo car +par_verbose_t echo far +par_version ### Test --version: Version output (just check we get the same amount of lines) +par_version 10 par_wd_3dot_local bug #45993: --wd ... should also work when run locally par_wd_3dot_local parallel: Error: Cannot change into non-executable dir /bi: No such file or directory par_wd_3dot_local /bin @@ -1371,144 +1017,8 @@ par_xapply b bb A AA par_xapply b bb B BB par_xapply c cc A AA par_xapply c cc B BB -par_xargs_compat xargs compatibility -par_xargs_compat ### Test -L -l and --max-lines -par_xargs_compat a_b -par_xargs_compat c -par_xargs_compat a_b c -par_xargs_compat a_b c -par_xargs_compat ### xargs -L1 echo -par_xargs_compat a_b -par_xargs_compat c -par_xargs_compat a_b -par_xargs_compat c -par_xargs_compat a_b -par_xargs_compat c -par_xargs_compat Lines ending in space should continue on next line -par_xargs_compat ### xargs -L1 echo -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat ### xargs -L2 echo -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat ### xargs -l echo -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat ### xargs -l2 echo -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat ### xargs -l1 echo -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat ### xargs --max-lines=2 echo -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat a_b c d -par_xargs_compat e -par_xargs_compat ### xargs --max-lines echo -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -par_xargs_compat a_b c -par_xargs_compat d -par_xargs_compat e -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 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 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 ### Test -x -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 (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 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 xargs: argument line too long -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 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 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_nul_char_in_input bug #47290: xargs: Warning: a NUL character occurred in the input +par_xargs_nul_char_in_input parallel: Warning: A NUL character in the input was replaced with \0. +par_xargs_nul_char_in_input parallel: Warning: NUL cannot be passed through in the argument list. +par_xargs_nul_char_in_input parallel: Warning: Did you mean to use the --null option? +par_xargs_nul_char_in_input foo\0not printed diff --git a/testsuite/wanted-results/parallel-local-10s b/testsuite/wanted-results/parallel-local-10s index 338d3912..b0d96e9a 100644 --- a/testsuite/wanted-results/parallel-local-10s +++ b/testsuite/wanted-results/parallel-local-10s @@ -1,3 +1,21 @@ +par_END ### Test -i and --replace: Replace with argument +par_END replace +par_END replace +par_END replace +par_END replace +par_END replace +par_END replace +par_END replace +par_END replace +par_END replace +par_END ### Test -E: Artificial end-of-file +par_END include this +par_END include this +par_END ### Test -e and --eof: Artificial end-of-file +par_END include this +par_END include this +par_END include this +par_END include this par__memleak ### Test memory consumption stays (almost) the same for 30 and 300 jobs par__memleak should give 1 == true par__memleak Memory use should not depend very much on the total number of jobs run\n @@ -252,75 +270,134 @@ 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 - par_maxlinelen_m_I Chars per line (697800/6): 116300 +par_parset ### test parset +par_parset Put output into $myarray +par_parset 10 +par_parset 11 +par_parset 12 +par_parset 13 +par_parset 14 +par_parset 15 +par_parset Put output into vars "$seq, $pwd, $ls" +par_parset 1 +par_parset 2 +par_parset 3 +par_parset 4 +par_parset 5 +par_parset 6 +par_parset 7 +par_parset 8 +par_parset 9 +par_parset 10 +par_parset Put output into vars ($seq, $pwd, $ls): +par_parset 1 +par_parset 2 +par_parset 3 +par_parset 4 +par_parset 5 +par_parset The commands to run can be an array +par_parset <> +par_parset ~/privat/parallel/testsuite +par_parset You cannot pipe into parset, but must use a tempfile +par_parset 1 +par_parset 10 +par_parset or process substitution +par_parset 0 +par_parset 9 +par_parset Commands with newline require -0 +par_parset line1 +par_parset line2 +par_parset2 ### parset into array +par_parset2 foo bar baz +par_parset2 ### parset into vars with comma +par_parset2 foo bar baz +par_parset2 ### parset into vars with space +par_parset2 foo bar baz +par_parset2 ### parset with newlines +par_parset2 1 +par_parset2 1 +par_parset2 2 +par_parset2 1 +par_parset2 2 +par_parset2 3 +par_parset2 ### parset into indexed array vars +par_parset2 foo bar baz +par_parset2 foo bar bar +par_parset2 ### env_parset +par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz +par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz +par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz +par_parset2 newline1 +par_parset2 newline2 +par_parset2 1 +par_parset2 newline1 +par_parset2 newline2 +par_parset2 1 +par_parset2 2 +par_parset2 newline1 +par_parset2 newline2 +par_parset2 1 +par_parset2 2 +par_parset2 3 +par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz +par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar +par_parset2 bug #52507: parset arr1 -v echo ::: fails +par_parset2 seq 3 +par_parset2 1 +par_parset2 2 +par_parset2 3 +par_perlexpr_repl ### {= and =} in different groups separated by space +par_perlexpr_repl b +par_perlexpr_repl b +par_perlexpr_repl bb +par_perlexpr_repl bb +par_perlexpr_repl b{= b +par_perlexpr_repl b{=b +par_perlexpr_repl b {=a +par_perlexpr_repl {=a +par_perlexpr_repl {= a +par_perlexpr_repl {= a =} +par_perlexpr_repl ### bug #45842: Do not evaluate {= =} twice +par_perlexpr_repl 1 +par_perlexpr_repl 2 +par_perlexpr_repl 3 +par_perlexpr_repl 4 +par_perlexpr_repl 1 +par_perlexpr_repl 2 +par_perlexpr_repl 3 +par_perlexpr_repl 4 +par_perlexpr_repl 1 2 +par_perlexpr_repl 3 4 +par_perlexpr_repl 5 6 +par_perlexpr_repl 7 8 +par_perlexpr_repl 9 10 +par_perlexpr_repl 11 12 +par_perlexpr_repl 13 14 +par_perlexpr_repl 15 16 +par_perlexpr_repl 17 18 +par_perlexpr_repl 19 20 +par_perlexpr_repl 21 22 +par_perlexpr_repl 23 24 +par_perlexpr_repl 1 +par_perlexpr_repl 2 +par_perlexpr_repl 3 +par_perlexpr_repl 4 +par_perlexpr_repl 5 +par_perlexpr_repl 6 +par_perlexpr_repl 7 +par_perlexpr_repl 8 +par_perlexpr_repl 9 +par_perlexpr_repl 10 +par_perlexpr_repl 11 +par_perlexpr_repl 12 +par_perlexpr_repl ### bug #45939: {2} in {= =} fails +par_perlexpr_repl OK +par_perlexpr_repl OK-OK par_pipe_line_buffer ### --pipe --line-buffer par_pipe_line_buffer 200 400 1202 par_pipe_line_buffer These must diff: 1 par_pipe_line_buffer_compress ### --pipe --line-buffer --compress par_pipe_line_buffer_compress 200 400 1202 -par_plus_dyn_repl Dynamic replacement strings defined by --plus -par_plus_dyn_repl myval -par_plus_dyn_repl myval -par_plus_dyn_repl myval -par_plus_dyn_repl myval -par_plus_dyn_repl myval -par_plus_dyn_repl cAaAdef -par_plus_dyn_repl cAaAdef -par_plus_dyn_repl cAaAdef -par_plus_dyn_repl cAaAdef -par_plus_dyn_repl cAaAdef -par_plus_dyn_repl cAa -par_plus_dyn_repl cAa -par_plus_dyn_repl cAa -par_plus_dyn_repl cAa -par_plus_dyn_repl cAa -par_plus_dyn_repl 9 -par_plus_dyn_repl 9 -par_plus_dyn_repl 1 -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl AaAdef -par_plus_dyn_repl AaAdef -par_plus_dyn_repl AaAdef -par_plus_dyn_repl AaAdef -par_plus_dyn_repl AaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaA -par_plus_dyn_repl abcAaA -par_plus_dyn_repl abcAaA -par_plus_dyn_repl abcAaA -par_plus_dyn_repl abcAaA -par_plus_dyn_repl abcAaAghi -par_plus_dyn_repl abcAaAghi -par_plus_dyn_repl abcAaAghi -par_plus_dyn_repl abcAaAghi -par_plus_dyn_repl abcAaAghi -par_plus_dyn_repl AbcAaAdef -par_plus_dyn_repl AbcAaAdef -par_plus_dyn_repl AbcAaAdef -par_plus_dyn_repl AbcAaAdef -par_plus_dyn_repl AbcAaAdef -par_plus_dyn_repl AbcAAAdef -par_plus_dyn_repl AbcAAAdef -par_plus_dyn_repl AbcAAAdef -par_plus_dyn_repl AbcAAAdef -par_plus_dyn_repl AbcAAAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcAaAdef -par_plus_dyn_repl abcaaadef -par_plus_dyn_repl abcaaadef -par_plus_dyn_repl abcaaadef -par_plus_dyn_repl abcaaadef -par_plus_dyn_repl abcaaadef par_results_compress 0 par_results_compress 1 par_results_csv bug #: --results csv @@ -505,8 +582,6 @@ par_retries_all_fail 5 par_retries_all_fail 6 par_retries_all_fail 7 par_retries_all_fail 8 -par_round_robin_blocks bug #49664: --round-robin does not complete -par_round_robin_blocks 8 par_sem_2jobs ### Test semaphore 2 jobs running simultaneously par_sem_2jobs job1a 1 par_sem_2jobs job2a 2 @@ -541,3 +616,88 @@ par_sockets_cores_threads Threads should complete first on machines with less th par_tmux_fg bug #50107: --tmux --fg should also write how to access it par_tmux_fg See output with: tmux -S tmp attach par_tmux_fg open terminal failed: not a terminal +par_xargs_compat xargs compatibility +par_xargs_compat ### Test -L -l and --max-lines +par_xargs_compat a_b +par_xargs_compat c +par_xargs_compat a_b c +par_xargs_compat a_b c +par_xargs_compat ### xargs -L1 echo +par_xargs_compat a_b +par_xargs_compat c +par_xargs_compat a_b +par_xargs_compat c +par_xargs_compat a_b +par_xargs_compat c +par_xargs_compat Lines ending in space should continue on next line +par_xargs_compat ### xargs -L1 echo +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat ### xargs -L2 echo +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat ### xargs -l echo +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat ### xargs -l2 echo +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat ### xargs -l1 echo +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat ### xargs --max-lines=2 echo +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat a_b c d +par_xargs_compat e +par_xargs_compat ### xargs --max-lines echo +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +par_xargs_compat a_b c +par_xargs_compat d +par_xargs_compat e +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 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 ### 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 diff --git a/testsuite/wanted-results/parallel-local-1s b/testsuite/wanted-results/parallel-local-1s index 24b5d44e..1ce3b4d1 100644 --- a/testsuite/wanted-results/parallel-local-1s +++ b/testsuite/wanted-results/parallel-local-1s @@ -179,82 +179,6 @@ par_null_resume c par_null_resume A par_null_resume B par_null_resume C -par_parset ### test parset -par_parset Put output into $myarray -par_parset 10 -par_parset 11 -par_parset 12 -par_parset 13 -par_parset 14 -par_parset 15 -par_parset Put output into vars "$seq, $pwd, $ls" -par_parset 1 -par_parset 2 -par_parset 3 -par_parset 4 -par_parset 5 -par_parset 6 -par_parset 7 -par_parset 8 -par_parset 9 -par_parset 10 -par_parset Put output into vars ($seq, $pwd, $ls): -par_parset 1 -par_parset 2 -par_parset 3 -par_parset 4 -par_parset 5 -par_parset The commands to run can be an array -par_parset <> -par_parset ~/privat/parallel/testsuite -par_parset You cannot pipe into parset, but must use a tempfile -par_parset 1 -par_parset 10 -par_parset or process substitution -par_parset 0 -par_parset 9 -par_parset Commands with newline require -0 -par_parset line1 -par_parset line2 -par_parset2 ### parset into array -par_parset2 foo bar baz -par_parset2 ### parset into vars with comma -par_parset2 foo bar baz -par_parset2 ### parset into vars with space -par_parset2 foo bar baz -par_parset2 ### parset with newlines -par_parset2 1 -par_parset2 1 -par_parset2 2 -par_parset2 1 -par_parset2 2 -par_parset2 3 -par_parset2 ### parset into indexed array vars -par_parset2 foo bar baz -par_parset2 foo bar bar -par_parset2 ### env_parset -par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz -par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz -par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz -par_parset2 newline1 -par_parset2 newline2 -par_parset2 1 -par_parset2 newline1 -par_parset2 newline2 -par_parset2 1 -par_parset2 2 -par_parset2 newline1 -par_parset2 newline2 -par_parset2 1 -par_parset2 2 -par_parset2 3 -par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 baz -par_parset2 myecho myvar myarr 1 foo myecho myvar myarr 1 bar myecho myvar myarr 1 bar -par_parset2 bug #52507: parset arr1 -v echo ::: fails -par_parset2 seq 3 -par_parset2 1 -par_parset2 2 -par_parset2 3 par_pipe_compress_blocks ### bug #41482: --pipe --compress blocks at different -j/seq combinations par_pipe_compress_blocks 1 par_pipe_compress_blocks echo 1-4 + 1-4 diff --git a/testsuite/wanted-results/parallel-local-30s b/testsuite/wanted-results/parallel-local-30s index ef3599cc..aa57ce37 100644 --- a/testsuite/wanted-results/parallel-local-30s +++ b/testsuite/wanted-results/parallel-local-30s @@ -1,3 +1,5 @@ +par_keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results +par_keeporder_roundrobin OK par_linebuffer_files bug #48658: --linebuffer --files par_linebuffer_files zstd normal par_linebuffer_files zstd 100000 @@ -152,6 +154,70 @@ par_no_newline_compress tagstring=-k compress=-k par_no_newline_compress OK par_no_newline_compress tagstring=-k compress=-k par_no_newline_compress OK +par_plus_dyn_repl Dynamic replacement strings defined by --plus +par_plus_dyn_repl myval +par_plus_dyn_repl myval +par_plus_dyn_repl myval +par_plus_dyn_repl myval +par_plus_dyn_repl myval +par_plus_dyn_repl cAaAdef +par_plus_dyn_repl cAaAdef +par_plus_dyn_repl cAaAdef +par_plus_dyn_repl cAaAdef +par_plus_dyn_repl cAaAdef +par_plus_dyn_repl cAa +par_plus_dyn_repl cAa +par_plus_dyn_repl cAa +par_plus_dyn_repl cAa +par_plus_dyn_repl cAa +par_plus_dyn_repl 9 +par_plus_dyn_repl 9 +par_plus_dyn_repl 1 +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl AaAdef +par_plus_dyn_repl AaAdef +par_plus_dyn_repl AaAdef +par_plus_dyn_repl AaAdef +par_plus_dyn_repl AaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaA +par_plus_dyn_repl abcAaA +par_plus_dyn_repl abcAaA +par_plus_dyn_repl abcAaA +par_plus_dyn_repl abcAaA +par_plus_dyn_repl abcAaAghi +par_plus_dyn_repl abcAaAghi +par_plus_dyn_repl abcAaAghi +par_plus_dyn_repl abcAaAghi +par_plus_dyn_repl abcAaAghi +par_plus_dyn_repl AbcAaAdef +par_plus_dyn_repl AbcAaAdef +par_plus_dyn_repl AbcAaAdef +par_plus_dyn_repl AbcAaAdef +par_plus_dyn_repl AbcAaAdef +par_plus_dyn_repl AbcAAAdef +par_plus_dyn_repl AbcAAAdef +par_plus_dyn_repl AbcAAAdef +par_plus_dyn_repl AbcAAAdef +par_plus_dyn_repl AbcAAAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcAaAdef +par_plus_dyn_repl abcaaadef +par_plus_dyn_repl abcaaadef +par_plus_dyn_repl abcaaadef +par_plus_dyn_repl abcaaadef +par_plus_dyn_repl abcaaadef par_race_condition1 ### Test race condition on 8 CPU (my laptop) par_race_condition1 1 par_race_condition1 2 @@ -163,6 +229,8 @@ par_race_condition1 7 par_race_condition1 8 par_race_condition1 9 par_race_condition1 10 +par_round_robin_blocks bug #49664: --round-robin does not complete +par_round_robin_blocks 8 par_shellquote ### Test --shellquote in all shells par_shellquote ash ' par_shellquote ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' diff --git a/testsuite/wanted-results/parallel-local-3s b/testsuite/wanted-results/parallel-local-3s index d874d7f6..d2b0b06a 100644 --- a/testsuite/wanted-results/parallel-local-3s +++ b/testsuite/wanted-results/parallel-local-3s @@ -37,6 +37,54 @@ par_delay_human_readable c par_delay_human_readable a par_delay_human_readable b par_delay_human_readable c +par_distribute_args_at_EOF ### Test distribute arguments at EOF to 2 jobslots +par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 +par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 +par_distribute_args_at_EOF 66 67 68 69 70 71 72 73 74 75 76 77 78 79 +par_distribute_args_at_EOF 80 81 82 83 84 85 86 87 88 89 90 91 92 +par_distribute_args_at_EOF ### Test distribute arguments at EOF to 5 jobslots +par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 +par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 +par_distribute_args_at_EOF 66 67 68 69 70 71 +par_distribute_args_at_EOF 72 73 74 75 76 77 +par_distribute_args_at_EOF 78 79 80 81 82 83 +par_distribute_args_at_EOF 84 85 86 87 88 89 +par_distribute_args_at_EOF 90 91 92 +par_distribute_args_at_EOF ### Test distribute arguments at EOF to infinity jobslots +par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 +par_distribute_args_at_EOF 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 +par_distribute_args_at_EOF 66 +par_distribute_args_at_EOF 67 +par_distribute_args_at_EOF 68 +par_distribute_args_at_EOF 69 +par_distribute_args_at_EOF 70 +par_distribute_args_at_EOF 71 +par_distribute_args_at_EOF 72 +par_distribute_args_at_EOF 73 +par_distribute_args_at_EOF 74 +par_distribute_args_at_EOF 75 +par_distribute_args_at_EOF 76 +par_distribute_args_at_EOF 77 +par_distribute_args_at_EOF 78 +par_distribute_args_at_EOF 79 +par_distribute_args_at_EOF 80 +par_distribute_args_at_EOF 81 +par_distribute_args_at_EOF 82 +par_distribute_args_at_EOF 83 +par_distribute_args_at_EOF 84 +par_distribute_args_at_EOF 85 +par_distribute_args_at_EOF 86 +par_distribute_args_at_EOF 87 +par_distribute_args_at_EOF 88 +par_distribute_args_at_EOF 89 +par_distribute_args_at_EOF 90 +par_distribute_args_at_EOF 91 +par_distribute_args_at_EOF 92 +par_distribute_args_at_EOF ### Test -N is not broken by distribution - single line +par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 +par_distribute_args_at_EOF ### Test -N is not broken by distribution - two lines +par_distribute_args_at_EOF 1 2 3 4 5 6 7 8 9 10 +par_distribute_args_at_EOF 11 12 13 14 15 16 17 18 19 par_do_not_export_PARALLEL_ENV ### Do not export $PARALLEL_ENV to children par_do_not_export_PARALLEL_ENV Should be 0 par_do_not_export_PARALLEL_ENV 1 0 1 @@ -49,7 +97,7 @@ par_exitval_signal exitval=128+6 OK par_exitval_signal signal OK par_groupby -N1 3 $_%=2 tsv \t ### test tsv | --colsep \t --groupby 3 $_%=2 -N1 par_groupby -N1 3 $_%=2 tsv \t NewRec -par_groupby -N1 3 $_%=2 tsv \t a1 b1 c1 +par_groupby -N1 3 $_%=2 tsv \t a1 b1 C1 par_groupby -N1 3 $_%=2 tsv \t 2 2 2 par_groupby -N1 3 $_%=2 tsv \t 3 2 2 par_groupby -N1 3 $_%=2 tsv \t 3 3 2 @@ -59,7 +107,7 @@ par_groupby -N1 3 $_%=2 tsv \t NewRec par_groupby -N1 3 $_%=2 tsv \t 3 2 3 par_groupby -N1 3 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 $_%=2 -N1 par_groupby -N1 3 $_%=2 ssv \s+ NewRec -par_groupby -N1 3 $_%=2 ssv \s+ a1 b1 c1 +par_groupby -N1 3 $_%=2 ssv \s+ a1 b1 C1 par_groupby -N1 3 $_%=2 ssv \s+ 2 2 2 par_groupby -N1 3 $_%=2 ssv \s+ 3 2 2 par_groupby -N1 3 $_%=2 ssv \s+ 3 3 2 @@ -69,7 +117,7 @@ par_groupby -N1 3 $_%=2 ssv \s+ NewRec par_groupby -N1 3 $_%=2 ssv \s+ 3 2 3 par_groupby -N1 3 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 $_%=2 -N1 par_groupby -N1 3 $_%=2 cssv [\s,]+ NewRec -par_groupby -N1 3 $_%=2 cssv [\s,]+ a1, b1, c1, +par_groupby -N1 3 $_%=2 cssv [\s,]+ a1, b1, C1, par_groupby -N1 3 $_%=2 cssv [\s,]+ 2 ,2 ,2 , par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 , 2 , 2 , par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 , 3 , 2 , @@ -79,7 +127,7 @@ par_groupby -N1 3 $_%=2 cssv [\s,]+ NewRec par_groupby -N1 3 $_%=2 cssv [\s,]+ 3 2 3 par_groupby -N1 3 $_%=2 csv , ### test csv | --colsep , --groupby 3 $_%=2 -N1 par_groupby -N1 3 $_%=2 csv , NewRec -par_groupby -N1 3 $_%=2 csv , a1,b1,c1, +par_groupby -N1 3 $_%=2 csv , a1,b1,C1, par_groupby -N1 3 $_%=2 csv , 2,2,2, par_groupby -N1 3 $_%=2 csv , 3,2,2, par_groupby -N1 3 $_%=2 csv , 3,3,2, @@ -89,7 +137,7 @@ par_groupby -N1 3 $_%=2 csv , NewRec par_groupby -N1 3 $_%=2 csv , 3,2,3, par_groupby -N1 3 tsv \t ### test tsv | --colsep \t --groupby 3 -N1 par_groupby -N1 3 tsv \t NewRec -par_groupby -N1 3 tsv \t a1 b1 c1 +par_groupby -N1 3 tsv \t a1 b1 C1 par_groupby -N1 3 tsv \t NewRec par_groupby -N1 3 tsv \t 2 2 2 par_groupby -N1 3 tsv \t 3 2 2 @@ -102,7 +150,7 @@ par_groupby -N1 3 tsv \t NewRec par_groupby -N1 3 tsv \t 3 2 3 par_groupby -N1 3 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 -N1 par_groupby -N1 3 ssv \s+ NewRec -par_groupby -N1 3 ssv \s+ a1 b1 c1 +par_groupby -N1 3 ssv \s+ a1 b1 C1 par_groupby -N1 3 ssv \s+ NewRec par_groupby -N1 3 ssv \s+ 2 2 2 par_groupby -N1 3 ssv \s+ 3 2 2 @@ -115,7 +163,7 @@ par_groupby -N1 3 ssv \s+ NewRec par_groupby -N1 3 ssv \s+ 3 2 3 par_groupby -N1 3 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 -N1 par_groupby -N1 3 cssv [\s,]+ NewRec -par_groupby -N1 3 cssv [\s,]+ a1, b1, c1, +par_groupby -N1 3 cssv [\s,]+ a1, b1, C1, par_groupby -N1 3 cssv [\s,]+ NewRec par_groupby -N1 3 cssv [\s,]+ 2 ,2 ,2 , par_groupby -N1 3 cssv [\s,]+ 3 , 2 , 2 , @@ -128,7 +176,7 @@ par_groupby -N1 3 cssv [\s,]+ NewRec par_groupby -N1 3 cssv [\s,]+ 3 2 3 par_groupby -N1 3 csv , ### test csv | --colsep , --groupby 3 -N1 par_groupby -N1 3 csv , NewRec -par_groupby -N1 3 csv , a1,b1,c1, +par_groupby -N1 3 csv , a1,b1,C1, par_groupby -N1 3 csv , NewRec par_groupby -N1 3 csv , 2,2,2, par_groupby -N1 3 csv , 3,2,2, @@ -141,7 +189,7 @@ par_groupby -N1 3 csv , NewRec par_groupby -N1 3 csv , 3,2,3, par_groupby -N1 s/^(.).*/$1/ tsv \t ### test tsv | --colsep \t --groupby s/^(.).*/$1/ -N1 par_groupby -N1 s/^(.).*/$1/ tsv \t NewRec -par_groupby -N1 s/^(.).*/$1/ tsv \t a1 b1 c1 +par_groupby -N1 s/^(.).*/$1/ tsv \t a1 b1 C1 par_groupby -N1 s/^(.).*/$1/ tsv \t NewRec par_groupby -N1 s/^(.).*/$1/ tsv \t 2 2 2 par_groupby -N1 s/^(.).*/$1/ tsv \t NewRec @@ -152,7 +200,7 @@ par_groupby -N1 s/^(.).*/$1/ tsv \t 3 2 2 par_groupby -N1 s/^(.).*/$1/ tsv \t 3 2 3 par_groupby -N1 s/^(.).*/$1/ ssv \s+ ### test ssv | --colsep \s+ --groupby s/^(.).*/$1/ -N1 par_groupby -N1 s/^(.).*/$1/ ssv \s+ NewRec -par_groupby -N1 s/^(.).*/$1/ ssv \s+ a1 b1 c1 +par_groupby -N1 s/^(.).*/$1/ ssv \s+ a1 b1 C1 par_groupby -N1 s/^(.).*/$1/ ssv \s+ NewRec par_groupby -N1 s/^(.).*/$1/ ssv \s+ 2 2 2 par_groupby -N1 s/^(.).*/$1/ ssv \s+ NewRec @@ -163,7 +211,7 @@ par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 2 2 par_groupby -N1 s/^(.).*/$1/ ssv \s+ 3 2 3 par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby s/^(.).*/$1/ -N1 par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ NewRec -par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ a1, b1, c1, +par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ a1, b1, C1, par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ NewRec par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 2 ,2 ,2 , par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ NewRec @@ -174,7 +222,7 @@ par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, par_groupby -N1 s/^(.).*/$1/ cssv [\s,]+ 3 2 3 par_groupby -N1 s/^(.).*/$1/ csv , ### test csv | --colsep , --groupby s/^(.).*/$1/ -N1 par_groupby -N1 s/^(.).*/$1/ csv , NewRec -par_groupby -N1 s/^(.).*/$1/ csv , a1,b1,c1, +par_groupby -N1 s/^(.).*/$1/ csv , a1,b1,C1, par_groupby -N1 s/^(.).*/$1/ csv , NewRec par_groupby -N1 s/^(.).*/$1/ csv , 2,2,2, par_groupby -N1 s/^(.).*/$1/ csv , NewRec @@ -183,113 +231,113 @@ par_groupby -N1 s/^(.).*/$1/ csv , 3,3,2, par_groupby -N1 s/^(.).*/$1/ csv , 3,2,4, par_groupby -N1 s/^(.).*/$1/ csv , 3,2,2, par_groupby -N1 s/^(.).*/$1/ csv , 3,2,3, -par_groupby -N1 c1 tsv \t ### test tsv | --colsep \t --groupby c1 -N1 -par_groupby -N1 c1 tsv \t NewRec -par_groupby -N1 c1 tsv \t a1 b1 c1 -par_groupby -N1 c1 tsv \t 2 2 2 -par_groupby -N1 c1 tsv \t 3 2 2 -par_groupby -N1 c1 tsv \t 3 3 2 -par_groupby -N1 c1 tsv \t NewRec -par_groupby -N1 c1 tsv \t a1 b1 c1 -par_groupby -N1 c1 tsv \t 3 2 4 -par_groupby -N1 c1 tsv \t NewRec -par_groupby -N1 c1 tsv \t a1 b1 c1 -par_groupby -N1 c1 tsv \t 3 2 2 -par_groupby -N1 c1 tsv \t NewRec -par_groupby -N1 c1 tsv \t a1 b1 c1 -par_groupby -N1 c1 tsv \t 3 2 3 -par_groupby -N1 c1 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 -N1 -par_groupby -N1 c1 ssv \s+ NewRec -par_groupby -N1 c1 ssv \s+ a1 b1 c1 -par_groupby -N1 c1 ssv \s+ 2 2 2 -par_groupby -N1 c1 ssv \s+ 3 2 2 -par_groupby -N1 c1 ssv \s+ 3 3 2 -par_groupby -N1 c1 ssv \s+ NewRec -par_groupby -N1 c1 ssv \s+ a1 b1 c1 -par_groupby -N1 c1 ssv \s+ 3 2 4 -par_groupby -N1 c1 ssv \s+ NewRec -par_groupby -N1 c1 ssv \s+ a1 b1 c1 -par_groupby -N1 c1 ssv \s+ 3 2 2 -par_groupby -N1 c1 ssv \s+ NewRec -par_groupby -N1 c1 ssv \s+ a1 b1 c1 -par_groupby -N1 c1 ssv \s+ 3 2 3 -par_groupby -N1 c1 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 -N1 -par_groupby -N1 c1 cssv [\s,]+ NewRec -par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1, -par_groupby -N1 c1 cssv [\s,]+ 2 ,2 ,2 , -par_groupby -N1 c1 cssv [\s,]+ 3 , 2 , 2 , -par_groupby -N1 c1 cssv [\s,]+ 3 , 3 , 2 , -par_groupby -N1 c1 cssv [\s,]+ NewRec -par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1, -par_groupby -N1 c1 cssv [\s,]+ 3,,2,,4,, -par_groupby -N1 c1 cssv [\s,]+ NewRec -par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1, -par_groupby -N1 c1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, -par_groupby -N1 c1 cssv [\s,]+ NewRec -par_groupby -N1 c1 cssv [\s,]+ a1, b1, c1, -par_groupby -N1 c1 cssv [\s,]+ 3 2 3 -par_groupby -N1 c1 csv , ### test csv | --colsep , --groupby c1 -N1 -par_groupby -N1 c1 csv , NewRec -par_groupby -N1 c1 csv , a1,b1,c1, -par_groupby -N1 c1 csv , 2,2,2, -par_groupby -N1 c1 csv , 3,2,2, -par_groupby -N1 c1 csv , 3,3,2, -par_groupby -N1 c1 csv , NewRec -par_groupby -N1 c1 csv , a1,b1,c1, -par_groupby -N1 c1 csv , 3,2,4, -par_groupby -N1 c1 csv , NewRec -par_groupby -N1 c1 csv , a1,b1,c1, -par_groupby -N1 c1 csv , 3,2,2, -par_groupby -N1 c1 csv , NewRec -par_groupby -N1 c1 csv , a1,b1,c1, -par_groupby -N1 c1 csv , 3,2,3, -par_groupby -N1 c1 $_%=2 tsv \t ### test tsv | --colsep \t --groupby c1 $_%=2 -N1 -par_groupby -N1 c1 $_%=2 tsv \t NewRec -par_groupby -N1 c1 $_%=2 tsv \t a1 b1 c1 -par_groupby -N1 c1 $_%=2 tsv \t 2 2 2 -par_groupby -N1 c1 $_%=2 tsv \t 3 2 2 -par_groupby -N1 c1 $_%=2 tsv \t 3 3 2 -par_groupby -N1 c1 $_%=2 tsv \t 3 2 4 -par_groupby -N1 c1 $_%=2 tsv \t 3 2 2 -par_groupby -N1 c1 $_%=2 tsv \t NewRec -par_groupby -N1 c1 $_%=2 tsv \t a1 b1 c1 -par_groupby -N1 c1 $_%=2 tsv \t 3 2 3 -par_groupby -N1 c1 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 $_%=2 -N1 -par_groupby -N1 c1 $_%=2 ssv \s+ NewRec -par_groupby -N1 c1 $_%=2 ssv \s+ a1 b1 c1 -par_groupby -N1 c1 $_%=2 ssv \s+ 2 2 2 -par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 2 -par_groupby -N1 c1 $_%=2 ssv \s+ 3 3 2 -par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 4 -par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 2 -par_groupby -N1 c1 $_%=2 ssv \s+ NewRec -par_groupby -N1 c1 $_%=2 ssv \s+ a1 b1 c1 -par_groupby -N1 c1 $_%=2 ssv \s+ 3 2 3 -par_groupby -N1 c1 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 $_%=2 -N1 -par_groupby -N1 c1 $_%=2 cssv [\s,]+ NewRec -par_groupby -N1 c1 $_%=2 cssv [\s,]+ a1, b1, c1, -par_groupby -N1 c1 $_%=2 cssv [\s,]+ 2 ,2 ,2 , -par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 , 2 , 2 , -par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 , 3 , 2 , -par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3,,2,,4,, -par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, -par_groupby -N1 c1 $_%=2 cssv [\s,]+ NewRec -par_groupby -N1 c1 $_%=2 cssv [\s,]+ a1, b1, c1, -par_groupby -N1 c1 $_%=2 cssv [\s,]+ 3 2 3 -par_groupby -N1 c1 $_%=2 csv , ### test csv | --colsep , --groupby c1 $_%=2 -N1 -par_groupby -N1 c1 $_%=2 csv , NewRec -par_groupby -N1 c1 $_%=2 csv , a1,b1,c1, -par_groupby -N1 c1 $_%=2 csv , 2,2,2, -par_groupby -N1 c1 $_%=2 csv , 3,2,2, -par_groupby -N1 c1 $_%=2 csv , 3,3,2, -par_groupby -N1 c1 $_%=2 csv , 3,2,4, -par_groupby -N1 c1 $_%=2 csv , 3,2,2, -par_groupby -N1 c1 $_%=2 csv , NewRec -par_groupby -N1 c1 $_%=2 csv , a1,b1,c1, -par_groupby -N1 c1 $_%=2 csv , 3,2,3, +par_groupby -N1 C1 tsv \t ### test tsv | --colsep \t --groupby C1 -N1 +par_groupby -N1 C1 tsv \t NewRec +par_groupby -N1 C1 tsv \t a1 b1 C1 +par_groupby -N1 C1 tsv \t 2 2 2 +par_groupby -N1 C1 tsv \t 3 2 2 +par_groupby -N1 C1 tsv \t 3 3 2 +par_groupby -N1 C1 tsv \t NewRec +par_groupby -N1 C1 tsv \t a1 b1 C1 +par_groupby -N1 C1 tsv \t 3 2 4 +par_groupby -N1 C1 tsv \t NewRec +par_groupby -N1 C1 tsv \t a1 b1 C1 +par_groupby -N1 C1 tsv \t 3 2 2 +par_groupby -N1 C1 tsv \t NewRec +par_groupby -N1 C1 tsv \t a1 b1 C1 +par_groupby -N1 C1 tsv \t 3 2 3 +par_groupby -N1 C1 ssv \s+ ### test ssv | --colsep \s+ --groupby C1 -N1 +par_groupby -N1 C1 ssv \s+ NewRec +par_groupby -N1 C1 ssv \s+ a1 b1 C1 +par_groupby -N1 C1 ssv \s+ 2 2 2 +par_groupby -N1 C1 ssv \s+ 3 2 2 +par_groupby -N1 C1 ssv \s+ 3 3 2 +par_groupby -N1 C1 ssv \s+ NewRec +par_groupby -N1 C1 ssv \s+ a1 b1 C1 +par_groupby -N1 C1 ssv \s+ 3 2 4 +par_groupby -N1 C1 ssv \s+ NewRec +par_groupby -N1 C1 ssv \s+ a1 b1 C1 +par_groupby -N1 C1 ssv \s+ 3 2 2 +par_groupby -N1 C1 ssv \s+ NewRec +par_groupby -N1 C1 ssv \s+ a1 b1 C1 +par_groupby -N1 C1 ssv \s+ 3 2 3 +par_groupby -N1 C1 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby C1 -N1 +par_groupby -N1 C1 cssv [\s,]+ NewRec +par_groupby -N1 C1 cssv [\s,]+ a1, b1, C1, +par_groupby -N1 C1 cssv [\s,]+ 2 ,2 ,2 , +par_groupby -N1 C1 cssv [\s,]+ 3 , 2 , 2 , +par_groupby -N1 C1 cssv [\s,]+ 3 , 3 , 2 , +par_groupby -N1 C1 cssv [\s,]+ NewRec +par_groupby -N1 C1 cssv [\s,]+ a1, b1, C1, +par_groupby -N1 C1 cssv [\s,]+ 3,,2,,4,, +par_groupby -N1 C1 cssv [\s,]+ NewRec +par_groupby -N1 C1 cssv [\s,]+ a1, b1, C1, +par_groupby -N1 C1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, +par_groupby -N1 C1 cssv [\s,]+ NewRec +par_groupby -N1 C1 cssv [\s,]+ a1, b1, C1, +par_groupby -N1 C1 cssv [\s,]+ 3 2 3 +par_groupby -N1 C1 csv , ### test csv | --colsep , --groupby C1 -N1 +par_groupby -N1 C1 csv , NewRec +par_groupby -N1 C1 csv , a1,b1,C1, +par_groupby -N1 C1 csv , 2,2,2, +par_groupby -N1 C1 csv , 3,2,2, +par_groupby -N1 C1 csv , 3,3,2, +par_groupby -N1 C1 csv , NewRec +par_groupby -N1 C1 csv , a1,b1,C1, +par_groupby -N1 C1 csv , 3,2,4, +par_groupby -N1 C1 csv , NewRec +par_groupby -N1 C1 csv , a1,b1,C1, +par_groupby -N1 C1 csv , 3,2,2, +par_groupby -N1 C1 csv , NewRec +par_groupby -N1 C1 csv , a1,b1,C1, +par_groupby -N1 C1 csv , 3,2,3, +par_groupby -N1 C1 $_%=2 tsv \t ### test tsv | --colsep \t --groupby C1 $_%=2 -N1 +par_groupby -N1 C1 $_%=2 tsv \t NewRec +par_groupby -N1 C1 $_%=2 tsv \t a1 b1 C1 +par_groupby -N1 C1 $_%=2 tsv \t 2 2 2 +par_groupby -N1 C1 $_%=2 tsv \t 3 2 2 +par_groupby -N1 C1 $_%=2 tsv \t 3 3 2 +par_groupby -N1 C1 $_%=2 tsv \t 3 2 4 +par_groupby -N1 C1 $_%=2 tsv \t 3 2 2 +par_groupby -N1 C1 $_%=2 tsv \t NewRec +par_groupby -N1 C1 $_%=2 tsv \t a1 b1 C1 +par_groupby -N1 C1 $_%=2 tsv \t 3 2 3 +par_groupby -N1 C1 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby C1 $_%=2 -N1 +par_groupby -N1 C1 $_%=2 ssv \s+ NewRec +par_groupby -N1 C1 $_%=2 ssv \s+ a1 b1 C1 +par_groupby -N1 C1 $_%=2 ssv \s+ 2 2 2 +par_groupby -N1 C1 $_%=2 ssv \s+ 3 2 2 +par_groupby -N1 C1 $_%=2 ssv \s+ 3 3 2 +par_groupby -N1 C1 $_%=2 ssv \s+ 3 2 4 +par_groupby -N1 C1 $_%=2 ssv \s+ 3 2 2 +par_groupby -N1 C1 $_%=2 ssv \s+ NewRec +par_groupby -N1 C1 $_%=2 ssv \s+ a1 b1 C1 +par_groupby -N1 C1 $_%=2 ssv \s+ 3 2 3 +par_groupby -N1 C1 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby C1 $_%=2 -N1 +par_groupby -N1 C1 $_%=2 cssv [\s,]+ NewRec +par_groupby -N1 C1 $_%=2 cssv [\s,]+ a1, b1, C1, +par_groupby -N1 C1 $_%=2 cssv [\s,]+ 2 ,2 ,2 , +par_groupby -N1 C1 $_%=2 cssv [\s,]+ 3 , 2 , 2 , +par_groupby -N1 C1 $_%=2 cssv [\s,]+ 3 , 3 , 2 , +par_groupby -N1 C1 $_%=2 cssv [\s,]+ 3,,2,,4,, +par_groupby -N1 C1 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, +par_groupby -N1 C1 $_%=2 cssv [\s,]+ NewRec +par_groupby -N1 C1 $_%=2 cssv [\s,]+ a1, b1, C1, +par_groupby -N1 C1 $_%=2 cssv [\s,]+ 3 2 3 +par_groupby -N1 C1 $_%=2 csv , ### test csv | --colsep , --groupby C1 $_%=2 -N1 +par_groupby -N1 C1 $_%=2 csv , NewRec +par_groupby -N1 C1 $_%=2 csv , a1,b1,C1, +par_groupby -N1 C1 $_%=2 csv , 2,2,2, +par_groupby -N1 C1 $_%=2 csv , 3,2,2, +par_groupby -N1 C1 $_%=2 csv , 3,3,2, +par_groupby -N1 C1 $_%=2 csv , 3,2,4, +par_groupby -N1 C1 $_%=2 csv , 3,2,2, +par_groupby -N1 C1 $_%=2 csv , NewRec +par_groupby -N1 C1 $_%=2 csv , a1,b1,C1, +par_groupby -N1 C1 $_%=2 csv , 3,2,3, par_groupby --block 20 3 $_%=2 tsv \t ### test tsv | --colsep \t --groupby 3 $_%=2 --block 20 par_groupby --block 20 3 $_%=2 tsv \t NewRec -par_groupby --block 20 3 $_%=2 tsv \t a1 b1 c1 +par_groupby --block 20 3 $_%=2 tsv \t a1 b1 C1 par_groupby --block 20 3 $_%=2 tsv \t 2 2 2 par_groupby --block 20 3 $_%=2 tsv \t 3 2 2 par_groupby --block 20 3 $_%=2 tsv \t 3 3 2 @@ -303,7 +351,7 @@ par_groupby --block 20 3 $_%=2 tsv \t parallel: Warning: A record was longer tha par_groupby --block 20 3 $_%=2 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. par_groupby --block 20 3 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 $_%=2 --block 20 par_groupby --block 20 3 $_%=2 ssv \s+ NewRec -par_groupby --block 20 3 $_%=2 ssv \s+ a1 b1 c1 +par_groupby --block 20 3 $_%=2 ssv \s+ a1 b1 C1 par_groupby --block 20 3 $_%=2 ssv \s+ 2 2 2 par_groupby --block 20 3 $_%=2 ssv \s+ 3 2 2 par_groupby --block 20 3 $_%=2 ssv \s+ 3 3 2 @@ -318,7 +366,7 @@ par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer th par_groupby --block 20 3 $_%=2 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. par_groupby --block 20 3 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 $_%=2 --block 20 par_groupby --block 20 3 $_%=2 cssv [\s,]+ NewRec -par_groupby --block 20 3 $_%=2 cssv [\s,]+ a1, b1, c1, +par_groupby --block 20 3 $_%=2 cssv [\s,]+ a1, b1, C1, par_groupby --block 20 3 $_%=2 cssv [\s,]+ 2 ,2 ,2 , par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3 , 2 , 2 , par_groupby --block 20 3 $_%=2 cssv [\s,]+ 3 , 3 , 2 , @@ -333,7 +381,7 @@ par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longe par_groupby --block 20 3 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 87. Increasing to --blocksize 115. par_groupby --block 20 3 $_%=2 csv , ### test csv | --colsep , --groupby 3 $_%=2 --block 20 par_groupby --block 20 3 $_%=2 csv , NewRec -par_groupby --block 20 3 $_%=2 csv , a1,b1,c1, +par_groupby --block 20 3 $_%=2 csv , a1,b1,C1, par_groupby --block 20 3 $_%=2 csv , 2,2,2, par_groupby --block 20 3 $_%=2 csv , 3,2,2, par_groupby --block 20 3 $_%=2 csv , 3,3,2, @@ -347,7 +395,7 @@ par_groupby --block 20 3 $_%=2 csv , parallel: Warning: A record was longer than par_groupby --block 20 3 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. par_groupby --block 20 3 tsv \t ### test tsv | --colsep \t --groupby 3 --block 20 par_groupby --block 20 3 tsv \t NewRec -par_groupby --block 20 3 tsv \t a1 b1 c1 +par_groupby --block 20 3 tsv \t a1 b1 C1 par_groupby --block 20 3 tsv \t NewRec par_groupby --block 20 3 tsv \t 2 2 2 par_groupby --block 20 3 tsv \t 3 2 2 @@ -363,7 +411,7 @@ par_groupby --block 20 3 tsv \t parallel: Warning: A record was longer than 37. par_groupby --block 20 3 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. par_groupby --block 20 3 ssv \s+ ### test ssv | --colsep \s+ --groupby 3 --block 20 par_groupby --block 20 3 ssv \s+ NewRec -par_groupby --block 20 3 ssv \s+ a1 b1 c1 +par_groupby --block 20 3 ssv \s+ a1 b1 C1 par_groupby --block 20 3 ssv \s+ NewRec par_groupby --block 20 3 ssv \s+ 2 2 2 par_groupby --block 20 3 ssv \s+ 3 2 2 @@ -380,7 +428,7 @@ par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 50. par_groupby --block 20 3 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. par_groupby --block 20 3 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby 3 --block 20 par_groupby --block 20 3 cssv [\s,]+ NewRec -par_groupby --block 20 3 cssv [\s,]+ a1, b1, c1, +par_groupby --block 20 3 cssv [\s,]+ a1, b1, C1, par_groupby --block 20 3 cssv [\s,]+ NewRec par_groupby --block 20 3 cssv [\s,]+ 2 ,2 ,2 , par_groupby --block 20 3 cssv [\s,]+ 3 , 2 , 2 , @@ -397,7 +445,7 @@ par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than par_groupby --block 20 3 cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. par_groupby --block 20 3 csv , ### test csv | --colsep , --groupby 3 --block 20 par_groupby --block 20 3 csv , NewRec -par_groupby --block 20 3 csv , a1,b1,c1, +par_groupby --block 20 3 csv , a1,b1,C1, par_groupby --block 20 3 csv , NewRec par_groupby --block 20 3 csv , 2,2,2, par_groupby --block 20 3 csv , 3,2,2, @@ -413,7 +461,7 @@ par_groupby --block 20 3 csv , parallel: Warning: A record was longer than 37. I par_groupby --block 20 3 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. par_groupby --block 20 s/^(.).*/$1/ tsv \t ### test tsv | --colsep \t --groupby s/^(.).*/$1/ --block 20 par_groupby --block 20 s/^(.).*/$1/ tsv \t NewRec -par_groupby --block 20 s/^(.).*/$1/ tsv \t a1 b1 c1 +par_groupby --block 20 s/^(.).*/$1/ tsv \t a1 b1 C1 par_groupby --block 20 s/^(.).*/$1/ tsv \t NewRec par_groupby --block 20 s/^(.).*/$1/ tsv \t 2 2 2 par_groupby --block 20 s/^(.).*/$1/ tsv \t NewRec @@ -428,7 +476,7 @@ par_groupby --block 20 s/^(.).*/$1/ tsv \t parallel: Warning: A record was longe par_groupby --block 20 s/^(.).*/$1/ tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. par_groupby --block 20 s/^(.).*/$1/ ssv \s+ ### test ssv | --colsep \s+ --groupby s/^(.).*/$1/ --block 20 par_groupby --block 20 s/^(.).*/$1/ ssv \s+ NewRec -par_groupby --block 20 s/^(.).*/$1/ ssv \s+ a1 b1 c1 +par_groupby --block 20 s/^(.).*/$1/ ssv \s+ a1 b1 C1 par_groupby --block 20 s/^(.).*/$1/ ssv \s+ NewRec par_groupby --block 20 s/^(.).*/$1/ ssv \s+ 2 2 2 par_groupby --block 20 s/^(.).*/$1/ ssv \s+ NewRec @@ -444,7 +492,7 @@ par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was long par_groupby --block 20 s/^(.).*/$1/ ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby s/^(.).*/$1/ --block 20 par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ NewRec -par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ a1, b1, c1, +par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ a1, b1, C1, par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ NewRec par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ 2 ,2 ,2 , par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ NewRec @@ -460,7 +508,7 @@ par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was par_groupby --block 20 s/^(.).*/$1/ cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. par_groupby --block 20 s/^(.).*/$1/ csv , ### test csv | --colsep , --groupby s/^(.).*/$1/ --block 20 par_groupby --block 20 s/^(.).*/$1/ csv , NewRec -par_groupby --block 20 s/^(.).*/$1/ csv , a1,b1,c1, +par_groupby --block 20 s/^(.).*/$1/ csv , a1,b1,C1, par_groupby --block 20 s/^(.).*/$1/ csv , NewRec par_groupby --block 20 s/^(.).*/$1/ csv , 2,2,2, par_groupby --block 20 s/^(.).*/$1/ csv , NewRec @@ -473,134 +521,163 @@ par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. par_groupby --block 20 s/^(.).*/$1/ csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. -par_groupby --block 20 c1 tsv \t ### test tsv | --colsep \t --groupby c1 --block 20 -par_groupby --block 20 c1 tsv \t NewRec -par_groupby --block 20 c1 tsv \t a1 b1 c1 -par_groupby --block 20 c1 tsv \t 2 2 2 -par_groupby --block 20 c1 tsv \t 3 2 2 -par_groupby --block 20 c1 tsv \t 3 3 2 -par_groupby --block 20 c1 tsv \t NewRec -par_groupby --block 20 c1 tsv \t a1 b1 c1 -par_groupby --block 20 c1 tsv \t 3 2 4 -par_groupby --block 20 c1 tsv \t NewRec -par_groupby --block 20 c1 tsv \t a1 b1 c1 -par_groupby --block 20 c1 tsv \t 3 2 2 -par_groupby --block 20 c1 tsv \t NewRec -par_groupby --block 20 c1 tsv \t a1 b1 c1 -par_groupby --block 20 c1 tsv \t 3 2 3 -par_groupby --block 20 c1 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 --block 20 -par_groupby --block 20 c1 ssv \s+ NewRec -par_groupby --block 20 c1 ssv \s+ a1 b1 c1 -par_groupby --block 20 c1 ssv \s+ 2 2 2 -par_groupby --block 20 c1 ssv \s+ 3 2 2 -par_groupby --block 20 c1 ssv \s+ 3 3 2 -par_groupby --block 20 c1 ssv \s+ NewRec -par_groupby --block 20 c1 ssv \s+ a1 b1 c1 -par_groupby --block 20 c1 ssv \s+ 3 2 4 -par_groupby --block 20 c1 ssv \s+ NewRec -par_groupby --block 20 c1 ssv \s+ a1 b1 c1 -par_groupby --block 20 c1 ssv \s+ 3 2 2 -par_groupby --block 20 c1 ssv \s+ NewRec -par_groupby --block 20 c1 ssv \s+ a1 b1 c1 -par_groupby --block 20 c1 ssv \s+ 3 2 3 -par_groupby --block 20 c1 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 --block 20 -par_groupby --block 20 c1 cssv [\s,]+ NewRec -par_groupby --block 20 c1 cssv [\s,]+ a1, b1, c1, -par_groupby --block 20 c1 cssv [\s,]+ 2 ,2 ,2 , -par_groupby --block 20 c1 cssv [\s,]+ 3 , 2 , 2 , -par_groupby --block 20 c1 cssv [\s,]+ 3 , 3 , 2 , -par_groupby --block 20 c1 cssv [\s,]+ NewRec -par_groupby --block 20 c1 cssv [\s,]+ a1, b1, c1, -par_groupby --block 20 c1 cssv [\s,]+ 3,,2,,4,, -par_groupby --block 20 c1 cssv [\s,]+ NewRec -par_groupby --block 20 c1 cssv [\s,]+ a1, b1, c1, -par_groupby --block 20 c1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, -par_groupby --block 20 c1 cssv [\s,]+ 3 2 3 -par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. -par_groupby --block 20 c1 csv , ### test csv | --colsep , --groupby c1 --block 20 -par_groupby --block 20 c1 csv , NewRec -par_groupby --block 20 c1 csv , a1,b1,c1, -par_groupby --block 20 c1 csv , 2,2,2, -par_groupby --block 20 c1 csv , 3,2,2, -par_groupby --block 20 c1 csv , 3,3,2, -par_groupby --block 20 c1 csv , NewRec -par_groupby --block 20 c1 csv , a1,b1,c1, -par_groupby --block 20 c1 csv , 3,2,4, -par_groupby --block 20 c1 csv , NewRec -par_groupby --block 20 c1 csv , a1,b1,c1, -par_groupby --block 20 c1 csv , 3,2,2, -par_groupby --block 20 c1 csv , NewRec -par_groupby --block 20 c1 csv , a1,b1,c1, -par_groupby --block 20 c1 csv , 3,2,3, -par_groupby --block 20 c1 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 $_%=2 tsv \t ### test tsv | --colsep \t --groupby c1 $_%=2 --block 20 -par_groupby --block 20 c1 $_%=2 tsv \t NewRec -par_groupby --block 20 c1 $_%=2 tsv \t a1 b1 c1 -par_groupby --block 20 c1 $_%=2 tsv \t 2 2 2 -par_groupby --block 20 c1 $_%=2 tsv \t 3 2 2 -par_groupby --block 20 c1 $_%=2 tsv \t 3 3 2 -par_groupby --block 20 c1 $_%=2 tsv \t 3 2 4 -par_groupby --block 20 c1 $_%=2 tsv \t 3 2 2 -par_groupby --block 20 c1 $_%=2 tsv \t 3 2 3 -par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 $_%=2 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. -par_groupby --block 20 c1 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby c1 $_%=2 --block 20 -par_groupby --block 20 c1 $_%=2 ssv \s+ NewRec -par_groupby --block 20 c1 $_%=2 ssv \s+ a1 b1 c1 -par_groupby --block 20 c1 $_%=2 ssv \s+ 2 2 2 -par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 2 -par_groupby --block 20 c1 $_%=2 ssv \s+ 3 3 2 -par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 4 -par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 2 -par_groupby --block 20 c1 $_%=2 ssv \s+ 3 2 3 -par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. -par_groupby --block 20 c1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby c1 $_%=2 --block 20 -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ NewRec -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ a1, b1, c1, -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 2 ,2 ,2 , -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 , 2 , 2 , -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 , 3 , 2 , -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3,,2,,4,, -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ 3 2 3 -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. -par_groupby --block 20 c1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 87. Increasing to --blocksize 115. -par_groupby --block 20 c1 $_%=2 csv , ### test csv | --colsep , --groupby c1 $_%=2 --block 20 -par_groupby --block 20 c1 $_%=2 csv , NewRec -par_groupby --block 20 c1 $_%=2 csv , a1,b1,c1, -par_groupby --block 20 c1 $_%=2 csv , 2,2,2, -par_groupby --block 20 c1 $_%=2 csv , 3,2,2, -par_groupby --block 20 c1 $_%=2 csv , 3,3,2, -par_groupby --block 20 c1 $_%=2 csv , 3,2,4, -par_groupby --block 20 c1 $_%=2 csv , 3,2,2, -par_groupby --block 20 c1 $_%=2 csv , 3,2,3, -par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. -par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. -par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. -par_groupby --block 20 c1 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. -par_keeporder_roundrobin bug #50081: --keep-order --round-robin should give predictable results -par_keeporder_roundrobin OK +par_groupby --block 20 C1 tsv \t ### test tsv | --colsep \t --groupby C1 --block 20 +par_groupby --block 20 C1 tsv \t NewRec +par_groupby --block 20 C1 tsv \t a1 b1 C1 +par_groupby --block 20 C1 tsv \t 2 2 2 +par_groupby --block 20 C1 tsv \t 3 2 2 +par_groupby --block 20 C1 tsv \t 3 3 2 +par_groupby --block 20 C1 tsv \t NewRec +par_groupby --block 20 C1 tsv \t a1 b1 C1 +par_groupby --block 20 C1 tsv \t 3 2 4 +par_groupby --block 20 C1 tsv \t NewRec +par_groupby --block 20 C1 tsv \t a1 b1 C1 +par_groupby --block 20 C1 tsv \t 3 2 2 +par_groupby --block 20 C1 tsv \t NewRec +par_groupby --block 20 C1 tsv \t a1 b1 C1 +par_groupby --block 20 C1 tsv \t 3 2 3 +par_groupby --block 20 C1 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 ssv \s+ ### test ssv | --colsep \s+ --groupby C1 --block 20 +par_groupby --block 20 C1 ssv \s+ NewRec +par_groupby --block 20 C1 ssv \s+ a1 b1 C1 +par_groupby --block 20 C1 ssv \s+ 2 2 2 +par_groupby --block 20 C1 ssv \s+ 3 2 2 +par_groupby --block 20 C1 ssv \s+ 3 3 2 +par_groupby --block 20 C1 ssv \s+ NewRec +par_groupby --block 20 C1 ssv \s+ a1 b1 C1 +par_groupby --block 20 C1 ssv \s+ 3 2 4 +par_groupby --block 20 C1 ssv \s+ NewRec +par_groupby --block 20 C1 ssv \s+ a1 b1 C1 +par_groupby --block 20 C1 ssv \s+ 3 2 2 +par_groupby --block 20 C1 ssv \s+ NewRec +par_groupby --block 20 C1 ssv \s+ a1 b1 C1 +par_groupby --block 20 C1 ssv \s+ 3 2 3 +par_groupby --block 20 C1 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby C1 --block 20 +par_groupby --block 20 C1 cssv [\s,]+ NewRec +par_groupby --block 20 C1 cssv [\s,]+ a1, b1, C1, +par_groupby --block 20 C1 cssv [\s,]+ 2 ,2 ,2 , +par_groupby --block 20 C1 cssv [\s,]+ 3 , 2 , 2 , +par_groupby --block 20 C1 cssv [\s,]+ 3 , 3 , 2 , +par_groupby --block 20 C1 cssv [\s,]+ NewRec +par_groupby --block 20 C1 cssv [\s,]+ a1, b1, C1, +par_groupby --block 20 C1 cssv [\s,]+ 3,,2,,4,, +par_groupby --block 20 C1 cssv [\s,]+ NewRec +par_groupby --block 20 C1 cssv [\s,]+ a1, b1, C1, +par_groupby --block 20 C1 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, +par_groupby --block 20 C1 cssv [\s,]+ 3 2 3 +par_groupby --block 20 C1 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. +par_groupby --block 20 C1 csv , ### test csv | --colsep , --groupby C1 --block 20 +par_groupby --block 20 C1 csv , NewRec +par_groupby --block 20 C1 csv , a1,b1,C1, +par_groupby --block 20 C1 csv , 2,2,2, +par_groupby --block 20 C1 csv , 3,2,2, +par_groupby --block 20 C1 csv , 3,3,2, +par_groupby --block 20 C1 csv , NewRec +par_groupby --block 20 C1 csv , a1,b1,C1, +par_groupby --block 20 C1 csv , 3,2,4, +par_groupby --block 20 C1 csv , NewRec +par_groupby --block 20 C1 csv , a1,b1,C1, +par_groupby --block 20 C1 csv , 3,2,2, +par_groupby --block 20 C1 csv , NewRec +par_groupby --block 20 C1 csv , a1,b1,C1, +par_groupby --block 20 C1 csv , 3,2,3, +par_groupby --block 20 C1 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 $_%=2 tsv \t ### test tsv | --colsep \t --groupby C1 $_%=2 --block 20 +par_groupby --block 20 C1 $_%=2 tsv \t NewRec +par_groupby --block 20 C1 $_%=2 tsv \t a1 b1 C1 +par_groupby --block 20 C1 $_%=2 tsv \t 2 2 2 +par_groupby --block 20 C1 $_%=2 tsv \t 3 2 2 +par_groupby --block 20 C1 $_%=2 tsv \t 3 3 2 +par_groupby --block 20 C1 $_%=2 tsv \t 3 2 4 +par_groupby --block 20 C1 $_%=2 tsv \t 3 2 2 +par_groupby --block 20 C1 $_%=2 tsv \t 3 2 3 +par_groupby --block 20 C1 $_%=2 tsv \t parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 $_%=2 tsv \t parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 $_%=2 tsv \t parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 $_%=2 tsv \t parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. +par_groupby --block 20 C1 $_%=2 ssv \s+ ### test ssv | --colsep \s+ --groupby C1 $_%=2 --block 20 +par_groupby --block 20 C1 $_%=2 ssv \s+ NewRec +par_groupby --block 20 C1 $_%=2 ssv \s+ a1 b1 C1 +par_groupby --block 20 C1 $_%=2 ssv \s+ 2 2 2 +par_groupby --block 20 C1 $_%=2 ssv \s+ 3 2 2 +par_groupby --block 20 C1 $_%=2 ssv \s+ 3 3 2 +par_groupby --block 20 C1 $_%=2 ssv \s+ 3 2 4 +par_groupby --block 20 C1 $_%=2 ssv \s+ 3 2 2 +par_groupby --block 20 C1 $_%=2 ssv \s+ 3 2 3 +par_groupby --block 20 C1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. +par_groupby --block 20 C1 $_%=2 ssv \s+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ ### test cssv | --colsep [\s,]+ --groupby C1 $_%=2 --block 20 +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ NewRec +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ a1, b1, C1, +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ 2 ,2 ,2 , +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ 3 , 2 , 2 , +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ 3 , 3 , 2 , +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ 3,,2,,4,, +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ 3 ,,, 2 ,,, 2 ,,, +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ 3 2 3 +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 66. Increasing to --blocksize 87. +par_groupby --block 20 C1 $_%=2 cssv [\s,]+ parallel: Warning: A record was longer than 87. Increasing to --blocksize 115. +par_groupby --block 20 C1 $_%=2 csv , ### test csv | --colsep , --groupby C1 $_%=2 --block 20 +par_groupby --block 20 C1 $_%=2 csv , NewRec +par_groupby --block 20 C1 $_%=2 csv , a1,b1,C1, +par_groupby --block 20 C1 $_%=2 csv , 2,2,2, +par_groupby --block 20 C1 $_%=2 csv , 3,2,2, +par_groupby --block 20 C1 $_%=2 csv , 3,3,2, +par_groupby --block 20 C1 $_%=2 csv , 3,2,4, +par_groupby --block 20 C1 $_%=2 csv , 3,2,2, +par_groupby --block 20 C1 $_%=2 csv , 3,2,3, +par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer than 20. Increasing to --blocksize 27. +par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer than 27. Increasing to --blocksize 37. +par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer than 37. Increasing to --blocksize 50. +par_groupby --block 20 C1 $_%=2 csv , parallel: Warning: A record was longer than 50. Increasing to --blocksize 66. +par_jobslot_repl bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl bug #46231: {%} with --pipepart broken. Should give 1+2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 +par_jobslot_repl 2 +par_jobslot_repl 1 par_kill_hup ### Are children killed if GNU Parallel receives HUP? There should be no sleep at the end par_kill_hup bash-+-perl---2*[bash---sleep] par_kill_hup `-pstree @@ -620,6 +697,37 @@ par_kill_term bash---pstree par_lb_mem_usage 1 par_lb_mem_usage 1 par_lb_mem_usage 2 +par_maxargs ### Test -n and --max-args: Max number of args per line (only with -X and -m) +par_maxargs line 1 +par_maxargs line 2 +par_maxargs line 3 +par_maxargs line 1 line 1 +par_maxargs line 2 +par_maxargs line 1 +par_maxargs line 2 +par_maxargs line 3 +par_maxargs line 1 line 1 +par_maxargs line 2 +par_maxargs line 1 +par_maxargs line 2 +par_maxargs line 3 +par_maxargs line 1 line 1 +par_maxargs line 2 +par_maxargs line 1 +par_maxargs line 2 +par_maxargs line 3 +par_maxargs line 1 +par_maxargs line 2 +par_maxargs line 3 +par_maxargs line 1 line 1 +par_maxargs line 2 +par_maxargs line 1 line 1 +par_maxargs line 2 +par_maxargs line 1 +par_maxargs line 2 +par_maxargs line 3 +par_maxargs line 1 line 1 +par_maxargs line 2 par_multiline_commands bug #50781: joblog format with multiline commands par_multiline_commands 1 par_multiline_commands finish 1 @@ -635,11 +743,6 @@ par_nice Check that --nice works par_nice load_10 par_nice bzip2 18 par_nice bzip2 18 -par_pipe_unneeded_procs ### Test bug #34241: --pipe should not spawn unneeded processes -par_pipe_unneeded_procs 1 -par_pipe_unneeded_procs 2 -par_pipe_unneeded_procs 3 -par_pipe_unneeded_procs o par_pipepart_block ### --pipepart --block -# (# < 0) par_pipepart_block 1 par_pipepart_block 2 @@ -687,9 +790,6 @@ par_pipepart_block 17-20 par_pipepart_block 18-20 par_pipepart_block 19-20 par_pipepart_block 20-20 -par_results_arg_256 ### bug #42089: --results with arg > 256 chars (should be 1 char shorter) -par_results_arg_256 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 -par_results_arg_256 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345 par_resume_failed_k ### bug #38299: --resume-failed -k par_resume_failed_k job1 val 0 par_resume_failed_k job2 val 1 @@ -719,6 +819,34 @@ par_resume_k try 2 = nothing par_resume_k two extra par_resume_k job6id par_resume_k job7id +par_shard ### --shard +par_shard OK +par_shard OK +par_shard OK +par_shard OK +par_shard OK +par_shard 10 1 +par_shard 10 2 +par_shard 10 3 +par_shard 10 4 +par_shard 10 5 +par_shard 10 6 +par_shard 10 7 +par_shard 10 8 +par_shard 10 9 +par_shard 9 0 +par_shard 9 1 +par_shard 9 2 +par_shard 9 3 +par_shard 9 4 +par_shard 9 5 +par_shard 9 6 +par_shard 9 7 +par_shard 9 8 +par_shard 9 9 +par_shard *** broken +par_shard parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. +par_shard parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. par_slow_args_generation ### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834 par_slow_args_generation 1 par_slow_args_generation 2 @@ -734,8 +862,76 @@ par_sqlworker_hostname host par_sqlworker_hostname par_sqlworker_hostname par_sqlworker_hostname +par_test_X_with_multiple_source ### Test {} multiple times in different commands +par_test_X_with_multiple_source echo 1 2 3 4 5 6 7 8 9 10 ; echo 1 2 3 4 5 6 7 8 9 10 +par_test_X_with_multiple_source 1 2 3 4 5 6 7 8 9 10 +par_test_X_with_multiple_source 1 2 3 4 5 6 7 8 9 10 +par_test_X_with_multiple_source ### Test of -X {1}-{2} with multiple input sources +par_test_X_with_multiple_source a-b +par_test_X_with_multiple_source a-c +par_test_X_with_multiple_source b-c +par_test_X_with_multiple_source a-d +par_test_X_with_multiple_source b-f +par_test_X_with_multiple_source a-d +par_test_X_with_multiple_source a-e +par_test_X_with_multiple_source a-f +par_test_X_with_multiple_source b-d +par_test_X_with_multiple_source b-e +par_test_X_with_multiple_source b-f +par_test_X_with_multiple_source c-d +par_test_X_with_multiple_source c-e +par_test_X_with_multiple_source c-f +par_test_X_with_multiple_source ### Test of -X {}-{.} with multiple input sources +par_test_X_with_multiple_source a-a b-b +par_test_X_with_multiple_source a-a c-c a-a d-d +par_test_X_with_multiple_source b-b c-c b-b d-d +par_test_X_with_multiple_source a-a d-d a-a e-e a-a f-f b-b d-d b-b e-e +par_test_X_with_multiple_source b-b f-f c-c d-d c-c e-e c-c f-f +par_test_X_with_multiple_source a-a d-d +par_test_X_with_multiple_source a-a e-e +par_test_X_with_multiple_source a-a f-f +par_test_X_with_multiple_source b-b d-d +par_test_X_with_multiple_source b-b e-e +par_test_X_with_multiple_source b-b f-f +par_test_X_with_multiple_source c-c d-d +par_test_X_with_multiple_source c-c e-e +par_test_X_with_multiple_source c-c f-f par_test_diff_roundrobin_k ### test there is difference on -k par_test_diff_roundrobin_k OK +par_totaljob_repl {##} bug #45841: Replacement string for total no of jobs +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 1 +par_totaljob_repl 2 +par_totaljob_repl 3 +par_totaljob_repl 4 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 10 +par_totaljob_repl 1 2 2 2 2 2 2 2 +par_totaljob_repl 2 2 2 2 2 2 2 2 +par_totaljob_repl 1 3 3 3 3 3 3 3 +par_totaljob_repl 2 3 3 3 3 3 3 3 +par_totaljob_repl 3 3 +par_totaljob_repl 1 15 15 +par_totaljob_repl 2 14 14 +par_totaljob_repl 3 14 14 +par_totaljob_repl 4 14 14 +par_totaljob_repl 5 14 14 +par_totaljob_repl 6 14 14 +par_totaljob_repl 7 14 14 +par_totaljob_repl 8 14 par_wrong_slot_rpl_resume ### bug #47644: Wrong slot number replacement when resuming par_wrong_slot_rpl_resume 1 0 par_wrong_slot_rpl_resume 2 1 diff --git a/testsuite/wanted-results/parallel-local14 b/testsuite/wanted-results/parallel-local14 index ddbc0449..3eb06372 100644 --- a/testsuite/wanted-results/parallel-local14 +++ b/testsuite/wanted-results/parallel-local14 @@ -1,6 +1,6 @@ -### Test $TMPDIR -More than 1 MB gone. Good! ### Test --tmpdir More than 1 MB gone. Good! +### Test $TMPDIR +More than 1 MB gone. Good! ### Test $TMPDIR and --tmpdir More than 1 MB gone. Good! diff --git a/testsuite/wanted-results/parallel-local23 b/testsuite/wanted-results/parallel-local23 index 60960d17..5ec123f2 100644 --- a/testsuite/wanted-results/parallel-local23 +++ b/testsuite/wanted-results/parallel-local23 @@ -61,7 +61,7 @@ echo '### Check that 4 processes are really used' echo '### --version must have higher priority than retired options' ### --version must have higher priority than retired options $NICEPAR --version -g -Y -U -W -T | tail -GNU parallel 20190422 +GNU parallel 20190504 Copyright (C) 2007-2019 Ole Tange and Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index a42f85b3..4ea9183e 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -1,4 +1,4 @@ -MAXTIME=50 RETRIES=3 MAXPROC=100 MAXINNERPROC=3 +MAXTIME=50 RETRIES=3 MAXPROC=84 MAXINNERPROC=3 ### Filter out working servers 1d0 < openstep @@ -6,12 +6,11 @@ MAXTIME=50 RETRIES=3 MAXPROC=100 MAXINNERPROC=3 < alpha 7d4 < syllable -28,29d24 +28,33d24 < dragonfly < vax -31,34d25 < minix -33,34d25 +< hurd < beaglebone < cubieboard2 ### Copy commands to servers @@ -39,7 +38,6 @@ bin/parallel netbsd copy netbsd bin/parallel parallel bin/parallel openbsd copy openbsd bin/parallel parallel bin/parallel freebsd copy freebsd bin/parallel parallel bin/parallel debian copy debian bin/parallel parallel -bin/parallel hurd copy hurd bin/parallel parallel bin/parallel minix copy minix bin/parallel parallel bin/env_parallel qnx copy qnx bin/env_parallel env_parallel bin/env_parallel pidora copy pidora bin/env_parallel env_parallel @@ -65,7 +63,6 @@ bin/env_parallel netbsd copy netbsd bin/env_parallel env_parallel bin/env_parallel openbsd copy openbsd bin/env_parallel env_parallel bin/env_parallel freebsd copy freebsd bin/env_parallel env_parallel bin/env_parallel debian copy debian bin/env_parallel env_parallel -bin/env_parallel hurd copy hurd bin/env_parallel env_parallel bin/env_parallel minix copy minix bin/env_parallel env_parallel bin/env_parallel.ash qnx copy qnx bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash pidora copy pidora bin/env_parallel.ash env_parallel.ash @@ -91,7 +88,6 @@ bin/env_parallel.ash netbsd copy netbsd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash openbsd copy openbsd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash freebsd copy freebsd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash debian copy debian bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash hurd copy hurd bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash minix copy minix bin/env_parallel.ash env_parallel.ash bin/env_parallel.bash qnx copy qnx bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash pidora copy pidora bin/env_parallel.bash env_parallel.bash @@ -117,7 +113,6 @@ bin/env_parallel.bash netbsd copy netbsd bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash openbsd copy openbsd bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash freebsd copy freebsd bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash debian copy debian bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash hurd copy hurd bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash minix copy minix bin/env_parallel.bash env_parallel.bash bin/env_parallel.csh qnx copy qnx bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh pidora copy pidora bin/env_parallel.csh env_parallel.csh @@ -143,7 +138,6 @@ bin/env_parallel.csh netbsd copy netbsd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh openbsd copy openbsd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh freebsd copy freebsd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh debian copy debian bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh hurd copy hurd bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh minix copy minix bin/env_parallel.csh env_parallel.csh bin/env_parallel.dash qnx copy qnx bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash pidora copy pidora bin/env_parallel.dash env_parallel.dash @@ -169,7 +163,6 @@ bin/env_parallel.dash netbsd copy netbsd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash openbsd copy openbsd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash freebsd copy freebsd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash debian copy debian bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash hurd copy hurd bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash minix copy minix bin/env_parallel.dash env_parallel.dash bin/env_parallel.fish qnx copy qnx bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish pidora copy pidora bin/env_parallel.fish env_parallel.fish @@ -195,7 +188,6 @@ bin/env_parallel.fish netbsd copy netbsd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish openbsd copy openbsd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish freebsd copy freebsd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish debian copy debian bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish hurd copy hurd bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish minix copy minix bin/env_parallel.fish env_parallel.fish bin/env_parallel.ksh qnx copy qnx bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh pidora copy pidora bin/env_parallel.ksh env_parallel.ksh @@ -221,7 +213,6 @@ bin/env_parallel.ksh netbsd copy netbsd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh openbsd copy openbsd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh freebsd copy freebsd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh debian copy debian bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh hurd copy hurd bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh minix copy minix bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.mksh qnx copy qnx bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh pidora copy pidora bin/env_parallel.mksh env_parallel.mksh @@ -247,7 +238,6 @@ bin/env_parallel.mksh netbsd copy netbsd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh openbsd copy openbsd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh freebsd copy freebsd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh debian copy debian bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh hurd copy hurd bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh minix copy minix bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.pdksh qnx copy qnx bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh pidora copy pidora bin/env_parallel.pdksh env_parallel.pdksh @@ -273,7 +263,6 @@ bin/env_parallel.pdksh netbsd copy netbsd bin/env_parallel.pdksh env_parallel.pd bin/env_parallel.pdksh openbsd copy openbsd bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh freebsd copy freebsd bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh debian copy debian bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh hurd copy hurd bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh minix copy minix bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.sh qnx copy qnx bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh pidora copy pidora bin/env_parallel.sh env_parallel.sh @@ -299,7 +288,6 @@ bin/env_parallel.sh netbsd copy netbsd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh openbsd copy openbsd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh freebsd copy freebsd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh debian copy debian bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh hurd copy hurd bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh minix copy minix bin/env_parallel.sh env_parallel.sh bin/env_parallel.tcsh qnx copy qnx bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh pidora copy pidora bin/env_parallel.tcsh env_parallel.tcsh @@ -325,7 +313,6 @@ bin/env_parallel.tcsh netbsd copy netbsd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh openbsd copy openbsd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh freebsd copy freebsd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh debian copy debian bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh hurd copy hurd bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh minix copy minix bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.zsh qnx copy qnx bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh pidora copy pidora bin/env_parallel.zsh env_parallel.zsh @@ -351,7 +338,6 @@ bin/env_parallel.zsh netbsd copy netbsd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh openbsd copy openbsd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh freebsd copy freebsd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh debian copy debian bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh hurd copy hurd bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh minix copy minix bin/env_parallel.zsh env_parallel.zsh bin/parcat qnx copy qnx bin/parcat parcat bin/parcat pidora copy pidora bin/parcat parcat @@ -377,7 +363,6 @@ bin/parcat netbsd copy netbsd bin/parcat parcat bin/parcat openbsd copy openbsd bin/parcat parcat bin/parcat freebsd copy freebsd bin/parcat parcat bin/parcat debian copy debian bin/parcat parcat -bin/parcat hurd copy hurd bin/parcat parcat bin/parcat minix copy minix bin/parcat parcat Done copying @@ -395,7 +380,6 @@ debian-ppc Works on debian-ppc freebsd Syntax error: Bad fd number hpux Works on hpux64 hpux-ia64 Works on hpux-ia64 -hurd Works on hurd macosx Works on macosx.polarhome.com mandriva Works on mandriva.polarhome.com miros Works on miros.polarhome.com @@ -411,7 +395,6 @@ redhat Works on redhat.polarhome.com scosysv Works on scosysv.polarhome.com solaris Works on solaris solaris-x86 Works on solaris-x86 -sshwithpass minix Works on minix suse Works on suse tru64 Works on tru64.polarhome.com ubuntu Works on ubuntu @@ -438,8 +421,6 @@ hpux 1 hpux 1 hpux-ia64 1 hpux-ia64 1 -hurd -hurd 1 macosx 2 macosx 2 mandriva 1 @@ -469,8 +450,6 @@ solaris solaris 2 solaris-x86 solaris-x86 1 -sshwithpass minix 1 -sshwithpass minix 1 suse 1 suse 1 tru64 1 @@ -493,8 +472,6 @@ hpux 1 hpux 1 hpux-ia64 2 hpux-ia64 1 -hurd 1 -hurd 1 macosx 2 macosx 2 mandriva 1 @@ -524,8 +501,6 @@ solaris 2 solaris 2 solaris-x86 1 solaris-x86 1 -sshwithpass minix 1 -sshwithpass minix 1 suse 1 suse 1 tru64 1 @@ -559,8 +534,6 @@ hpux OK readonly tmp hpux-ia64 Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable hpux-ia64 at /home/t/tange/bin/parallel line 0000 hpux-ia64 OK readonly tmp -hurd Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -hurd OK readonly tmp macosx Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /Users/tange/bin/parallel line 0000 macosx OK readonly tmp mandriva Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 @@ -592,7 +565,6 @@ solaris at /home/t/tange/bin/parallel line 0000 solaris OK readonly tmp solaris-x86 Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/tange/bin/parallel line 0000 solaris-x86 OK readonly tmp -sshwithpass minix OKreadonlytmp suse Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. suse OK readonly tmp tru64 Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable @@ -618,16 +590,6 @@ unixware UX:sh (/bin/sh): ERROR: source: Not found ### Does exporting a bash function make parallel fail? If login shell is not bash compatible it fails - cat <(echo bash only A) - cat <(echo bash only A) - bin/parallel funcA ::: 1 - bin/parallel funcA ::: 1 - export -f funcA; - export -f funcA; - funcA() { - funcA() { - } - } aix bash only A aix test funcA centos bash only A @@ -641,8 +603,6 @@ hpux bash only A hpux test funcA hpux-ia64 bash only A hpux-ia64 test funcA -hurd bash only A -hurd test funcA macosx bash only A macosx test funcA mandriva bash only A @@ -672,7 +632,6 @@ solaris bash only A solaris test funcA solaris-x86 bash only A solaris-x86 test funcA -sshwithpass minix test funcA suse bash only A suse test funcA tru64 bash only A @@ -715,8 +674,6 @@ hpux test funcB hpux bash only B hpux-ia64 test funcB hpux-ia64 bash only B -hurd test funcB -hurd bash only B macosx test funcB macosx bash only B mandriva test funcB @@ -745,7 +702,6 @@ solaris test funcB solaris bash only B solaris-x86 test funcB solaris-x86 bash only B -sshwithpass minix test funcB suse test funcB suse bash only B tru64 test funcB @@ -835,17 +791,6 @@ hpux-ia64 /home/t/tange/.cshrc hpux-ia64 /home/t/tange/.tcshrc hpux-ia64 install-OK hpux-ia64 bin/env_parallel: line 33: /home/t/tange/.cshrc: Permission denied -hurd Installed env_parallel in: -hurd /home/t/tange/.bashrc -hurd /home/t/tange/.shrc -hurd /home/t/tange/.zshenv -hurd /home/t/tange/.config/fish/config.fish -hurd /home/t/tange/.kshrc -hurd /home/t/tange/.mkshrc -hurd /home/t/tange/.profile -hurd /home/t/tange/.cshrc -hurd /home/t/tange/.tcshrc -hurd install-OK macosx Installed env_parallel in: macosx /Users/tange/.bashrc macosx /Users/tange/.shrc @@ -990,17 +935,6 @@ solaris-x86 /home/tange/.profile solaris-x86 /home/tange/.cshrc solaris-x86 /home/tange/.tcshrc solaris-x86 install-OK -sshwithpass minix Installed env_parallel in: -sshwithpass minix /home/t/tange/.bashrc -sshwithpass minix /home/t/tange/.shrc -sshwithpass minix /home/t/tange/.zshenv -sshwithpass minix /home/t/tange/.config/fish/config.fish -sshwithpass minix /home/t/tange/.kshrc -sshwithpass minix /home/t/tange/.mkshrc -sshwithpass minix /home/t/tange/.profile -sshwithpass minix /home/t/tange/.cshrc -sshwithpass minix /home/t/tange/.tcshrc -sshwithpass minix install-OK suse Installed env_parallel in: suse /home/t/tange/.bashrc suse /home/t/tange/.shrc @@ -1053,7 +987,6 @@ debian-ppc env_parallel run-OK freebsd Syntax error: Bad fd number hpux env_parallel run-OK hpux-ia64 env_parallel run-OK -hurd env_parallel run-OK macosx env_parallel run-OK mandriva env_parallel run-OK miros env_parallel run-OK @@ -1073,7 +1006,6 @@ redhat env_parallel run-OK scosysv env_parallel run-OK solaris env_parallel run-OK solaris-x86 env_parallel run-OK -sshwithpass minix env_parallel run-OK suse env_parallel run-OK tru64 env_parallel run-OK ubuntu env_parallel run-OK @@ -1086,7 +1018,6 @@ debian-ppc reading from process substitution OK freebsd Syntax error: "(" unexpected (expecting word) hpux reading from process substitution OK hpux-ia64 reading from process substitution OK -hurd reading from process substitution OK macosx reading from process substitution OK mandriva reading from process substitution OK miros reading from process substitution OK @@ -1102,7 +1033,6 @@ redhat reading from process substitution OK scosysv reading from process substitution OK solaris reading from process substitution OK solaris-x86 reading from process substitution OK -sshwithpass minix reading from process substitution OK suse reading from process substitution OK tru64 reading from process substitution OK ubuntu reading from process substitution OK @@ -1132,8 +1062,6 @@ hpux ### Test if empty command name in process list causes problems hpux OK_with_empty_cmd hpux-ia64 ### Test if empty command name in process list causes problems hpux-ia64 OK_with_empty_cmd -hurd ### Test if empty command name in process list causes problems -hurd OK_with_empty_cmd macosx ### Test if empty command name in process list causes problems macosx OK_with_empty_cmd mandriva ### Test if empty command name in process list causes problems @@ -1162,7 +1090,6 @@ solaris ### Test if empty command name in process list causes problems solaris OK_with_empty_cmd solaris-x86 ### Test if empty command name in process list causes problems solaris-x86 OK_with_empty_cmd -sshwithpass minix ### Test if empty command name in process list causes problems suse ### Test if empty command name in process list causes problems suse OK_with_empty_cmd tru64 ### Test if empty command name in process list causes problems @@ -1189,7 +1116,6 @@ debian-ppc 1 2 1 2 3 1 2 3 4 freebsd Syntax error: Bad fd number hpux hpux-ia64 1 2 1 2 3 1 2 3 4 -hurd 1 2 1 2 3 1 2 3 4 macosx 1 2 1 2 3 1 2 3 4 mandriva 1 2 1 2 3 1 2 3 4 miros 1 2 1 2 3 1 2 3 4 @@ -1207,7 +1133,6 @@ redhat 1 2 1 2 3 1 2 3 4 scosysv 1 2 1 2 3 1 2 3 4 solaris 1 2 1 2 3 1 2 3 4 solaris-x86 1 2 1 2 3 1 2 3 4 -sshwithpass minix 1 2 1 2 3 1 2 3 4 suse 1 2 1 2 3 1 2 3 4 tru64 1 2 1 2 3 1 2 3 4 ubuntu 1 2 1 2 3 1 2 3 4 @@ -1221,7 +1146,6 @@ debian-ppc 2 2 3 2 3 4 freebsd Syntax error: Bad fd number hpux hpux-ia64 1 2 1 2 1 2 -hurd 2 2 3 2 3 4 macosx 2 2 3 2 3 4 mandriva 2 2 3 2 3 4 miros 1 2 1 2 1 2 @@ -1243,7 +1167,6 @@ redhat 2 2 3 2 3 4 scosysv 2 2 3 2 3 4 solaris 1 2 1 2 1 2 solaris-x86 2 2 3 2 3 4 -sshwithpass minix 2 2 3 2 3 4 suse 2 2 3 2 3 4 tru64 2 2 3 2 3 4 ubuntu 2 2 3 2 3 4 @@ -1268,7 +1191,6 @@ debian-ppc 1 2,1 2 3,1 2 3 4 freebsd Syntax error: Bad fd number hpux ,, hpux-ia64 1 2,1 2 3,1 2 3 4 -hurd 1 2,1 2 3,1 2 3 4 macosx 1 2,1 2 3,1 2 3 4 mandriva 1 2,1 2 3,1 2 3 4 miros 1 2,1 2 3,1 2 3 4 @@ -1286,7 +1208,6 @@ redhat 1 2,1 2 3,1 2 3 4 scosysv 1 2,1 2 3,1 2 3 4 solaris 1 2,1 2 3,1 2 3 4 solaris-x86 1 2,1 2 3,1 2 3 4 -sshwithpass minix 1 2,1 2 3,1 2 3 4 suse 1 2,1 2 3,1 2 3 4 tru64 1 2,1 2 3,1 2 3 4 ubuntu 1 2,1 2 3,1 2 3 4 @@ -1300,7 +1221,6 @@ debian-ppc 2,2 3,2 3 4 freebsd Syntax error: Bad fd number hpux ,, hpux-ia64 1 2,1 2,1 2 -hurd 2,2 3,2 3 4 macosx 2,2 3,2 3 4 mandriva 2,2 3,2 3 4 miros 1 2,1 2,1 2 @@ -1322,7 +1242,6 @@ redhat 2,2 3,2 3 4 scosysv 2,2 3,2 3 4 solaris 1 2,1 2,1 2 solaris-x86 2,2 3,2 3 4 -sshwithpass minix 2,2 3,2 3 4 suse 2,2 3,2 3 4 tru64 2,2 3,2 3 4 ubuntu 2,2 3,2 3 4 diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index 4a4b8b40..1acb3802 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -1,7 +1,15 @@ ### test parallel_tutorial - fetch -o - http://pi.dk/3) | bash + fetch -o - http://pi.dk/3 ) > install.sh + $ sha1sum install.sh + 12345678 3374ec53 bacb199b 245af2dd a86df6c9 + $ md5sum install.sh + 029a9ac0 6e8b5bc6 052eac57 b2c3c9ca + $ sha512sum install.sh + 40f53af6 9e20dae5 713ba06c f517006d 9897747b ed8a4694 b1acba1b 1464beb4 + 60055629 3f2356f3 3e9c4e3c 76e3f3af a9db4b32 bd33322b 975696fc e6b23cfb + $ bash install.sh /bin/bash: -c: line 0: syntax error near unexpected token `)' -/bin/bash: -c: line 0: ` fetch -o - http://pi.dk/3) | bash' +/bin/bash: -c: line 0: ` fetch -o - http://pi.dk/3 ) > install.sh' parallel -k echo ::: A B C > abc-file parallel -k echo ::: D E F > def-file