From 001d9d0f66aab7c90b47babc93f7662d8354169f Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Tue, 23 Oct 2018 00:46:38 +0200 Subject: [PATCH] env_parallel.fish: Initial support for --session. parallel: 'true | parallel --shuf echo' fixed. testsuite: Updates due to Ubuntu 18.04. parallel: Fixed bug #54869: Long lines break. --- CREDITS | 2 + Makefile.am | 3 +- Makefile.in | 3 +- doc/{boxplot-runtime => boxplot-overhead} | 5 +- doc/release_new_version | 19 +- src/env_parallel.bash | 2 +- src/env_parallel.csh | 1 + src/env_parallel.fish | 19 +- src/env_parallel.zsh | 2 +- src/niceload | 2 +- src/parallel | 10 +- src/parallel.pod | 13 ++ src/parallel_alternatives.pod | 213 +++++++++++++++++- src/parallel_design.pod | 8 +- src/sql | 2 +- testsuite/REQUIREMENTS | 11 +- testsuite/tests-to-run/parallel-local-0.3s.sh | 28 ++- testsuite/tests-to-run/parallel-local-100s.sh | 4 +- testsuite/tests-to-run/parallel-local-10s.sh | 50 ++-- testsuite/tests-to-run/parallel-local-1s.sh | 32 +-- testsuite/tests-to-run/parallel-local-30s.sh | 2 +- testsuite/tests-to-run/parallel-local-3s.sh | 24 +- .../tests-to-run/parallel-local-race02.sh | 30 +++ testsuite/tests-to-run/parallel-local-sql.sh | 2 +- testsuite/tests-to-run/parallel-local-ssh1.sh | 4 +- testsuite/tests-to-run/parallel-local-ssh7.sh | 67 +++--- testsuite/tests-to-run/parallel-local-ssh8.sh | 8 +- testsuite/tests-to-run/parallel-local-ssh9.sh | 4 +- testsuite/tests-to-run/parallel-local13.sh | 2 +- testsuite/tests-to-run/parallel-local15.sh | 26 +-- testsuite/tests-to-run/parallel-local164.sh | 2 +- testsuite/tests-to-run/parallel-local18.sh | 8 +- testsuite/tests-to-run/parallel-local21.sh | 2 +- testsuite/tests-to-run/parallel-local22.sh | 2 +- testsuite/tests-to-run/parallel-local7.sh | 18 ++ testsuite/tests-to-run/parallel-polarhome.sh | 13 +- testsuite/tests-to-run/parallel-tutorial.sh | 1 + testsuite/tests-to-run/sem01.sh | 18 -- testsuite/tests-to-run/sql03.sh | 2 +- testsuite/tests-to-run/test17.sh | 2 +- testsuite/tests-to-run/test23.sh | 2 +- testsuite/tests-to-run/test35.sh | 14 +- testsuite/wanted-results/parallel-local-0.3s | 2 + testsuite/wanted-results/parallel-local-100s | 72 +++--- testsuite/wanted-results/parallel-local-10s | 29 +-- testsuite/wanted-results/parallel-local-1s | 3 + testsuite/wanted-results/parallel-local-30s | 6 +- testsuite/wanted-results/parallel-local-3s | 5 - .../wanted-results/parallel-local-race02 | 18 ++ testsuite/wanted-results/parallel-local-ssh1 | 2 +- testsuite/wanted-results/parallel-local-ssh4 | 10 +- testsuite/wanted-results/parallel-local-ssh5 | 4 +- testsuite/wanted-results/parallel-local-ssh7 | 31 ++- testsuite/wanted-results/parallel-local-ssh8 | 6 +- testsuite/wanted-results/parallel-local12 | 2 +- testsuite/wanted-results/parallel-local15 | 12 +- testsuite/wanted-results/parallel-local164 | 2 +- testsuite/wanted-results/parallel-local18 | 2 +- testsuite/wanted-results/parallel-local22 | 2 +- testsuite/wanted-results/parallel-local23 | 2 +- testsuite/wanted-results/parallel-polarhome | 99 +++++--- testsuite/wanted-results/parallel-tutorial | 25 +- testsuite/wanted-results/sem01 | 20 -- testsuite/wanted-results/sql02 | 6 +- testsuite/wanted-results/test19 | 12 +- testsuite/wanted-results/test23 | 24 +- 66 files changed, 700 insertions(+), 378 deletions(-) rename doc/{boxplot-runtime => boxplot-overhead} (86%) diff --git a/CREDITS b/CREDITS index 07872501..0b589b9c 100644 --- a/CREDITS +++ b/CREDITS @@ -1,5 +1,7 @@ People who have helped GNU Parallel different ways. +Jakub Kulík: Maintaining GNU Parallel for Solaris-userland. +Rich Burridge: Maintaining GNU Parallel for Solaris-userland. Jonathan Kamens: Bug patch for chomp. John Rusnak: Feedback on all documentation. FrithMartin: Bug patch for orphan blocks. diff --git a/Makefile.am b/Makefile.am index 4031181c..075e14f8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -120,6 +120,7 @@ monitorman: inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &' testurls: - grep -h -Po 'https?://[^ $$<>")}]+' src/* | perl -pe 's/(>|\{).*//;s/\\//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | parallel -j0 --tag 'wget -qm -l1 -Q1 {}; echo $$?' + mkdir -p urls + cd urls && grep -v '(dead)' ../src/* | grep -h -Po 'https?://[^ $$<>")}]+' | perl -pe 's/(>|\{).*//;s/\\-/-/g;s/\\n//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | egrep -v 'example.com|##|\*\(' | parallel -j0 --timeout 33 --bar --tag --retries 3 neno wget -m -l1 -Q1 '{=$$_=Q($$_)=}' EXTRA_DIST = CITATION CREDITS cc-by-sa.txt fdl.txt diff --git a/Makefile.in b/Makefile.in index b4550c4f..a1ca523a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -868,7 +868,8 @@ monitorman: inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &' testurls: - grep -h -Po 'https?://[^ $$<>")}]+' src/* | perl -pe 's/(>|\{).*//;s/\\//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | parallel -j0 --tag 'wget -qm -l1 -Q1 {}; echo $$?' + mkdir -p urls + cd urls && grep -v '(dead)' ../src/* | grep -h -Po 'https?://[^ $$<>")}]+' | perl -pe 's/(>|\{).*//;s/\\-/-/g;s/\\n//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | egrep -v 'example.com|##|\*\(' | parallel -j0 --timeout 33 --bar --tag --retries 3 neno wget -m -l1 -Q1 '{=$$_=Q($$_)=}' # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/doc/boxplot-runtime b/doc/boxplot-overhead similarity index 86% rename from doc/boxplot-runtime rename to doc/boxplot-overhead index ce7972f1..28cdca5c 100644 --- a/doc/boxplot-runtime +++ b/doc/boxplot-overhead @@ -39,7 +39,8 @@ measure() { PATH=/tmp/bin:$PATH cd /tmp/bin - ls parallel-* | parallel --shuf -j$CORES --joblog ~/tmp/joblog$CORES-$INNER-$OUTER.csv 'seq '$INNER' | {2} true' :::: <(seq $OUTER) - + ls parallel-* | + parallel --shuf -j$CORES --joblog ~/tmp/joblog$CORES-$INNER-$OUTER.csv 'seq '$INNER' | {2} true' :::: <(seq $OUTER) - killall forever @@ -49,7 +50,7 @@ measure() { pdf("/tmp/boxplot.pdf"); par(cex.axis=0.5); boxplot(JobRuntime/$INNER*1000~Command,data=jl,las=2,outline=F, - ylab="milliseconds/job",main="GNU Parallel performance of different versions\n$OUTER trials each running $INNER jobs"); + ylab="milliseconds/job",main="GNU Parallel overhead for different versions\n$OUTER trials each running $INNER jobs"); _ cp /tmp/boxplot.pdf $HOME/tmp/boxplot-j$CORES-${MHZ}MHz-$OUTER-${INNER}v$VERSION.pdf evince /tmp/boxplot.pdf diff --git a/doc/release_new_version b/doc/release_new_version index 02fcd196..6d06639a 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -205,28 +205,23 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20180922 ('Danske') released <<[stable]>> +Subject: GNU Parallel 20181022 ('peoples vote cumex khashoggi Sulawesi(Palu)') released <<[stable]>> -GNU Parallel 20180922 ('Danske') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ +GNU Parallel 20181022 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ <> Quote of the month: - I know I'm late to the party but GNU Parallel is truly amazing! - -- Sam Diaz-Munoz @sociovirology - New in this release: -* Minix is supported again. +* env_parallel.fish: --session support (alpha quality) -* Updated graph showing GNU Parallel's overhead per job for each version. https://www.gnu.org/software/parallel/process-time-j2-1700MHz-3000-1000.pdf +* GNU Parallel was cited in: High-throughput sequencing of murine immunoglobulin heavy chain repertoires using single side unique molecular identifiers on an Ion Torrent PGM https://doi.org/10.18632/oncotarget.25493 -* Intro to Computing at CARC includes introduction to GNU Parallel http://carc.unm.edu/education--training/workshops-and-seminars.html +* GNU parallel in Japanese Wikipedia https://ja.wikipedia.org/wiki/GNU_parallel -* Fast-GBS uses GNU Parallel https://bitbucket.org/jerlar73/fast-gbs/wiki/Home - -* Belgium at 10 m resolution in July 2018 http://www.cesbio.ups-tlse.fr/multitemp/?p=14116 +* Outils de paramétrisation des tâches: lots de tâches, GNU Parallel https://www.eventbrite.ca/e/inscription-outils-de-parametrisation-des-taches-lots-de-taches-gnu-parallel-et-bqtools-midi-conference-de-50271076142 * Bug fixes and man page updates. @@ -253,7 +248,7 @@ Walk through the tutorial (man parallel_tutorial). Your commandline will love yo When using programs that use GNU Parallel to process data for publication please cite: -O. Tange (2018): GNU Parallel 2018, April 2018, https://doi.org/10.5281/zenodo.1146014. +O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/10.5281/zenodo.1146014. If you like GNU Parallel: diff --git a/src/env_parallel.bash b/src/env_parallel.bash index b3ce0810..72c3a885 100755 --- a/src/env_parallel.bash +++ b/src/env_parallel.bash @@ -363,7 +363,7 @@ _parset_main() { ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | # var1=`cat tmpfile1; rm tmpfile1` # var2=`cat tmpfile2; rm tmpfile2` - parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $( + parallel --plain -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $( echo "$_parset_NAME" | perl -pe 's/,/ /g' ) ); diff --git a/src/env_parallel.csh b/src/env_parallel.csh index 5ea95d10..153eb0c3 100755 --- a/src/env_parallel.csh +++ b/src/env_parallel.csh @@ -83,6 +83,7 @@ else # Make a tmpfile for the variable definitions + alias set _tMpaLLfILe=`_tempfile` foreach _vARnAmE ($_vARnAmES); + # These 3 lines break in csh version 20110502-3 # if not defined: next eval if'(! $?'$_vARnAmE') continue' # if $#myvar <= 1 echo scalar_myvar=$var diff --git a/src/env_parallel.fish b/src/env_parallel.fish index 55f217ec..dfff1178 100755 --- a/src/env_parallel.fish +++ b/src/env_parallel.fish @@ -42,6 +42,17 @@ function env_parallel # env_parallel.fish + + # --session + perl -e 'exit grep { /^--session/ } @ARGV' -- $argv; or begin; + setenv PARALLEL_IGNORED_NAMES ( + begin; + functions -n + set -n; + end | perl -pe 's/\n/,/g'; + ) + return 0 + end; setenv PARALLEL_ENV ( begin; set _grep_REGEXP ( @@ -71,10 +82,14 @@ function env_parallel "Run \"parallel --record-env\" in a clean environment first.\n"; } else { chomp(@ignored_vars = ); - $vars = join "|",map { quotemeta $_ } @ignored_vars; - print $vars ? "($vars)" : "(,,nO,,VaRs,,)"; } } + if($ENV{PARALLEL_IGNORED_NAMES}) { + push @ignored_vars, split/,/, $ENV{PARALLEL_IGNORED_NAMES}; + chomp @ignored_vars; + } + $vars = join "|",map { quotemeta $_ } @ignored_vars; + print $vars ? "($vars)" : "(,,nO,,VaRs,,)"; ' -- $argv; end; ) diff --git a/src/env_parallel.zsh b/src/env_parallel.zsh index ff56bc3d..9e7eaebe 100755 --- a/src/env_parallel.zsh +++ b/src/env_parallel.zsh @@ -51,7 +51,7 @@ env_parallel() { } _ignore_HARDCODED() { # These names cannot be detected - echo '([-\?\#\!\$\*\@\_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID|dis_patchars|patchars|terminfo|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates|funcstack)' + echo '([-\?\#\!\$\*\@\_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID|dis_patchars|patchars|terminfo|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates|funcstack|run-help)' } _ignore_READONLY() { typeset -pr | perl -e '@r = map { diff --git a/src/niceload b/src/niceload index 2bf9a042..0096ab00 100755 --- a/src/niceload +++ b/src/niceload @@ -24,7 +24,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20180922; +$Global::version = 20180923; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff --git a/src/parallel b/src/parallel index 271edeb2..07297ea0 100755 --- a/src/parallel +++ b/src/parallel @@ -1452,8 +1452,8 @@ sub parse_options { # Running 'parallel --citation' one single time takes less than 10 # seconds, and will silence the citation notice for future # runs. If that is too much trouble for you, why not use one of - # the alternatives instead? See a list in: 'man - # parallel_alternatives' + # the alternatives instead? + # See a list in: 'man parallel_alternatives' citation_notice(); parse_halt(); @@ -1554,7 +1554,7 @@ sub check_invalid_option_combinations { sub init_globals { # Defaults: - $Global::version = 20180922; + $Global::version = 20180923; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -7156,7 +7156,7 @@ sub total_jobs { while($record = $record_queue->get()) { push @arg_records, $record; } - if($opt::shuf) { + if($opt::shuf and @arg_records) { my $i = @arg_records; while (--$i) { my $j = int rand($i+1); @@ -10104,7 +10104,7 @@ sub replace_placeholders { # New context group @ctxgroup=(); } - if($t eq "\0spc") { + if($t eq "\0spc" or $t eq " ") { CORE::push @replaced,$t; } else { CORE::push @ctxgroup,$t; diff --git a/src/parallel.pod b/src/parallel.pod index 7567af9d..f4bba727 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -2363,6 +2363,11 @@ open a tty for the job. You can of course override B<-j1> and B<-u>. +Using B<--tty> unfortunately means that GNU B cannot kill +the jobs (with B<--timeout>, B<--memfree>, or B<--halt>). This is due +to GNU B giving each child its own process group, which is +then killed. Process groups are dependant on the tty. + =item B<--tag> @@ -3053,6 +3058,14 @@ downloads 10 videos in parallel. B<{=> and B<=}> mark a perl expression. B perl-quotes the string. B is the date in ISO8601 with time. +=head1 EXAMPLE: Save output in ISO8601 dirs + +Save output from B every second into dirs named +yyyy-mm-ddThh:mm:ss+zz:zz. + + seq 1000 | parallel -N0 -j1 --delay 1 \ + --results '{= $_=`date -Isec`; chomp=}/' ps aux + =head1 EXAMPLE: Digital clock with "blinking" : diff --git a/src/parallel_alternatives.pod b/src/parallel_alternatives.pod index 1f34e888..916cd158 100644 --- a/src/parallel_alternatives.pod +++ b/src/parallel_alternatives.pod @@ -13,6 +13,16 @@ There are a lot programs with some of the functionality of GNU B. GNU B strives to include the best of the functionality without sacrificing ease of use. +B has existed since 2002 and as GNU B since +2010. A lot of the alternatives have not had the vitality to survive +that long, but have come and gone during that time. + +GNU B is actively maintained with a new release every month +since 2010. Most other alternatives are fleeting interests of the +developers with irregular releases and only maintained for a few +years. + + =head2 SUMMARY TABLE The following features are in some of the comparable tools: @@ -452,15 +462,16 @@ B does not deal well with more simultaneous jobs than SSHD's MaxStartups. B is only built for remote run jobs, but does not support transferring of files. -http://www.semicomplete.com/blog/geekery/distributed-xargs.html +https://web.archive.org/web/20120518070250/http://www.semicomplete.com/blog/geekery/distributed-xargs.html =head2 DIFFERENCES BETWEEN mdm/middleman AND GNU Parallel middleman(mdm) is also a tool for running jobs in parallel. -Here are the shellscripts of http://mdm.berlios.de/usage.html ported -to GNU B: +Here are the shellscripts of +https://web.archive.org/web/20110728064735/http://mdm.berlios.de/usage.html +ported to GNU B: seq 19 | parallel buffon -o - | sort -n > result cat files | parallel cmd @@ -900,6 +911,9 @@ These do something different from GNU B (seq 10; sleep 5; echo 2) | time parallel -j2 'sleep 2; echo' tail -f /var/log/syslog | parallel echo +Most of the examples from the book GNU Parallel 2018 do not work, thus +Rust parallel is not close to being a compatible replacement. + Rust parallel has no remote facilities. It uses /tmp/parallel for tmp files and does not clean up if @@ -1514,10 +1528,203 @@ Here are the 5 examples converted to GNU Parallel: https://github.com/soveran/map +=head2 DIFFERENCES BETWEEN loop AND GNU Parallel + +B mixes stdout and stderr: + + loop 'ls /no-such-file' >/dev/null + +B's replacement string B<$ITEM> does not quote strings: + + echo 'two spaces' | loop 'echo $ITEM' + +B cannot run functions: + + myfunc() { echo joe; } + export -f myfunc + loop 'myfunc this fails' + +Some of the examples from https://github.com/Miserlou/Loop/ can be +emulated with GNU B: + + # A couple of functions will make the code easier to read + $ loopy() { + yes | parallel -uN0 -j1 "$@" + } + $ export -f loopy + $ time_out() { + parallel -uN0 -q --timeout "$@" ::: 1 + } + $ match() { + perl -0777 -ne 'grep /'"$1"'/,$_ and print or exit 1' + } + $ export -f match + + $ loop 'ls' --every 10s + $ loopy --delay 10s ls + + $ loop 'touch $COUNT.txt' --count-by 5 + $ loopy touch '{= $_=seq()*5 =}'.txt + + $ loop --until-contains 200 -- ./get_response_code.sh --site mysite.biz` + $ loopy --halt now,success=1 './get_response_code.sh --site mysite.biz | + match 200' + + $ loop './poke_server' --for-duration 8h + $ time_out 8h loopy ./poke_server + + $ loop './poke_server' --until-success + $ loopy --halt now,success=1 ./poke_server + + $ cat files_to_create.txt | loop 'touch $ITEM' + $ cat files_to_create.txt | parallel touch {} + + $ loop 'ls' --for-duration 10min --summary + # --joblog is somewhat more verbose than --summary + $ time_out 10m loopy --joblog my.log ./poke_server; cat my.log + + $ loop 'echo hello' + $ loopy echo hello + + $ loop 'echo $COUNT' + # GNU Parallel counts from 1 + $ loopy echo {#} + # Counting from 0 can be forced + $ loopy echo '{= $_=seq()-1 =}' + + $ loop 'echo $COUNT' --count-by 2 + $ loopy echo '{= $_=2*(seq()-1) =}' + + $ loop 'echo $COUNT' --count-by 2 --offset 10 + $ loopy echo '{= $_=10+2*(seq()-1) =}' + + $ loop 'echo $COUNT' --count-by 1.1 + # GNU Parallel rounds 3.3000000000000003 to 3.3 + $ loopy echo '{= $_=1.1*(seq()-1) =}' + + $ loop 'echo $COUNT $ACTUALCOUNT' --count-by 2 + $ loopy echo '{= $_=2*(seq()-1) =} {#}' + + $ loop 'echo $COUNT' --num 3 --summary + # --joblog is somewhat more verbose than --summary + $ seq 3 | parallel --joblog my.log echo; cat my.log + + $ loop 'ls -foobarbatz' --num 3 --summary + # --joblog is somewhat more verbose than --summary + $ seq 3 | parallel --joblog my.log -N0 ls -foobarbatz; cat my.log + + $ loop 'echo $COUNT' --count-by 2 --num 50 --only-last + # Can be emulated by running 2 jobs + $ seq 49 | parallel echo '{= $_=2*(seq()-1) =}' >/dev/null + $ echo 50| parallel echo '{= $_=2*(seq()-1) =}' + + $ loop 'date' --every 5s + $ loopy --delay 5s date + + $ loop 'date' --for-duration 8s --every 2s + $ time_out 8s loopy --delay 2s date + + $ loop 'date -u' --until-time '2018-05-25 20:50:00' --every 5s + $ seconds=$((`date -d 2019-05-25T20:50:00 +%s` - `date +%s`))s + $ time_out $seconds loopy --delay 5s date -u + + $ loop 'echo $RANDOM' --until-contains "666" + $ loopy --halt now,success=1 'echo $RANDOM | match 666' + + $ loop 'if (( RANDOM % 2 )); then + (echo "TRUE"; true); + else + (echo "FALSE"; false); + fi' --until-success + $ loopy --halt now,success=1 'if (( $RANDOM % 2 )); then + (echo "TRUE"; true); + else + (echo "FALSE"; false); + fi' + + $ loop 'if (( RANDOM % 2 )); then + (echo "TRUE"; true); + else + (echo "FALSE"; false); + fi' --until-error + $ loopy --halt now,fail=1 'if (( $RANDOM % 2 )); then + (echo "TRUE"; true); + else + (echo "FALSE"; false); + fi' + + $ loop 'date' --until-match "(\d{4})" + $ loopy --halt now,success=1 'date | match [0-9][0-9][0-9][0-9]' + + $ loop 'echo $ITEM' --for red,green,blue + $ parallel echo ::: red green blue + + $ cat /tmp/my-list-of-files-to-create.txt | loop 'touch $ITEM' + $ cat /tmp/my-list-of-files-to-create.txt | parallel touch + + $ ls | loop 'cp $ITEM $ITEM.bak'; ls + $ ls | parallel cp {} {}.bak; ls + + $ loop 'echo $ITEM | tr a-z A-Z' -i + $ parallel 'echo {} | tr a-z A-Z' + # Or more efficiently: + $ parallel --pipe tr a-z A-Z + + $ loop 'echo $ITEM' --for "`ls`" + $ parallel echo {} ::: "`ls`" + + $ ls | loop './my_program $ITEM' --until-success; + $ ls | parallel --halt now,success=1 ./my_program {} + + $ ls | loop './my_program $ITEM' --until-fail; + $ ls | parallel --halt now,fail=1 ./my_program {} + + $ ./deploy.sh; + loop 'curl -sw "%{http_code}" http://coolwebsite.biz' \ + --every 5s --until-contains 200; + ./announce_to_slack.sh + $ ./deploy.sh; + loopy --delay 5s --halt now,success=1 \ + 'curl -sw "%{http_code}" http://coolwebsite.biz | match 200'; + ./announce_to_slack.sh + + $ loop "ping -c 1 mysite.com" --until-success; ./do_next_thing + $ loopy --halt now,success=1 ping -c 1 mysite.com; ./do_next_thing + + $ ./create_big_file -o my_big_file.bin; + loop 'ls' --until-contains 'my_big_file.bin'; + ./upload_big_file my_big_file.bin + # inotifywait is a better tool to detect file system changes. + # It can even make sure the file is complete + # so you are not uploading an incomplete file + $ inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | + grep my_big_file.bin + + $ ls | loop 'cp $ITEM $ITEM.bak' + $ ls | parallel cp {} {}.bak + + $ loop './do_thing.sh' --every 15s --until-success --num 5 + $ parallel --retries 5 --delay 15s ::: ./do_thing.sh + +https://github.com/Miserlou/Loop/ (Last checked: 2018-10) + + +=head2 DIFFERENCES BETWEEN lorikeet AND GNU Parallel + +B can run jobs in parallel. It does this based on a +dependency graph described in a file, so this is similar to B. + +https://github.com/cetra3/lorikeet (Last checked: 2018-10) + + =head2 Todo Url for spread +https://github.com/john01dav/spp + +https://github.com/amritb/with-this.git + https://github.com/fd0/machma Requires Go >= 1.7. https://github.com/k-bx/par requires Haskell to work. This limits the diff --git a/src/parallel_design.pod b/src/parallel_design.pod index 76fa3264..7bf9f1f8 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -1229,9 +1229,11 @@ cost work and which have not been tested are, however, unlikely to be prioritized. Running B one single time takes less than 10 -seconds, and will silence the citation notice for future runs. If that -is too much trouble for you, why not use one of the alternatives -instead? See a list in: B. +seconds, and will silence the citation notice for future runs. This is +comparable to graphical tools where you have to click a checkbox +saying "Do not show this again". But if that is too much trouble for +you, why not use one of the alternatives instead? See a list in: +B. =head1 Ideas for new design diff --git a/src/sql b/src/sql index 5328708b..b878ed7a 100755 --- a/src/sql +++ b/src/sql @@ -576,7 +576,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20180922; + $Global::version = 20180923; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/REQUIREMENTS b/testsuite/REQUIREMENTS index 5bb28020..dd5d17bd 100644 --- a/testsuite/REQUIREMENTS +++ b/testsuite/REQUIREMENTS @@ -100,8 +100,9 @@ parallel -j3 --timeout 3 --retries 10 --tag ssh_a_to_b ::: $shellsplus ::: # Remove env_parallel from .profile ssh nopathbash@lo 'perl -i.bak -pe s/.*env_parallel.*// .profile .bashrc' ssh nopathcsh@lo 'echo >> .cshrc setenv PATH /bin:/usr/bin' - ssh nopathbash@lo 'echo $PATH' - ssh nopathcsh@lo 'echo $PATH' + ssh nopathbash@lo 'echo $PATH; echo 1 | parallel echo' || echo Should FAIL + ssh nopathcsh@lo 'echo $PATH; echo 1 | parallel echo' || echo Should FAIL + ) ssh-copy-id localhost @@ -132,3 +133,9 @@ echo echo Add to /etc/ssh/sshd_config echo Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc echo KexAlgorithms diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,curve25519-sha256@libssh.org,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1 +echo +echo If you get: +echo Unable to negotiate with server port 22: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se +echo add this to .ssh/config +echo Ciphers +aes256-cbc + diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 21249f8d..4b45e843 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -20,7 +20,7 @@ export SMALLDISK find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | parallel rm stdsort() { - "$@" 2>&1 | sort; + "$@" 2>&1 | LC_ALL=C sort; } export -f stdsort @@ -602,13 +602,13 @@ par_retries_replacement_string() { par_tee() { export PARALLEL='-k --tee --pipe --tag' - seq 1000000 | parallel 'echo {%};LANG=C wc' ::: {1..5} ::: {a..b} - seq 300000 | parallel 'grep {1} | LANG=C wc {2}' ::: {1..5} ::: -l -c + seq 1000000 | parallel 'echo {%};LC_ALL=C wc' ::: {1..5} ::: {a..b} + seq 300000 | parallel 'grep {1} | LC_ALL=C wc {2}' ::: {1..5} ::: -l -c } par_tagstring_pipe() { echo 'bug #50228: --pipe --tagstring broken' - seq 3000 | parallel -j4 --pipe -N1000 -k --tagstring {%} LANG=C wc + seq 3000 | parallel -j4 --pipe -N1000 -k --tagstring {%} LC_ALL=C wc } par_link_files_as_only_arg() { @@ -706,12 +706,12 @@ par_halt_one_job() { par_blocking_redir() { ( - echo 'bug #52740: Bash redirection with process substitution blocks' - echo Test stdout - echo 3 | parallel seq > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2) - echo Test stderr - echo nOfilE | parallel ls > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2) - ) 2>&1 | sort + echo 'bug #52740: Bash redirection with process substitution blocks' + echo Test stdout + echo 3 | parallel seq > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2) + echo Test stderr + echo nOfilE | parallel ls > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2) + ) 2>&1 | LC_ALL=C sort } par_pipepart_recend_recstart() { @@ -848,6 +848,12 @@ par_empty_command() { echo B: $b } +par_empty_input_on_stdin() { + echo 'https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=910470' + echo 'This should give no output' + true | stdout parallel --shuf echo +} + export -f $(compgen -A function | grep par_) -compgen -A function | grep par_ | sort | +compgen -A function | grep par_ | LC_ALL=C sort | parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-100s.sh b/testsuite/tests-to-run/parallel-local-100s.sh index 422049a9..827066fd 100644 --- a/testsuite/tests-to-run/parallel-local-100s.sh +++ b/testsuite/tests-to-run/parallel-local-100s.sh @@ -35,12 +35,12 @@ par_exit_code() { '/tmp/mysleep '$s \ 'parallel --halt-on-error now,fail=1 /tmp/mysleep ::: '$s \ 'parallel --halt-on-error now,done=1 /tmp/mysleep ::: '$s \ - 'parallel --halt-on-error now,done=1 true ::: '$s \ + 'parallel --halt-on-error now,done=1 /bin/true ::: '$s \ 'parallel --halt-on-error now,done=1 exit ::: '$s \ 'true;/tmp/mysleep '$s \ 'parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: '$s \ 'parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: '$s \ - 'parallel --halt-on-error now,done=1 "true;true" ::: '$s \ + 'parallel --halt-on-error now,done=1 "true;/bin/true" ::: '$s \ 'parallel --halt-on-error now,done=1 "true;exit" ::: '$s } export -f runit diff --git a/testsuite/tests-to-run/parallel-local-10s.sh b/testsuite/tests-to-run/parallel-local-10s.sh index b9631615..a1c17840 100644 --- a/testsuite/tests-to-run/parallel-local-10s.sh +++ b/testsuite/tests-to-run/parallel-local-10s.sh @@ -4,6 +4,28 @@ # Each should be taking 10-30s and be possible to run in parallel # I.e.: No race conditions, no logins +par_sem_2jobs() { + echo '### Test semaphore 2 jobs running simultaneously' + parallel --semaphore --id 2jobs -u -j2 'echo job1a 1; sleep 4; echo job1b 3' + sleep 0.5 + parallel --semaphore --id 2jobs -u -j2 'echo job2a 2; sleep 4; echo job2b 5' + sleep 0.5 + parallel --semaphore --id 2jobs -u -j2 'echo job3a 4; sleep 4; echo job3b 6' + parallel --semaphore --id 2jobs --wait + echo done +} + +par_semaphore() { + echo '### Test if parallel invoked as sem will run parallel --semaphore' + sem --id as_sem -u -j2 'echo job1a 1; sleep 3; echo job1b 3' + sleep 0.5 + sem --id as_sem -u -j2 'echo job2a 2; sleep 3; echo job2b 5' + sleep 0.5 + sem --id as_sem -u -j2 'echo job3a 4; sleep 3; echo job3b 6' + sem --id as_sem --wait + echo done +} + par_line_buffer() { echo "### --line-buffer" tmp1=$(tempfile) @@ -58,7 +80,7 @@ par__pipe_tee() { < /dev/zero openssl enc -aes-128-ctr -K 1234 -iv 1234 2>/dev/null | head -c 1G; } - random1G | parallel --pipe --tee cat ::: {1..3} | LANG=C wc -c + random1G | parallel --pipe --tee cat ::: {1..3} | LC_ALL=C wc -c } par__pipepart_tee() { @@ -71,7 +93,7 @@ par__pipepart_tee() { } tmp=$(mktemp) random1G >$tmp - parallel --pipepart --tee -a $tmp cat ::: {1..3} | LANG=C wc -c + parallel --pipepart --tee -a $tmp cat ::: {1..3} | LC_ALL=C wc -c rm $tmp } @@ -126,7 +148,7 @@ _EOF echo ) | perl -ne 's/\r//g;/\S/ and print' | # Race will cause the order to change - sort + LC_ALL=C sort } par_k() { @@ -148,7 +170,7 @@ par_k_linebuffer() { par_maxlinelen_m_I() { echo "### Test max line length -m -I" - seq 1 60000 | parallel -I :: -km -j1 echo a::b::c | sort >/tmp/114-a$$; + seq 1 60000 | parallel -I :: -km -j1 echo a::b::c | LC_ALL=C sort >/tmp/114-a$$; md5sum /tmp/114-b$$; + seq 1 60000 | parallel -I :: -kX -j1 echo a::b::c | LC_ALL=C sort >/tmp/114-b$$; md5sum &1' diff --git a/testsuite/tests-to-run/parallel-local-1s.sh b/testsuite/tests-to-run/parallel-local-1s.sh index 3024fb64..20d78ee7 100644 --- a/testsuite/tests-to-run/parallel-local-1s.sh +++ b/testsuite/tests-to-run/parallel-local-1s.sh @@ -62,66 +62,66 @@ par_result() { echo "### Test --results" mkdir -p /tmp/parallel_results_test parallel -k --results /tmp/parallel_results_test/testA echo {1} {2} ::: I II ::: III IIII - ls /tmp/parallel_results_test/testA/*/*/*/*/* + ls /tmp/parallel_results_test/testA/*/*/*/*/* | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testA* echo "### Test --res" mkdir -p /tmp/parallel_results_test parallel -k --res /tmp/parallel_results_test/testD echo {1} {2} ::: I II ::: III IIII - ls /tmp/parallel_results_test/testD/*/*/*/*/* + ls /tmp/parallel_results_test/testD/*/*/*/*/* | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testD* echo "### Test --result" mkdir -p /tmp/parallel_results_test parallel -k --result /tmp/parallel_results_test/testE echo {1} {2} ::: I II ::: III IIII - ls /tmp/parallel_results_test/testE/*/*/*/*/* + ls /tmp/parallel_results_test/testE/*/*/*/*/* | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testE* echo "### Test --results --header :" mkdir -p /tmp/parallel_results_test parallel -k --header : --results /tmp/parallel_results_test/testB echo {1} {2} ::: a I II ::: b III IIII - ls /tmp/parallel_results_test/testB/*/*/*/*/* + ls /tmp/parallel_results_test/testB/*/*/*/*/* | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testB* echo "### Test --results --header : named - a/b swapped" mkdir -p /tmp/parallel_results_test parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: b III IIII ::: a I II - ls /tmp/parallel_results_test/testC/*/*/*/*/* + ls /tmp/parallel_results_test/testC/*/*/*/*/* | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testC* echo "### Test --results --header : piped" mkdir -p /tmp/parallel_results_test (echo Col; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testF true - find /tmp/parallel_results_test/testF/*/*/* | sort + find /tmp/parallel_results_test/testF/*/*/* | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testF* echo "### Test --results --header : piped - non-existing column header" mkdir -p /tmp/parallel_results_test (printf "Col1\t\n"; printf "v1\tv2\tv3\n"; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testG true - find /tmp/parallel_results_test/testG/ | sort + find /tmp/parallel_results_test/testG/ | LC_ALL=C sort rm -rf /tmp/parallel_results_test/testG* } par_result_replace() { echo '### bug #49983: --results with {1}' parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz - find /tmp/par_*_49983 | sort + find /tmp/par_*_49983 | LC_ALL=C sort rm -rf /tmp/par_*_49983 parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz ::: A B C - find /tmp/par_*_49983 | sort + find /tmp/par_*_49983 | LC_ALL=C sort rm -rf /tmp/par_*_49983 parallel --results /tmp/par_{1}-{2}_49983 -k echo ::: foo bar baz ::: A B C - find /tmp/par_*_49983 | sort + find /tmp/par_*_49983 | LC_ALL=C sort rm -rf /tmp/par_*_49983 parallel --results /tmp/par__49983 -k echo ::: foo bar baz ::: A B C - find /tmp/par_*_49983 | sort + find /tmp/par_*_49983 | LC_ALL=C sort rm -rf /tmp/par_*_49983 parallel --results /tmp/par__49983 --header : -k echo ::: foo bar baz ::: A B C - find /tmp/par_*_49983 | sort + find /tmp/par_*_49983 | LC_ALL=C sort rm -rf /tmp/par_*_49983 parallel --results /tmp/par__49983-{}/ --header : -k echo ::: foo bar baz ::: A B C - find /tmp/par_*_49983-* | sort + find /tmp/par_*_49983-* | LC_ALL=C sort rm -rf /tmp/par_*_49983-* } @@ -258,7 +258,11 @@ par_pipe_compress_blocks() { seq 3 | parallel -k -j2 --compress -N1 -L1 --pipe cat } +par_too_long_line_X() { + echo 'bug #54869: Long lines break' + seq 3000 | parallel -Xj1 'echo {} {} {} {} {} {} {} {} {} {} {} {} {} {} | wc' +} export -f $(compgen -A function | grep par_) -compgen -A function | grep par_ | sort | +compgen -A function | grep par_ | LC_ALL=C sort | 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 9dc48900..958311cc 100755 --- a/testsuite/tests-to-run/parallel-local-30s.sh +++ b/testsuite/tests-to-run/parallel-local-30s.sh @@ -10,7 +10,7 @@ par_sigterm() { A=$! sleep 29; kill -TERM $A wait - sort /tmp/parallel$$ + LC_ALL=C sort /tmp/parallel$$ rm /tmp/parallel$$ } diff --git a/testsuite/tests-to-run/parallel-local-3s.sh b/testsuite/tests-to-run/parallel-local-3s.sh index 57a839f1..8aa4bc51 100644 --- a/testsuite/tests-to-run/parallel-local-3s.sh +++ b/testsuite/tests-to-run/parallel-local-3s.sh @@ -186,28 +186,6 @@ newlines"' ::: a b c d e | sort ) | perl -pe 's/\0//g;s/\d+/./g' } -par_parcat_mixing() { - echo 'parcat output should mix: a b a b' - mktmpfifo() { - tmp=$(tempfile) - rm $tmp - mkfifo $tmp - echo $tmp - } - slow_output() { - string=$1 - perl -e 'print "'$string'"x9000,"start\n"' - sleep 6 - perl -e 'print "'$string'"x9000,"end\n"' - } - tmp1=$(mktmpfifo) - tmp2=$(mktmpfifo) - slow_output a > $tmp1 & - sleep 3 - slow_output b > $tmp2 & - parcat $tmp1 $tmp2 | tr -s ab -} - par_delay_human_readable() { # Test that you can use d h m s in --delay parallel --delay 0.1s echo ::: a b c @@ -269,4 +247,4 @@ par_nice() { export -f $(compgen -A function | grep par_) -compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1' +compgen -A function | grep par_ | LC_ALL=C sort | parallel -j6 --tag -k '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-race02.sh b/testsuite/tests-to-run/parallel-local-race02.sh index ef2b549c..28890cce 100644 --- a/testsuite/tests-to-run/parallel-local-race02.sh +++ b/testsuite/tests-to-run/parallel-local-race02.sh @@ -29,6 +29,28 @@ echo 1=OK $?' | grep -v '\[1\]' | grep -v 'SHA256' #} +par_parcat_mixing() { + echo 'parcat output should mix: a b a b' + mktmpfifo() { + tmp=$(tempfile) + rm $tmp + mkfifo $tmp + echo $tmp + } + slow_output() { + string=$1 + perl -e 'print "'$string'"x9000,"start\n"' + sleep 2 + perl -e 'print "'$string'"x9000,"end\n"' + } + tmp1=$(mktmpfifo) + tmp2=$(mktmpfifo) + slow_output a > $tmp1 & + sleep 1 + slow_output b > $tmp2 & + parcat $tmp1 $tmp2 | tr -s ab +} + par_testhalt() { testhalt_false() { echo '### testhalt --halt '$1; @@ -94,6 +116,14 @@ par_tmux_termination() { stdout parallel --timeout 120 doit ::: 1 } +par_linebuffer_tag_slow_output() { + echo "Test output tag with mixing halflines" + halfline() { + perl -e '$| = 1; map { print $ARGV[0]; sleep(1); print "$_\n" } split //, "Half\n"' $1 + } + export -f halfline + parallel --delay 0.5 -j0 --tag --line-buffer halfline ::: a b +} export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | sort | diff --git a/testsuite/tests-to-run/parallel-local-sql.sh b/testsuite/tests-to-run/parallel-local-sql.sh index 011ef0dd..af4493f2 100755 --- a/testsuite/tests-to-run/parallel-local-sql.sh +++ b/testsuite/tests-to-run/parallel-local-sql.sh @@ -147,6 +147,6 @@ par_no_table() { export -f $(compgen -A function | egrep 'p_|par_') # Tested that -j0 in parallel is fastest (up to 15 jobs) # more than 3 jobs: sqlite locks -compgen -A function | grep par_ | sort | +compgen -A function | grep par_ | LC_ALL=C sort | stdout parallel --timeout 200 -vj3 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \ :::: - ::: \$MYSQL \$PG \$SQLITE diff --git a/testsuite/tests-to-run/parallel-local-ssh1.sh b/testsuite/tests-to-run/parallel-local-ssh1.sh index 9027fd05..78fe9c96 100644 --- a/testsuite/tests-to-run/parallel-local-ssh1.sh +++ b/testsuite/tests-to-run/parallel-local-ssh1.sh @@ -114,8 +114,8 @@ echo '### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"' touch -- '/tmp/./--- /A' '/tmp/ ---/B'; rm -f ./---?/A.a ./?---/B.a; parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B'; - ls ./---?/A.a ./?---/B.a; - parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK'; + ls ./---?/A.a ./?---/B.a | LC_ALL=C sort; + parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK' | LC_ALL=C sort; echo '### bug #46519: --onall ignores --transfer' touch bug46519.{a,b,c}; rm -f bug46519.?? bug46519.???; diff --git a/testsuite/tests-to-run/parallel-local-ssh7.sh b/testsuite/tests-to-run/parallel-local-ssh7.sh index 1dc4ec36..51fb5ebd 100755 --- a/testsuite/tests-to-run/parallel-local-ssh7.sh +++ b/testsuite/tests-to-run/parallel-local-ssh7.sh @@ -178,7 +178,7 @@ par_csh_man() { _EOF ) # Sometimes the order f*cks up - stdout ssh csh@lo "$myscript" | sort + stdout ssh csh@lo "$myscript" | LC_ALL=C sort } par_dash_man() { @@ -243,6 +243,7 @@ par_fish_man() { myscript=$(cat <<'_EOF' echo "### From man env_parallel" + env_parallel --session alias myecho='echo aliases with \= \& \" \!'" \'" myecho work env_parallel myecho ::: work @@ -545,8 +546,12 @@ par_zsh_man() { alias multiline='echo multiline echo aliases with \= \& \" \!'" \'" - # eval is needed make aliases work eval multiline work + # Zsh-5.4.2 requires additional quoting when multiline + # Looks like a bug + alias multiline='echo multiline + echo aliases with \\= \\& \\" \\!'" \\\'" + # eval is needed make aliases work env_parallel multiline ::: work env_parallel -S server multiline ::: work env_parallel --env multiline multiline ::: work @@ -792,7 +797,8 @@ par_fish_underscore() { end set not_copied_var "BAD"; set not_copied_array BAD BAD BAD; - env_parallel --record-env; +# env_parallel --record-env; + env_parallel --session; alias myecho="echo \$myvar aliases"; function myfunc myecho $myarray functions $argv @@ -1103,7 +1109,7 @@ par_ash_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh ash@lo "$myscript" 2>&1 | sort + ssh ash@lo "$myscript" 2>&1 | LC_ALL=C sort } par_bash_funky() { @@ -1136,7 +1142,7 @@ par_bash_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh bash@lo "$myscript" 2>&1 | sort + ssh bash@lo "$myscript" 2>&1 | LC_ALL=C sort } par_csh_funky() { @@ -1201,11 +1207,12 @@ par_dash_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh dash@lo "$myscript" 2>&1 | sort + ssh dash@lo "$myscript" 2>&1 | LC_ALL=C sort } par_fish_funky() { myscript=$(cat <<'_EOF' + env_parallel --session set myvar "myvar works" setenv myenvvar "myenvvar works" @@ -1277,7 +1284,7 @@ par_ksh_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh ksh@lo "$myscript" 2>&1 | sort + ssh ksh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_mksh_funky() { @@ -1310,7 +1317,7 @@ par_mksh_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh mksh@lo "$myscript" 2>&1 | sort + ssh mksh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_sh_funky() { @@ -1343,13 +1350,13 @@ par_sh_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh sh@lo "$myscript" 2>&1 | sort + ssh sh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_tcsh_funky() { myscript=$(cat <<'_EOF' - # funky breaks with different LANG - setenv LANG C + # funky breaks with different LC_ALL + setenv LC_ALL C set myvar = "myvar works" set funky = "`perl -e 'print pack q(c*), 2..255'`" set myarray = ('' 'array_val2' '3' '' '5' ' space 6 ') @@ -1378,7 +1385,7 @@ par_tcsh_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh tcsh@lo "$myscript" 2>&1 | sort + ssh tcsh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_zsh_funky() { @@ -1387,7 +1394,8 @@ par_zsh_funky() { . `which env_parallel.zsh`; myvar="myvar works" - funky=$(perl -e "print pack \"c*\", 1..255") + # Zsh-5.4.2 fails for ascii 167 + funky=$(perl -e "print pack \"c*\", 1..166,168..255") myarray=("" array_val2 3 "" 5 " space 6 ") declare -A assocarr assocarr[a]=assoc_val_a @@ -1409,7 +1417,7 @@ par_zsh_funky() { _EOF ) # Order is often different. Dunno why. So sort - ssh zsh@lo "$myscript" 2>&1 | sort + ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_ash_env_parallel() { @@ -1434,7 +1442,7 @@ par_ash_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh ash@lo "$myscript" 2>&1 | sort + ssh ash@lo "$myscript" 2>&1 | LC_ALL=C sort } par_bash_env_parallel() { @@ -1459,7 +1467,7 @@ par_bash_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh bash@lo "$myscript" 2>&1 | sort + ssh bash@lo "$myscript" 2>&1 | LC_ALL=C sort } par_csh_env_parallel() { @@ -1496,7 +1504,7 @@ par_dash_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh dash@lo "$myscript" 2>&1 | sort + ssh dash@lo "$myscript" 2>&1 | LC_ALL=C sort } par_fish_env_parallel() { @@ -1534,7 +1542,7 @@ par_ksh_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh ksh@lo "$myscript" 2>&1 | sort + ssh ksh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_mksh_env_parallel() { @@ -1559,7 +1567,7 @@ par_mksh_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh mksh@lo "$myscript" 2>&1 | sort + ssh mksh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_sh_env_parallel() { @@ -1584,7 +1592,7 @@ par_sh_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh sh@lo "$myscript" 2>&1 | sort + ssh sh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_tcsh_env_parallel() { @@ -1597,7 +1605,7 @@ par_tcsh_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh tcsh@lo "$myscript" 2>&1 | sort + ssh tcsh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_zsh_env_parallel() { @@ -1621,7 +1629,7 @@ par_zsh_env_parallel() { _EOF ) # Order is often different. Dunno why. So sort - ssh zsh@lo "$myscript" 2>&1 | sort + ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort } par_ash_environment_too_big() { @@ -2595,7 +2603,7 @@ par_bash_parset() { echo "${arr1[0]} ${arr1[1]} ${arr1[2]}" env_parset comma3,comma2,comma1 myfun ::: baz bar foo echo "$comma1 $comma2 $comma3" - env_parset 'space3 space2 space1' myfum ::: baz bar foo + env_parset 'space3 space2 space1' myfun ::: baz bar foo echo "$space1 $space2 $space3" env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1 echo "$newline1" @@ -2724,7 +2732,7 @@ par_ksh_parset() { echo "${arr1[0]} ${arr1[1]} ${arr1[2]}" env_parset comma3,comma2,comma1 myfun ::: baz bar foo echo "$comma1 $comma2 $comma3" - env_parset 'space3 space2 space1' myfum ::: baz bar foo + env_parset 'space3 space2 space1' myfun ::: baz bar foo echo "$space1 $space2 $space3" env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1 echo "$newline1" @@ -2771,6 +2779,8 @@ par_mksh_parset() { echo ${myarray[4]} ${myarray[5]} ${myarray[6]} echo '### env_parset' + # bug in mksh: Alias must be set before + alias myecho='echo myecho "$myvar" "${myarr[1]}"' myfun() { myecho myfun "$@"; } @@ -2782,7 +2792,7 @@ par_mksh_parset() { echo "${arr1[0]} ${arr1[1]} ${arr1[2]}" env_parset comma3,comma2,comma1 myfun ::: baz bar foo echo "$comma1 $comma2 $comma3" - env_parset 'space3 space2 space1' myfum ::: baz bar foo + env_parset 'space3 space2 space1' myfun ::: baz bar foo echo "$space1 $space2 $space3" env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1 echo "$newline1" @@ -3256,11 +3266,14 @@ _EOF } export -f $(compgen -A function | grep par_) + +# --retries 2 due to ssh_exchange_identification: read: Connection reset by peer + #compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1' #compgen -A function | grep par_ | sort | -compgen -A function | grep par_ | sort -r | +compgen -A function | grep par_ | LC_ALL=C sort -r | # parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1' - parallel --joblog /tmp/jl-`basename $0` -j200% --tag -k '{} 2>&1' | + parallel --joblog /tmp/jl-`basename $0` -j200% --retries 2 --tag -k '{} 2>&1' | perl -pe 's/line \d\d\d:/line XXX:/; s/\d+ >= \d+/XXX >= XXX/; s/sh:? \d?\d\d:/sh: XXX:/; diff --git a/testsuite/tests-to-run/parallel-local-ssh8.sh b/testsuite/tests-to-run/parallel-local-ssh8.sh index 7eb77c60..9dad3922 100644 --- a/testsuite/tests-to-run/parallel-local-ssh8.sh +++ b/testsuite/tests-to-run/parallel-local-ssh8.sh @@ -7,7 +7,8 @@ par_path_remote_bash() { rm -rf /tmp/parallel cp /usr/local/bin/parallel /tmp - cat <<'_EOS' | stdout ssh nopathbash@lo -T | grep -Ev 'For upgrade information, please visit:|updates are security updates|packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://|from 13 to 17 years|mentor:|New release|do-release-upgrade|public clouds|\s*^$' | uniq + cat <<'_EOS' | stdout ssh nopathbash@lo -T | perl -ne '/logged in/..0 and print' | uniq + echo logged in echo BASH Path before: $PATH with no parallel parallel echo ::: 1 # Race condition stderr/stdout @@ -28,7 +29,8 @@ par_path_remote_csh() { rm -rf /tmp/parallel cp /usr/local/bin/parallel /tmp - cat <<'_EOS' | stdout ssh nopathcsh@lo -T | grep -Ev 'For upgrade information, please visit:|updates are security updates|packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://|from 13 to 17 years|mentor:|New release|do-release-upgrade|public clouds|\s*^$' | uniq + cat <<'_EOS' | stdout ssh nopathcsh@lo -T | perl -ne '/logged in/..0 and print' | uniq + echo logged in echo CSH Path before: $PATH with no parallel which parallel >& /dev/stdout echo '^^^^^^^^ Not found is OK' @@ -155,6 +157,6 @@ par_retries_bug_from_2010() { export -f $(compgen -A function | grep par_) #compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1' -compgen -A function | grep par_ | sort | +compgen -A function | grep par_ | LC_ALL=C sort | parallel --joblog /tmp/jl-`basename $0` --delay 0.1 -j10 --tag -k '{} 2>&1' | grep -Ev 'microk8s|smart connected IoT' diff --git a/testsuite/tests-to-run/parallel-local-ssh9.sh b/testsuite/tests-to-run/parallel-local-ssh9.sh index 118676a9..f2c37eb6 100644 --- a/testsuite/tests-to-run/parallel-local-ssh9.sh +++ b/testsuite/tests-to-run/parallel-local-ssh9.sh @@ -147,9 +147,9 @@ par_propagate_env() { par_env_parallel_big_env() { echo '### bug #54128: command too long when exporting big env' . `which env_parallel.bash` - a=`rand | head -c 75000` + a=`rand | perl -pe 's/\0//g'| head -c 75000` env_parallel -Slo echo should not ::: fail 2>&1 - a=`rand | head -c 76000` + a=`rand | perl -pe 's/\0//g'| head -c 80000` env_parallel -Slo echo should ::: fail 2>/dev/null || echo OK } diff --git a/testsuite/tests-to-run/parallel-local13.sh b/testsuite/tests-to-run/parallel-local13.sh index 0fc41788..59e761b2 100644 --- a/testsuite/tests-to-run/parallel-local13.sh +++ b/testsuite/tests-to-run/parallel-local13.sh @@ -9,7 +9,7 @@ PARALLEL=-j8 export PARALLEL stdsort() { - "$@" 2>&1 | sort; + "$@" 2>&1 | LC_ALL=C sort; } export -f stdsort diff --git a/testsuite/tests-to-run/parallel-local15.sh b/testsuite/tests-to-run/parallel-local15.sh index 5e58d38d..8d67a6ca 100755 --- a/testsuite/tests-to-run/parallel-local15.sh +++ b/testsuite/tests-to-run/parallel-local15.sh @@ -8,22 +8,22 @@ cd $TMP/ echo echo test of cat pipe sh | parallel -j 50 2>&1 find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/} -ls | parallel ls | sort -ls | parallel echo ls | sort -ls | parallel -j 1 echo ls | sort -find -type f | parallel diff {} a/foo ">"{}.diff | sort -ls | parallel -v --group "ls {}|wc;echo {}" | sort +ls | parallel ls | LC_ALL=C sort +ls | parallel echo ls | LC_ALL=C sort +ls | parallel -j 1 echo ls | LC_ALL=C sort +find -type f | parallel diff {} a/foo ">"{}.diff | LC_ALL=C sort +ls | parallel -v --group "ls {}|wc;echo {}" | LC_ALL=C sort echo '### Check that we can have more input than max procs (-j 0) - touch' -perl -e 'print map {"more_than_5000-$_\n" } (4000..9999)' | parallel -vj 0 touch | sort | tail +perl -e 'print map {"more_than_5000-$_\n" } (4000..9999)' | parallel -vj 0 touch | LC_ALL=C sort | tail echo '### rm' -perl -e 'print map {"more_than_5000-$_\n" } (4000..9900)' | parallel -j 0 rm | sort +perl -e 'print map {"more_than_5000-$_\n" } (4000..9900)' | parallel -j 0 rm | LC_ALL=C sort cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 | egrep -v 'parallel: Warning: Starting|parallel: Warning: Consider' -ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort -ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort -find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort -find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort -find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort -find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort +ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | LC_ALL=C sort +ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | LC_ALL=C sort +find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | LC_ALL=C sort +find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | LC_ALL=C sort +find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | LC_ALL=C sort +find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | LC_ALL=C sort EOF cd - >/dev/null diff --git a/testsuite/tests-to-run/parallel-local164.sh b/testsuite/tests-to-run/parallel-local164.sh index ed4f3565..8075d543 100644 --- a/testsuite/tests-to-run/parallel-local164.sh +++ b/testsuite/tests-to-run/parallel-local164.sh @@ -50,7 +50,7 @@ echo "bug #37956: --colsep does not default to '\t' as specified in the man page printf "A\tB\n1\tone" | parallel --header : echo {B} {A} echo '### Test --tollef' - stdout parallel -k --tollef echo -- 1 2 3 ::: a b c | sort + stdout parallel -k --tollef echo -- 1 2 3 ::: a b c | LC_ALL=C sort echo '### Test --tollef --gnu' stdout parallel -k --tollef --gnu echo ::: 1 2 3 -- a b c diff --git a/testsuite/tests-to-run/parallel-local18.sh b/testsuite/tests-to-run/parallel-local18.sh index 72e49879..ec0b7339 100644 --- a/testsuite/tests-to-run/parallel-local18.sh +++ b/testsuite/tests-to-run/parallel-local18.sh @@ -52,9 +52,9 @@ test_chr_on_sshlogin() { stdout parallel -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// LANG=C parallel -k -j1 $onall -S $sshlogin --env V,V2,LANG echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | - grep -v ' 4 '| - grep -v xauth | - grep -v X11 + grep -av ' 4 '| + grep -av xauth | + grep -av X11 } export -f test_chr_on_sshlogin @@ -87,7 +87,7 @@ par_env_160() { par_env_160_onall() { echo '### Test --env for \160 - which kills csh - single and double --onall - no output is good' test_chr_on_sshlogin 160 :,1/lo,1/tcsh@lo --onall | - grep -v ' 3 ' + grep -a -v ' 3 ' } export -f $(compgen -A function | grep par_) diff --git a/testsuite/tests-to-run/parallel-local21.sh b/testsuite/tests-to-run/parallel-local21.sh index 5c102b36..114bb69c 100644 --- a/testsuite/tests-to-run/parallel-local21.sh +++ b/testsuite/tests-to-run/parallel-local21.sh @@ -290,4 +290,4 @@ export -f $(compgen -A function | grep par_) # Tested with -j1..8 # -j6 was fastest #compgen -A function | grep par_ | sort | parallel -j$P --tag -k '{} 2>&1' -compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1' +compgen -A function | grep par_ | LC_ALL=C sort | parallel -j6 --tag -k '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local22.sh b/testsuite/tests-to-run/parallel-local22.sh index a5c4a68b..7daa8e8b 100755 --- a/testsuite/tests-to-run/parallel-local22.sh +++ b/testsuite/tests-to-run/parallel-local22.sh @@ -28,7 +28,7 @@ echo '### This causes problems if we kill child processes'; echo '### This causes problems if we kill child processes (II)'; # 2>/dev/null to avoid parallel: Warning: Starting 45 processes took > 2 sec. - seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' 2>/dev/null | sort | md5sum + seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' 2>/dev/null | LC_ALL=C sort | md5sum echo '### Test -m'; (echo foo;echo bar) | parallel -j1 -m echo 1{}2{}3 A{}B{}C diff --git a/testsuite/tests-to-run/parallel-local7.sh b/testsuite/tests-to-run/parallel-local7.sh index 0b1fd480..f0791c41 100755 --- a/testsuite/tests-to-run/parallel-local7.sh +++ b/testsuite/tests-to-run/parallel-local7.sh @@ -1,5 +1,23 @@ #!/bin/bash +get_tmux() { + # To install tmux in different version run this + cd /tmp + doit() { + wget https://github.com/tmux/tmux/archive/$1.tar.gz + tar xvf $1.tar.gz + cd tmux-$1 + ./autogen.sh + ./configure --prefix /tmp/tmux/$1 + make + make install + sudo cp /tmp/tmux/$1/bin/tmux /usr/local/bin/tmux-$1 + } + + . `which env_parallel.bash` + seq 1.8 0.1 2.9 | env_parallel --tag --lb doit +} + par_tmux_filter() { # /tmp/parallel-local7/tmsOU2Ig perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;s/ p\d+/pID/;' diff --git a/testsuite/tests-to-run/parallel-polarhome.sh b/testsuite/tests-to-run/parallel-polarhome.sh index 96dde3de..bda16743 100644 --- a/testsuite/tests-to-run/parallel-polarhome.sh +++ b/testsuite/tests-to-run/parallel-polarhome.sh @@ -21,7 +21,7 @@ MASTER=$(parallel -j0 --delay 0.1 --halt now,success=1 $PARALLEL_SSH {} echo {} ::: {ubuntu,suse,debian}.polarhome.com) parallel -j0 --delay 0.1 --retries $RETRIES \ - rsync -a /usr/local/bin/{parallel,env_parallel,env_parallel.*[^~],parcat} \ + rsync -L /usr/local/bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \ ::: $MASTER:bin/ doit() { @@ -32,7 +32,8 @@ doit() { export RETRIES export MAXPROC export RET_TIME_K="-k --retries $RETRIES --timeout $MAXTIME" - + LC_ALL=C + echo MAXTIME=$MAXTIME RETRIES=$RETRIES MAXPROC=$MAXPROC MAXINNERPROC=$MAXINNERPROC echo '### Filter out working servers' @@ -42,7 +43,6 @@ doit() { POLAR="`bin/parallel -j0 -k --timeout 10 $PARALLEL_SSH {} echo {} ::: $P`" diff <(echo "$POLAR_ALL") <(echo "$POLAR") S_POLAR=`bin/parallel -j0 $RET_TIME_K echo -S 1/{} ::: $POLAR` - #" -S '1/sshminix minix'" sshwithpass() { # Minix requires sshpass. The other servers will use ssh-keys @@ -61,8 +61,13 @@ doit() { export -f copy par_nonall() { + sshwithpass() { + # Minix requires sshpass. The other servers will use ssh-keys + sshpass -f ~/.ssh/minix.password ssh -oLogLevel=quiet "$@" + } + export -f sshwithpass parallel -j$MAXPROC $RET_TIME_K --delay 0.1 --tag \ - --nonall $S_POLAR -S "1/sshminix minix" --argsep ,:- \ + --nonall $S_POLAR -S "1/sshwithpass minix" --argsep ,:- \ 'source setupenv >&/dev/null || . `pwd`/setupenv;' "$@" } export -f par_nonall diff --git a/testsuite/tests-to-run/parallel-tutorial.sh b/testsuite/tests-to-run/parallel-tutorial.sh index 7e53214f..baf454a6 100644 --- a/testsuite/tests-to-run/parallel-tutorial.sh +++ b/testsuite/tests-to-run/parallel-tutorial.sh @@ -80,6 +80,7 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/ s/cat: input_file: No such file or directory\n//; s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{}; s{rsync error: some files/attrs were not transferred .*\n}{}; + s{.* GtkDialog .*\n}{}; ' | uniq # 3+3 .par files (from --files), 1 .tms-file from tmux attach diff --git a/testsuite/tests-to-run/sem01.sh b/testsuite/tests-to-run/sem01.sh index a9ef466a..b6e04115 100755 --- a/testsuite/tests-to-run/sem01.sh +++ b/testsuite/tests-to-run/sem01.sh @@ -8,24 +8,6 @@ echo '### Test mutex. This should not mix output'; parallel --semaphore --id mutex --wait; echo done -echo '### Test semaphore 2 jobs running simultaneously' - parallel --semaphore --id 2jobs -u -j2 'echo job1a 1; sleep 1; echo job1b 3'; - sleep 0.2; - parallel --semaphore --id 2jobs -u -j2 'echo job2a 2; sleep 1; echo job2b 5'; - sleep 0.2; - parallel --semaphore --id 2jobs -u -j2 'echo job3a 4; sleep 1; echo job3b 6'; - parallel --semaphore --id 2jobs --wait; - echo done - -echo '### Test if parallel invoked as sem will run parallel --semaphore' - sem --id as_sem -u -j2 'echo job1a 1; sleep 1; echo job1b 3'; - sleep 0.2; - sem --id as_sem -u -j2 'echo job2a 2; sleep 1; echo job2b 5'; - sleep 0.2; - sem --id as_sem -u -j2 'echo job3a 4; sleep 1; echo job3b 6'; - sem --id as_sem --wait; - echo done - echo '### Test similar example as from man page - run 2 jobs simultaneously' echo 'Expect done: 1 2 5 3 4' for i in 5 1 2 3 4 ; do diff --git a/testsuite/tests-to-run/sql03.sh b/testsuite/tests-to-run/sql03.sh index 22681f37..0a299bbf 100644 --- a/testsuite/tests-to-run/sql03.sh +++ b/testsuite/tests-to-run/sql03.sh @@ -92,7 +92,7 @@ par_newline_on_commandline() { par_showtables() { echo "### Test --show-tables" - sql --show-tables :oraunittest | sort + sql --show-tables :oraunittest | LC_ALL=C sort } par_showdatabases() { diff --git a/testsuite/tests-to-run/test17.sh b/testsuite/tests-to-run/test17.sh index caa73340..5b0b6532 100755 --- a/testsuite/tests-to-run/test17.sh +++ b/testsuite/tests-to-run/test17.sh @@ -8,7 +8,7 @@ SSHLOGIN2=parallel@$SERVER2 export PARALLEL=-j0 #export PARALLEL="--sshdelay 0.3" # Make sure sort order is the same -export LANG=C +export LC_ALL=C echo '### Test --transfer --return --cleanup' diff --git a/testsuite/tests-to-run/test23.sh b/testsuite/tests-to-run/test23.sh index 89b075f5..5881308e 100644 --- a/testsuite/tests-to-run/test23.sh +++ b/testsuite/tests-to-run/test23.sh @@ -27,7 +27,7 @@ seq 1 13 | parallel echo {} '>' parallel_{}.test ls parallel_*.test | parallel -j+0 --trc {.}.out --bf my_script \ -S $SSHLOGIN1,$SSHLOGIN2,: "./my_script {} > {.}.out" -cat parallel_*.test parallel_*.out +ls parallel_*.test parallel_*.out | LC_ALL=C sort | xargs cat ## Broken since 2013-03-23 ## rm -rf tmp diff --git a/testsuite/tests-to-run/test35.sh b/testsuite/tests-to-run/test35.sh index dc3cec60..b3c34ebb 100755 --- a/testsuite/tests-to-run/test35.sh +++ b/testsuite/tests-to-run/test35.sh @@ -10,34 +10,34 @@ echo $SERVER2 >~/.parallel/sshloginfile echo '### Test --wd newtempdir/newdir/tmp/ with space dirs'; ssh $SERVER2 rm -rf newtempdir; stdout parallel -j9 -k --wd newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.6 -S .. -v echo ">"{}.6 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg'; - find . -name '*.6' | sort + find . -name '*.6' | LC_ALL=C sort echo '### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs'; ssh $SERVER2 rm -rf /tmp/newtempdir; stdout parallel -j9 -k --wd /tmp/newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.7 -S .. -v echo ">"{}.7 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg'; - find . -name '*.7' | sort + find . -name '*.7' | LC_ALL=C sort echo '### Test --workdir ...' parallel -j9 -k --workdir ... --trc {}.1 -S .. echo ">"{}.1 ::: 2-col.txt -find . -name '*.1' | sort +find . -name '*.1' | LC_ALL=C sort echo '### Test --wd ...' parallel -k --wd ... --trc {}.2 -S .. -v echo ">"{}.2 ::: 2-col.txt -find . -name '*.2' | sort +find . -name '*.2' | LC_ALL=C sort echo '### Test --wd ... with space dirs' stdout parallel -j9 -k --wd ... --trc {}.3 -S .. -v echo ">"{}.3 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg' # A few rmdir errors are OK as we have multiple files in the same dirs -find . -name '*.3' | sort +find . -name '*.3' | LC_ALL=C sort echo '### Test --wd tmpdir' parallel -j9 -k --wd tmpdir --basefile 1-col.txt --trc {}.4 -S .. -v echo ">"{}.4 ::: 2-col.txt -find . -name '*.4' | sort +find . -name '*.4' | LC_ALL=C sort echo '### Test --wd /tmp/ with space dirs' stdout parallel -k -j9 --wd /tmp/ --basefile 1-col.txt --trc {}.5 -S .. -v echo ">"{}.5 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg' # A few rmdir errors are OK as we have multiple files in the same dirs -find . -name '*.5' | sort +find . -name '*.5' | LC_ALL=C sort cd .. rm -rf tmp diff --git a/testsuite/wanted-results/parallel-local-0.3s b/testsuite/wanted-results/parallel-local-0.3s index b74ab173..ce5b268d 100644 --- a/testsuite/wanted-results/parallel-local-0.3s +++ b/testsuite/wanted-results/parallel-local-0.3s @@ -1317,6 +1317,8 @@ par_empty_command bug #54647: parset ignores empty lines par_empty_command par_empty_command Empty: par_empty_command B: B +par_empty_input_on_stdin https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=910470 +par_empty_input_on_stdin This should give no output par_empty_line ### Test bug: empty line for | sh with -k par_empty_line a par_empty_line b diff --git a/testsuite/wanted-results/parallel-local-100s b/testsuite/wanted-results/parallel-local-100s index 369b24b8..88c264f7 100644 --- a/testsuite/wanted-results/parallel-local-100s +++ b/testsuite/wanted-results/parallel-local-100s @@ -6,182 +6,182 @@ par_exit_code # but fish 2.4.0 returns 1 while X.X.X returns 0 par_exit_code ash /tmp/mysleep 100 137 par_exit_code ash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code ash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code ash parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code ash parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code ash parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code ash true;/tmp/mysleep 100 137 par_exit_code ash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code ash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code ash parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code ash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code ash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code bash /tmp/mysleep 100 0 par_exit_code bash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code bash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code bash parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code bash parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code bash parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code bash true;/tmp/mysleep 100 137 par_exit_code bash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code bash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code bash parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code bash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code bash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code csh /tmp/mysleep 100 137 par_exit_code csh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code csh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code csh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code csh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code csh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code csh true;/tmp/mysleep 100 137 par_exit_code csh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code csh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code csh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code csh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code csh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code dash /tmp/mysleep 100 137 par_exit_code dash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code dash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code dash parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code dash parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code dash parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code dash true;/tmp/mysleep 100 137 par_exit_code dash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code dash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code dash parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code dash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code dash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code fish /tmp/mysleep 100 137 par_exit_code fish parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code fish parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code fish parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code fish parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code fish parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code fish true;/tmp/mysleep 100 137 par_exit_code fish parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code fish parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code fish parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code fish parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code fish parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code mksh /tmp/mysleep 100 0 par_exit_code mksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code mksh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code mksh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code mksh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code mksh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code mksh true;/tmp/mysleep 100 137 par_exit_code mksh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code mksh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code mksh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code mksh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code mksh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code posh /tmp/mysleep 100 137 par_exit_code posh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code posh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code posh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code posh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code posh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code posh true;/tmp/mysleep 100 137 par_exit_code posh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code posh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code posh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code posh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code posh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code rc /tmp/mysleep 100 1 par_exit_code rc parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 1 par_exit_code rc parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 1 -par_exit_code rc parallel --halt-on-error now,done=1 true ::: 100 1 +par_exit_code rc parallel --halt-on-error now,done=1 /bin/true ::: 100 1 par_exit_code rc parallel --halt-on-error now,done=1 exit ::: 100 1 par_exit_code rc true;/tmp/mysleep 100 1 par_exit_code rc parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 1 par_exit_code rc parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 1 -par_exit_code rc parallel --halt-on-error now,done=1 "true;true" ::: 100 1 +par_exit_code rc parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 1 par_exit_code rc parallel --halt-on-error now,done=1 "true;exit" ::: 100 1 par_exit_code sash /tmp/mysleep 100 255 par_exit_code sash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 255 par_exit_code sash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 255 -par_exit_code sash parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code sash parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code sash parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code sash true;/tmp/mysleep 100 0 par_exit_code sash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 0 par_exit_code sash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 0 -par_exit_code sash parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code sash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code sash parallel --halt-on-error now,done=1 "true;exit" ::: 100 0 par_exit_code sh /tmp/mysleep 100 137 par_exit_code sh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code sh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code sh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code sh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code sh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code sh true;/tmp/mysleep 100 137 par_exit_code sh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code sh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code sh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code sh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code sh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code static-sh /tmp/mysleep 100 137 par_exit_code static-sh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code static-sh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code static-sh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code static-sh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code static-sh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code static-sh true;/tmp/mysleep 100 137 par_exit_code static-sh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code static-sh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code static-sh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code static-sh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code static-sh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code tcsh /tmp/mysleep 100 137 par_exit_code tcsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code tcsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code tcsh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code tcsh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code tcsh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code tcsh true;/tmp/mysleep 100 137 par_exit_code tcsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code tcsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code tcsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code tcsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code tcsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code fdsh /tmp/mysleep 100 137 par_exit_code fdsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 2 par_exit_code fdsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 2 -par_exit_code fdsh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code fdsh parallel --halt-on-error now,done=1 /bin/true ::: 100 2 par_exit_code fdsh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code fdsh true;/tmp/mysleep 100 137 par_exit_code fdsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 2 par_exit_code fdsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 2 -par_exit_code fdsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code fdsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 2 par_exit_code fdsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code fizsh /tmp/mysleep 100 137 par_exit_code fizsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code fizsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code fizsh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code fizsh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code fizsh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code fizsh true;/tmp/mysleep 100 137 par_exit_code fizsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code fizsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code fizsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code fizsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code fizsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code ksh /tmp/mysleep 100 0 par_exit_code ksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code ksh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code ksh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code ksh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code ksh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code ksh true;/tmp/mysleep 100 0 par_exit_code ksh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code ksh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code ksh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code ksh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code ksh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code ksh93 /tmp/mysleep 100 0 par_exit_code ksh93 parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code ksh93 parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code ksh93 parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code ksh93 parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code ksh93 parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code ksh93 true;/tmp/mysleep 100 0 par_exit_code ksh93 parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code yash /tmp/mysleep 100 0 par_exit_code yash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code yash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code yash parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code yash parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code yash parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code yash true;/tmp/mysleep 100 0 par_exit_code yash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code yash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code yash parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code yash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code yash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code zsh /tmp/mysleep 100 0 par_exit_code zsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137 par_exit_code zsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 -par_exit_code zsh parallel --halt-on-error now,done=1 true ::: 100 0 +par_exit_code zsh parallel --halt-on-error now,done=1 /bin/true ::: 100 0 par_exit_code zsh parallel --halt-on-error now,done=1 exit ::: 100 100 par_exit_code zsh true;/tmp/mysleep 100 0 par_exit_code zsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137 par_exit_code zsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137 -par_exit_code zsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0 +par_exit_code zsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0 par_exit_code zsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100 par_exit_code parallel: This job finished: par_exit_code runit diff --git a/testsuite/wanted-results/parallel-local-10s b/testsuite/wanted-results/parallel-local-10s index 64481b79..7eefb323 100644 --- a/testsuite/wanted-results/parallel-local-10s +++ b/testsuite/wanted-results/parallel-local-10s @@ -243,19 +243,6 @@ par_kill_children_timeout 0 0 0 par_line_buffer ### --line-buffer par_line_buffer 55 55 120 par_line_buffer These must diff: 1 -par_linebuffer_tag_slow_output Test output tag with mixing halflines -par_linebuffer_tag_slow_output a aH -par_linebuffer_tag_slow_output b bH -par_linebuffer_tag_slow_output a aa -par_linebuffer_tag_slow_output b ba -par_linebuffer_tag_slow_output a al -par_linebuffer_tag_slow_output b bl -par_linebuffer_tag_slow_output a af -par_linebuffer_tag_slow_output b bf -par_linebuffer_tag_slow_output a a -par_linebuffer_tag_slow_output a -par_linebuffer_tag_slow_output b b -par_linebuffer_tag_slow_output b par_long_line_remote ### Deal with long command lines on remote servers par_long_line_remote 2 6 30006 par_long_line_remote 3 50 250050 @@ -520,6 +507,22 @@ 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 +par_sem_2jobs job1b 3 +par_sem_2jobs job3a 4 +par_sem_2jobs job2b 5 +par_sem_2jobs job3b 6 +par_sem_2jobs done +par_semaphore ### Test if parallel invoked as sem will run parallel --semaphore +par_semaphore job1a 1 +par_semaphore job2a 2 +par_semaphore job1b 3 +par_semaphore job3a 4 +par_semaphore job2b 5 +par_semaphore job3b 6 +par_semaphore done par_slow_total_jobs bug #51006: Slow total_jobs() eats job par_slow_total_jobs a par_slow_total_jobs b diff --git a/testsuite/wanted-results/parallel-local-1s b/testsuite/wanted-results/parallel-local-1s index f6073dca..19b565ba 100644 --- a/testsuite/wanted-results/parallel-local-1s +++ b/testsuite/wanted-results/parallel-local-1s @@ -619,3 +619,6 @@ par_test_XI_mI a7 b1 2 3 4 5 6 7 par_test_XI_mI a8 b1 2 3 4 5 6 7 8 par_test_XI_mI a9 b1 2 3 4 5 6 7 8 9 par_test_XI_mI a10 b1 2 3 4 5 6 7 8 9 10 +par_too_long_line_X bug #54869: Long lines break +par_too_long_line_X 1 29302 131012 +par_too_long_line_X 1 12698 63490 diff --git a/testsuite/wanted-results/parallel-local-30s b/testsuite/wanted-results/parallel-local-30s index d7d7841b..ed3cb136 100644 --- a/testsuite/wanted-results/parallel-local-30s +++ b/testsuite/wanted-results/parallel-local-30s @@ -251,7 +251,7 @@ par_test_detected_shell test_known_shell_c fizsh Global::shell /usr/bin/zsh par_test_detected_shell test_known_shell_c ksh Global::shell /usr/bin/ksh par_test_detected_shell test_known_shell_c ksh93 Global::shell /bin/ksh93 par_test_detected_shell test_known_shell_c mksh Global::shell /bin/mksh -par_test_detected_shell test_known_shell_c posh Global::shell /bin/posh +par_test_detected_shell test_known_shell_c posh Global::shell /usr/bin/posh par_test_detected_shell test_known_shell_c rbash Global::shell /bin/rbash par_test_detected_shell test_known_shell_c rush Local configuration error occurred. par_test_detected_shell test_known_shell_c rush Contact the systems administrator for further assistance. @@ -267,11 +267,11 @@ par_test_detected_shell test_known_shell_pipe bash Global::shell /bin/bash par_test_detected_shell test_known_shell_pipe csh Global::shell /bin/csh par_test_detected_shell test_known_shell_pipe dash Global::shell /bin/dash par_test_detected_shell test_known_shell_pipe fish Global::shell /usr/bin/fish -par_test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/zsh +par_test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/fizsh par_test_detected_shell test_known_shell_pipe ksh Global::shell /usr/bin/ksh par_test_detected_shell test_known_shell_pipe ksh93 Global::shell /bin/ksh93 par_test_detected_shell test_known_shell_pipe mksh Global::shell /bin/mksh -par_test_detected_shell test_known_shell_pipe posh Global::shell /bin/posh +par_test_detected_shell test_known_shell_pipe posh Global::shell /usr/bin/posh par_test_detected_shell test_known_shell_pipe rbash Global::shell /bin/rbash par_test_detected_shell test_known_shell_pipe rush Local configuration error occurred. par_test_detected_shell test_known_shell_pipe rush Contact the systems administrator for further assistance. diff --git a/testsuite/wanted-results/parallel-local-3s b/testsuite/wanted-results/parallel-local-3s index 90cdd640..bfda3815 100644 --- a/testsuite/wanted-results/parallel-local-3s +++ b/testsuite/wanted-results/parallel-local-3s @@ -81,11 +81,6 @@ par_nice parallel: SIGTERM received. No new jobs will be started. par_nice parallel: Waiting for these 2 jobs to finish. Send SIGTERM again to stop now. par_nice parallel: bzip2 < /dev/zero par_nice parallel: bzip2 < /dev/zero -par_parcat_mixing parcat output should mix: a b a b -par_parcat_mixing astart -par_parcat_mixing bstart -par_parcat_mixing aend -par_parcat_mixing bend par_pipe_unneeded_procs ### Test bug #34241: --pipe should not spawn unneeded processes par_pipe_unneeded_procs 1 par_pipe_unneeded_procs 2 diff --git a/testsuite/wanted-results/parallel-local-race02 b/testsuite/wanted-results/parallel-local-race02 index 0bf4ddcd..6e7e945a 100644 --- a/testsuite/wanted-results/parallel-local-race02 +++ b/testsuite/wanted-results/parallel-local-race02 @@ -80,6 +80,24 @@ par_hostgroup tange par_hostgroup tange par_hostgroup tcsh par_hostgroup tcsh +par_linebuffer_tag_slow_output Test output tag with mixing halflines +par_linebuffer_tag_slow_output a aH +par_linebuffer_tag_slow_output b bH +par_linebuffer_tag_slow_output a aa +par_linebuffer_tag_slow_output b ba +par_linebuffer_tag_slow_output a al +par_linebuffer_tag_slow_output b bl +par_linebuffer_tag_slow_output a af +par_linebuffer_tag_slow_output b bf +par_linebuffer_tag_slow_output a a +par_linebuffer_tag_slow_output a +par_linebuffer_tag_slow_output b b +par_linebuffer_tag_slow_output b +par_parcat_mixing parcat output should mix: a b a b +par_parcat_mixing astart +par_parcat_mixing bstart +par_parcat_mixing aend +par_parcat_mixing bend par_testhalt now fail 0 true ### testhalt --halt now,fail=0 par_testhalt now fail 0 true job 1 par_testhalt now fail 0 true parallel: This job failed: diff --git a/testsuite/wanted-results/parallel-local-ssh1 b/testsuite/wanted-results/parallel-local-ssh1 index 2de05f3c..58ac2fb2 100644 --- a/testsuite/wanted-results/parallel-local-ssh1 +++ b/testsuite/wanted-results/parallel-local-ssh1 @@ -147,7 +147,7 @@ ls: No match. ls: cannot access './--?.a': No such file or directory echo '### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"' ### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B" - mkdir -p '/tmp/./--- ' '/tmp/ ---'; touch -- '/tmp/./--- /A' '/tmp/ ---/B'; rm -f ./---?/A.a ./?---/B.a; parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B'; ls ./---?/A.a ./?---/B.a; parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK'; echo '### bug #46519: --onall ignores --transfer' + mkdir -p '/tmp/./--- ' '/tmp/ ---'; touch -- '/tmp/./--- /A' '/tmp/ ---/B'; rm -f ./---?/A.a ./?---/B.a; parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B'; ls ./---?/A.a ./?---/B.a | LC_ALL=C sort; parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK' | LC_ALL=C sort; echo '### bug #46519: --onall ignores --transfer' ./ ---/B.a ./--- /A.a OK diff --git a/testsuite/wanted-results/parallel-local-ssh4 b/testsuite/wanted-results/parallel-local-ssh4 index 1979959b..7d8c23f1 100644 --- a/testsuite/wanted-results/parallel-local-ssh4 +++ b/testsuite/wanted-results/parallel-local-ssh4 @@ -81,15 +81,7 @@ echo '### Test tmux works on different shells' 0 4 # command is currently too long for csh. Maybe it can be fixed? -Word too long. -Word too long. -Word too long. -Word too long. -4 -Word too long. -Word too long. -Word too long. -Word too long. +0 4 echo '### works' ### works diff --git a/testsuite/wanted-results/parallel-local-ssh5 b/testsuite/wanted-results/parallel-local-ssh5 index 01d55d60..2765c023 100644 --- a/testsuite/wanted-results/parallel-local-ssh5 +++ b/testsuite/wanted-results/parallel-local-ssh5 @@ -57,7 +57,7 @@ par_autossh AUTOSSH_DEBUG - turn logging to maximum verbosity and log par_autossh stderr par_autossh par_autossh rsync: connection unexpectedly closed (0 bytes received so far) [sender] -par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1] +par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.2] par_autossh /usr/lib/autossh/autossh: invalid option -- '-' par_autossh usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS] par_autossh @@ -89,4 +89,4 @@ par_autossh AUTOSSH_DEBUG - turn logging to maximum verbosity and log par_autossh stderr par_autossh par_autossh rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] -par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1] +par_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.2] diff --git a/testsuite/wanted-results/parallel-local-ssh7 b/testsuite/wanted-results/parallel-local-ssh7 index 0011b9f1..e35c3bb2 100644 --- a/testsuite/wanted-results/parallel-local-ssh7 +++ b/testsuite/wanted-results/parallel-local-ssh7 @@ -129,18 +129,16 @@ par_zsh_man exit value 2 should be 2 par_zsh_man Unknown option: no-such-option par_zsh_man exit value 255 should be 255 par_zsh_funky -par_zsh_funky  -par_zsh_funky  -par_zsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky -par_zsh_funky  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky +par_zsh_funky C-] !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~M-M-]-funky +par_zsh_funky C-] !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~M-M-]-funky par_zsh_funky space 6 par_zsh_funky space 6 par_zsh_funky ' ' -par_zsh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' +par_zsh_funky '  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' par_zsh_funky 3 arg alias_works par_zsh_funky 3 arg alias_works_over_ssh -par_zsh_funky Funky- -par_zsh_funky Funky- +par_zsh_funky Funky- +par_zsh_funky Funky- par_zsh_funky assoc_val_a par_zsh_funky assoc_val_a par_zsh_funky function_works @@ -587,7 +585,7 @@ par_mksh_parset foo bar baz par_mksh_parset ### env_parset par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz -par_mksh_parset +par_mksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_mksh_parset newline1 par_mksh_parset newline2 par_mksh_parset 1 @@ -798,7 +796,7 @@ par_ksh_parset foo bar baz par_ksh_parset ### env_parset par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz -par_ksh_parset +par_ksh_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_ksh_parset newline1 par_ksh_parset newline2 par_ksh_parset 1 @@ -1342,8 +1340,8 @@ par_csh_man arrays par_csh_man arrays par_csh_man cat ... | parallel --pipe [options] [command [arguments]] par_csh_man env_parallel -par_csh_man exit value -1 should be 255 par_csh_man exit value 2 should be 2 +par_csh_man exit value 255 should be 255 par_csh_man level par_csh_man multi par_csh_man parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))... @@ -1368,15 +1366,18 @@ par_csh_man work, par_csh_man {3} {3.} {3/} {3/.} {=3 perl code =} Positional replacement strings par_csh_man {} {.} {/} {/.} {#} {%} {= perl code =} Replacement strings par_csh_funky 3 arg alias_works +par_csh_funky par_csh_funky myvar works par_csh_funky space special chars problem par_csh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky alias_var_works par_csh_funky func_echo: Command not found. par_csh_funky 3 arg alias_works_over_ssh +par_csh_funky par_csh_funky myvar works par_csh_funky space special chars problem par_csh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky alias_var_works_over_ssh par_csh_funky func_echo: Command not found. +par_csh_funky par_csh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ par_csh_environment_too_big Not implemented par_csh_env_parallel_session Not implemented @@ -1429,7 +1430,7 @@ par_bash_parset foo bar baz par_bash_parset ### env_parset par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz -par_bash_parset +par_bash_parset myecho myvar myarr 1 myfun foo myecho myvar myarr 1 myfun bar myecho myvar myarr 1 myfun baz par_bash_parset newline1 par_bash_parset newline2 par_bash_parset 1 @@ -1523,12 +1524,10 @@ par_bash_man exit value 2 should be 2 par_bash_man Unknown option: no-such-option par_bash_man exit value 255 should be 255 par_bash_funky -par_bash_funky -par_bash_funky par_bash_funky  par_bash_funky  -par_bash_funky -par_bash_funky +par_bash_funky -funkymultiline +par_bash_funky -funkymultiline par_bash_funky space 6 par_bash_funky space 6 par_bash_funky ' ' @@ -1546,8 +1545,6 @@ par_bash_funky function_works par_bash_funky function_works_over_ssh par_bash_funky myvar works par_bash_funky myvar works -par_bash_funky -funkymultiline -par_bash_funky -funkymultiline par_bash_environment_too_big bug #50815: env_parallel should warn if the environment is too big par_bash_environment_too_big OK_bigvar par_bash_environment_too_big OK_bigvar_remote diff --git a/testsuite/wanted-results/parallel-local-ssh8 b/testsuite/wanted-results/parallel-local-ssh8 index 7ada847d..2abe1215 100644 --- a/testsuite/wanted-results/parallel-local-ssh8 +++ b/testsuite/wanted-results/parallel-local-ssh8 @@ -15,14 +15,14 @@ par_keeporder job2 par_load_csh ### Gave Word too long. par_load_csh a par_path_remote_bash bug #47695: How to set $PATH on remote? Bash +par_path_remote_bash logged in par_path_remote_bash BASH Path before: /bin:/usr/bin with no parallel -par_path_remote_bash -bash: line 2: parallel: command not found +par_path_remote_bash -bash: line 3: parallel: command not found par_path_remote_bash ^^^^^^^^ Not found is OK par_path_remote_bash /bin:/usr/bin:/tmp OK par_path_remote_bash par_path_remote_csh bug #47695: How to set $PATH on remote? csh -par_path_remote_csh Warning: no access to tty (Bad file descriptor). -par_path_remote_csh Thus no job control in this shell. +par_path_remote_csh logged in par_path_remote_csh CSH Path before: /bin:/usr/bin with no parallel par_path_remote_csh parallel: Command not found. par_path_remote_csh ^^^^^^^^ Not found is OK diff --git a/testsuite/wanted-results/parallel-local12 b/testsuite/wanted-results/parallel-local12 index 3b1874c9..2c15ca0e 100644 --- a/testsuite/wanted-results/parallel-local12 +++ b/testsuite/wanted-results/parallel-local12 @@ -39,7 +39,7 @@ https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice To silence this citation notice: run 'parallel --citation' once. 10 files to edit -[?1049h[?1h=[?12;25h[?12l[?25h[?25l"file1" [New File]~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [?12l[?25h[?25lE173: 9 more files to edit[?12l[?25h[?1l>[?1049lAcademic tradition requires you to cite works you base your article on. +[?2004h[?1049h[?1h=[?2004h[?12h[?12l[?25l"file1" [New File]▽ [>c]10;?]11;?~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 0,0-1All[?25h[?25lE173: 9 more files to edit[?2004h0,0-1All[?25h[?2004l[?2004l[?1l>[?1049lAcademic tradition requires you to cite works you base your article on. If you use programs that use GNU Parallel to process data for an article in a scientific publication, please cite: diff --git a/testsuite/wanted-results/parallel-local15 b/testsuite/wanted-results/parallel-local15 index 9e1612b4..423f19a8 100644 --- a/testsuite/wanted-results/parallel-local15 +++ b/testsuite/wanted-results/parallel-local15 @@ -62,7 +62,7 @@ touch more_than_5000-9997 touch more_than_5000-9998 touch more_than_5000-9999 ### rm -ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort +ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | LC_ALL=C sort 1 1-col.txt 1 1-col.txt.diff 1 2-col.txt @@ -171,7 +171,7 @@ ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_= 4 ab 4 b 6 a -ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort +ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | LC_ALL=C sort 1 1-col.txt 1 1-col.txt.diff 1 2-col.txt @@ -280,7 +280,7 @@ ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\ 4 ab 4 b 6 a -find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort +find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | LC_ALL=C sort ./ ab /c' d/ ef"g.diff ./ ab /c' d/ ef"g.diff ./ ab/c"d/ef g.diff @@ -299,7 +299,7 @@ find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV, ./a/bar.diff ./b/bar.diff ./b/bar.diff -find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort +find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | LC_ALL=C sort ./ ab /c' d/ ef"g.diff ./ ab /c' d/ ef"g.diff ./ ab/c"d/ef g.diff @@ -439,7 +439,7 @@ perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9996 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9997 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9998 perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ./more_than_5000-9999 -find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort +find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | LC_ALL=C sort ./ ab /c' d/ ef"g.diff ./ ab /c' d/ ef"g.diff ./ ab/c"d/ef g.diff @@ -458,7 +458,7 @@ find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\ ./a/bar.diff ./b/bar.diff ./b/bar.diff -find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort +find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | LC_ALL=C sort ./ ab /c' d/ ef"g.diff ./ ab /c' d/ ef"g.diff ./ ab/c"d/ef g.diff diff --git a/testsuite/wanted-results/parallel-local164 b/testsuite/wanted-results/parallel-local164 index 5ff4c371..31970125 100644 --- a/testsuite/wanted-results/parallel-local164 +++ b/testsuite/wanted-results/parallel-local164 @@ -81,7 +81,7 @@ bug #37956: --colsep does not default to '\t' as specified in the man page. one 1 echo '### Test --tollef' ### Test --tollef - stdout parallel -k --tollef echo -- 1 2 3 ::: a b c | sort + stdout parallel -k --tollef echo -- 1 2 3 ::: a b c | LC_ALL=C sort parallel: Error: --tollef has been retired. parallel: Error: Remove --tollef or use --gnu to override --tollef. echo '### Test --tollef --gnu' diff --git a/testsuite/wanted-results/parallel-local18 b/testsuite/wanted-results/parallel-local18 index e868fc6f..0b59c140 100644 --- a/testsuite/wanted-results/parallel-local18 +++ b/testsuite/wanted-results/parallel-local18 @@ -15,7 +15,7 @@ par_env_newline_backslash_onall_bash 8 10 par_env_newline_backslash_onall_bash 8 10V2= par_env_newline_backslash_onall_bash 8 2\\ \92V2=\\ \92 par_env_newline_backslash_onall_csh ### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good but csh fails -par_env_newline_backslash_onall_csh 8 Unmatched ". +par_env_newline_backslash_onall_csh 8 Unmatched '"'. par_space ### Test --env - https://savannah.gnu.org/bugs/?37351 par_space a 2 spaces b 1 par_space a 2 spaces b 1 diff --git a/testsuite/wanted-results/parallel-local22 b/testsuite/wanted-results/parallel-local22 index 23299239..35e337a3 100644 --- a/testsuite/wanted-results/parallel-local22 +++ b/testsuite/wanted-results/parallel-local22 @@ -17,7 +17,7 @@ echo '### This causes problems if we kill child processes'; # 2>/dev/null to avo 437c0d47a99b9a7c5bcb1d132f94c2e6 - echo '### This causes problems if we kill child processes (II)'; # 2>/dev/null to avoid parallel: Warning: Starting 45 processes took > 2 sec. ### This causes problems if we kill child processes (II) - seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' 2>/dev/null | sort | md5sum + seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' 2>/dev/null | LC_ALL=C sort | md5sum d7fb96d6a56d4347bc24930a395c431a - echo '### Test -m'; (echo foo;echo bar) | parallel -j1 -m echo 1{}2{}3 A{}B{}C ### Test -m diff --git a/testsuite/wanted-results/parallel-local23 b/testsuite/wanted-results/parallel-local23 index ebf388d5..19c513d3 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 20180916 +GNU parallel 20180923 Copyright (C) 2007-2018 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 ce8fb5e5..6c32a5cb 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -6,19 +6,15 @@ MAXTIME=50 RETRIES=2 MAXPROC=11 MAXINNERPROC=3 < alpha 7d4 < syllable -10d6 -< openindiana -13d8 +13d9 < debian-ppc -17d11 -< ubuntu 28,32d21 < dragonfly < vax < ultrix < minix < irix -34,35d22 +34,35d23 < beaglebone < cubieboard2 ### Copy commands to servers @@ -28,11 +24,13 @@ bin/parallel tru64 copy tru64 bin/parallel parallel bin/parallel hpux-ia64 copy hpux-ia64 bin/parallel parallel bin/parallel raspbian copy raspbian bin/parallel parallel bin/parallel solaris copy solaris bin/parallel parallel +bin/parallel openindiana copy openindiana bin/parallel parallel bin/parallel aix copy aix bin/parallel parallel bin/parallel hpux copy hpux bin/parallel parallel bin/parallel suse copy suse bin/parallel parallel bin/parallel solaris-x86 copy solaris-x86 bin/parallel parallel bin/parallel mandriva copy mandriva bin/parallel parallel +bin/parallel ubuntu copy ubuntu bin/parallel parallel bin/parallel scosysv copy scosysv bin/parallel parallel bin/parallel unixware copy unixware bin/parallel parallel bin/parallel centos copy centos bin/parallel parallel @@ -52,11 +50,13 @@ bin/env_parallel tru64 copy tru64 bin/env_parallel env_parallel bin/env_parallel hpux-ia64 copy hpux-ia64 bin/env_parallel env_parallel bin/env_parallel raspbian copy raspbian bin/env_parallel env_parallel bin/env_parallel solaris copy solaris bin/env_parallel env_parallel +bin/env_parallel openindiana copy openindiana bin/env_parallel env_parallel bin/env_parallel aix copy aix bin/env_parallel env_parallel bin/env_parallel hpux copy hpux bin/env_parallel env_parallel bin/env_parallel suse copy suse bin/env_parallel env_parallel bin/env_parallel solaris-x86 copy solaris-x86 bin/env_parallel env_parallel bin/env_parallel mandriva copy mandriva bin/env_parallel env_parallel +bin/env_parallel ubuntu copy ubuntu bin/env_parallel env_parallel bin/env_parallel scosysv copy scosysv bin/env_parallel env_parallel bin/env_parallel unixware copy unixware bin/env_parallel env_parallel bin/env_parallel centos copy centos bin/env_parallel env_parallel @@ -76,11 +76,13 @@ bin/env_parallel.ash tru64 copy tru64 bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash hpux-ia64 copy hpux-ia64 bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash raspbian copy raspbian bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash solaris copy solaris bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash openindiana copy openindiana bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash aix copy aix bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash hpux copy hpux bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash suse copy suse bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash solaris-x86 copy solaris-x86 bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash mandriva copy mandriva bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash ubuntu copy ubuntu bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash scosysv copy scosysv bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash unixware copy unixware bin/env_parallel.ash env_parallel.ash bin/env_parallel.ash centos copy centos bin/env_parallel.ash env_parallel.ash @@ -100,11 +102,13 @@ bin/env_parallel.bash tru64 copy tru64 bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash hpux-ia64 copy hpux-ia64 bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash raspbian copy raspbian bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash solaris copy solaris bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash openindiana copy openindiana bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash aix copy aix bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash hpux copy hpux bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash suse copy suse bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash solaris-x86 copy solaris-x86 bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash mandriva copy mandriva bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash ubuntu copy ubuntu bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash scosysv copy scosysv bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash unixware copy unixware bin/env_parallel.bash env_parallel.bash bin/env_parallel.bash centos copy centos bin/env_parallel.bash env_parallel.bash @@ -124,11 +128,13 @@ bin/env_parallel.csh tru64 copy tru64 bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh hpux-ia64 copy hpux-ia64 bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh raspbian copy raspbian bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh solaris copy solaris bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh openindiana copy openindiana bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh aix copy aix bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh hpux copy hpux bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh suse copy suse bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh solaris-x86 copy solaris-x86 bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh mandriva copy mandriva bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh ubuntu copy ubuntu bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh scosysv copy scosysv bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh unixware copy unixware bin/env_parallel.csh env_parallel.csh bin/env_parallel.csh centos copy centos bin/env_parallel.csh env_parallel.csh @@ -148,11 +154,13 @@ bin/env_parallel.dash tru64 copy tru64 bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash hpux-ia64 copy hpux-ia64 bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash raspbian copy raspbian bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash solaris copy solaris bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash openindiana copy openindiana bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash aix copy aix bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash hpux copy hpux bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash suse copy suse bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash solaris-x86 copy solaris-x86 bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash mandriva copy mandriva bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash ubuntu copy ubuntu bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash scosysv copy scosysv bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash unixware copy unixware bin/env_parallel.dash env_parallel.dash bin/env_parallel.dash centos copy centos bin/env_parallel.dash env_parallel.dash @@ -172,11 +180,13 @@ bin/env_parallel.fish tru64 copy tru64 bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish hpux-ia64 copy hpux-ia64 bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish raspbian copy raspbian bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish solaris copy solaris bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish openindiana copy openindiana bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish aix copy aix bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish hpux copy hpux bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish suse copy suse bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish solaris-x86 copy solaris-x86 bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish mandriva copy mandriva bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish ubuntu copy ubuntu bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish scosysv copy scosysv bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish unixware copy unixware bin/env_parallel.fish env_parallel.fish bin/env_parallel.fish centos copy centos bin/env_parallel.fish env_parallel.fish @@ -196,11 +206,13 @@ bin/env_parallel.ksh tru64 copy tru64 bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh hpux-ia64 copy hpux-ia64 bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh raspbian copy raspbian bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh solaris copy solaris bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh openindiana copy openindiana bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh aix copy aix bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh hpux copy hpux bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh suse copy suse bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh solaris-x86 copy solaris-x86 bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh mandriva copy mandriva bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh ubuntu copy ubuntu bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh scosysv copy scosysv bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh unixware copy unixware bin/env_parallel.ksh env_parallel.ksh bin/env_parallel.ksh centos copy centos bin/env_parallel.ksh env_parallel.ksh @@ -220,11 +232,13 @@ bin/env_parallel.mksh tru64 copy tru64 bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh hpux-ia64 copy hpux-ia64 bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh raspbian copy raspbian bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh solaris copy solaris bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh openindiana copy openindiana bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh aix copy aix bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh hpux copy hpux bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh suse copy suse bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh solaris-x86 copy solaris-x86 bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh mandriva copy mandriva bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh ubuntu copy ubuntu bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh scosysv copy scosysv bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh unixware copy unixware bin/env_parallel.mksh env_parallel.mksh bin/env_parallel.mksh centos copy centos bin/env_parallel.mksh env_parallel.mksh @@ -244,11 +258,13 @@ bin/env_parallel.pdksh tru64 copy tru64 bin/env_parallel.pdksh env_parallel.pdks bin/env_parallel.pdksh hpux-ia64 copy hpux-ia64 bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh raspbian copy raspbian bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh solaris copy solaris bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh openindiana copy openindiana bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh aix copy aix bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh hpux copy hpux bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh suse copy suse bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh solaris-x86 copy solaris-x86 bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh mandriva copy mandriva bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh ubuntu copy ubuntu bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh scosysv copy scosysv bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh unixware copy unixware bin/env_parallel.pdksh env_parallel.pdksh bin/env_parallel.pdksh centos copy centos bin/env_parallel.pdksh env_parallel.pdksh @@ -268,11 +284,13 @@ bin/env_parallel.sh tru64 copy tru64 bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh hpux-ia64 copy hpux-ia64 bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh raspbian copy raspbian bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh solaris copy solaris bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh openindiana copy openindiana bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh aix copy aix bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh hpux copy hpux bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh suse copy suse bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh solaris-x86 copy solaris-x86 bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh mandriva copy mandriva bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh ubuntu copy ubuntu bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh scosysv copy scosysv bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh unixware copy unixware bin/env_parallel.sh env_parallel.sh bin/env_parallel.sh centos copy centos bin/env_parallel.sh env_parallel.sh @@ -292,11 +310,13 @@ bin/env_parallel.tcsh tru64 copy tru64 bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh hpux-ia64 copy hpux-ia64 bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh raspbian copy raspbian bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh solaris copy solaris bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh openindiana copy openindiana bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh aix copy aix bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh hpux copy hpux bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh suse copy suse bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh solaris-x86 copy solaris-x86 bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh mandriva copy mandriva bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh ubuntu copy ubuntu bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh scosysv copy scosysv bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh unixware copy unixware bin/env_parallel.tcsh env_parallel.tcsh bin/env_parallel.tcsh centos copy centos bin/env_parallel.tcsh env_parallel.tcsh @@ -316,11 +336,13 @@ bin/env_parallel.zsh tru64 copy tru64 bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh hpux-ia64 copy hpux-ia64 bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh raspbian copy raspbian bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh solaris copy solaris bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh openindiana copy openindiana bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh aix copy aix bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh hpux copy hpux bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh suse copy suse bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh solaris-x86 copy solaris-x86 bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh mandriva copy mandriva bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh ubuntu copy ubuntu bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh scosysv copy scosysv bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh unixware copy unixware bin/env_parallel.zsh env_parallel.zsh bin/env_parallel.zsh centos copy centos bin/env_parallel.zsh env_parallel.zsh @@ -340,11 +362,13 @@ bin/parcat tru64 copy tru64 bin/parcat parcat bin/parcat hpux-ia64 copy hpux-ia64 bin/parcat parcat bin/parcat raspbian copy raspbian bin/parcat parcat bin/parcat solaris copy solaris bin/parcat parcat +bin/parcat openindiana copy openindiana bin/parcat parcat bin/parcat aix copy aix bin/parcat parcat bin/parcat hpux copy hpux bin/parcat parcat bin/parcat suse copy suse bin/parcat parcat bin/parcat solaris-x86 copy solaris-x86 bin/parcat parcat bin/parcat mandriva copy mandriva bin/parcat parcat +bin/parcat ubuntu copy ubuntu bin/parcat parcat bin/parcat scosysv copy scosysv bin/parcat parcat bin/parcat unixware copy unixware bin/parcat parcat bin/parcat centos copy centos bin/parcat parcat @@ -364,11 +388,13 @@ bin/stdout tru64 copy tru64 bin/stdout stdout bin/stdout hpux-ia64 copy hpux-ia64 bin/stdout stdout bin/stdout raspbian copy raspbian bin/stdout stdout bin/stdout solaris copy solaris bin/stdout stdout +bin/stdout openindiana copy openindiana bin/stdout stdout bin/stdout aix copy aix bin/stdout stdout bin/stdout hpux copy hpux bin/stdout stdout bin/stdout suse copy suse bin/stdout stdout bin/stdout solaris-x86 copy solaris-x86 bin/stdout stdout bin/stdout mandriva copy mandriva bin/stdout stdout +bin/stdout ubuntu copy ubuntu bin/stdout stdout bin/stdout scosysv copy scosysv bin/stdout stdout bin/stdout unixware copy unixware bin/stdout stdout bin/stdout centos copy centos bin/stdout stdout @@ -381,7 +407,6 @@ bin/stdout freebsd copy freebsd bin/stdout stdout bin/stdout debian copy debian bin/stdout stdout bin/stdout hurd copy hurd bin/stdout stdout bin/stdout minix copy minix bin/stdout stdout -bin/stdout minix cat: stdout: no space left on device Done copying echo @@ -413,7 +438,7 @@ redhat Works on redhat.polarhome.com scosysv Works on scosysv.polarhome.com solaris Works on solaris solaris-x86 Works on solaris-x86 -sshminix minix Works on minix +sshwithpass minix Works on minix suse Works on suse tru64 Works on tru64.polarhome.com ubuntu Works on ubuntu @@ -450,6 +475,8 @@ netbsd 1 netbsd 1 openbsd 1 openbsd 1 +openindiana 1 +openindiana 1 pidora 1 pidora 1 qnx 1 @@ -467,8 +494,8 @@ solaris solaris 2 solaris-x86 solaris-x86 1 -sshminix minix 1 -sshminix minix 1 +sshwithpass minix 1 +sshwithpass minix 1 suse 1 suse 1 tru64 1 @@ -520,8 +547,8 @@ solaris 2 solaris 2 solaris-x86 1 solaris-x86 1 -sshminix minix 1 -sshminix minix 1 +sshwithpass minix 1 +sshwithpass minix 1 suse 1 suse 1 tru64 1 @@ -637,6 +664,8 @@ netbsd export: Command not found. netbsd funcA: Command not found. openbsd test funcA openbsd bash only A +openindiana test funcA +openindiana bash only A pidora test funcA pidora bash only A qnx /bin/sh: syntax error: `(' unexpected @@ -650,11 +679,13 @@ solaris test funcA solaris bash only A solaris-x86 test funcA solaris-x86 bash only A -sshminix minix test funcA +sshwithpass minix test funcA suse test funcA suse bash only A tru64 test funcA tru64 bash only A +ubuntu test funcA +ubuntu bash only A unixware test funcA unixware UX:sh (/bin/sh): ERROR: source: Not found unixware UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 3: `(' unexpected @@ -702,6 +733,8 @@ netbsd bash only B netbsd /home/t/tange/setupenv: line 9: syntax error: unexpected end of file openbsd test funcB openbsd bash only B +openindiana test funcB +openindiana bash only B pidora test funcB pidora bash only B qnx test funcB @@ -717,11 +750,13 @@ solaris test funcB solaris bash only B solaris-x86 test funcB solaris-x86 bash only B -sshminix minix test funcB +sshwithpass minix test funcB suse test funcB suse bash only B tru64 test funcB tru64 bash only B +ubuntu test funcB +ubuntu bash only B unixware test funcB unixware bash only B echo @@ -949,17 +984,17 @@ solaris-x86 /home/tange/.profile solaris-x86 /home/tange/.cshrc solaris-x86 /home/tange/.tcshrc solaris-x86 install-OK -sshminix minix Installed env_parallel in: -sshminix minix /home/t/tange/.bashrc -sshminix minix /home/t/tange/.shrc -sshminix minix /home/t/tange/.zshenv -sshminix minix /home/t/tange/.config/fish/config.fish -sshminix minix /home/t/tange/.kshrc -sshminix minix /home/t/tange/.mkshrc -sshminix minix /home/t/tange/.profile -sshminix minix /home/t/tange/.cshrc -sshminix minix /home/t/tange/.tcshrc -sshminix minix 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 @@ -1021,7 +1056,7 @@ redhat env_parallel run-OK scosysv env_parallel run-OK solaris env_parallel run-OK solaris-x86 env_parallel run-OK -sshminix minix 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 @@ -1049,7 +1084,7 @@ 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 -sshminix minix 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 @@ -1107,7 +1142,7 @@ 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 -sshminix minix ### Test if empty command name in process list causes problems +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 @@ -1151,7 +1186,7 @@ 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 -sshminix minix 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 @@ -1186,7 +1221,7 @@ 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 -sshminix minix 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 @@ -1228,7 +1263,7 @@ 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 -sshminix minix 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 @@ -1263,7 +1298,7 @@ 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 -sshminix minix 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 ff76666d..bf604cea 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -150,9 +150,9 @@ B (echo 1; echo; echo 2) | parallel --no-run-if-empty echo 9 parallel ::: ls 'echo foo' pwd -abc-file abc0-file abc_-file +abc-file def-file fixedlen num1000000 @@ -389,12 +389,12 @@ pre-A-post =ls parallel 'set a="{}"; if( { test -d "$a" } ) echo "$a is a dir"' ::: * /bin/bash: -c: line 0: syntax error near unexpected token `)' -/bin/bash: -c: line 0: `set a="abc-file"; if( { test -d "$a" } ) echo "$a is a dir"' -/bin/bash: -c: line 0: syntax error near unexpected token `)' /bin/bash: -c: line 0: `set a="abc0-file"; if( { test -d "$a" } ) echo "$a is a dir"' /bin/bash: -c: line 0: syntax error near unexpected token `)' /bin/bash: -c: line 0: `set a="abc_-file"; if( { test -d "$a" } ) echo "$a is a dir"' /bin/bash: -c: line 0: syntax error near unexpected token `)' +/bin/bash: -c: line 0: `set a="abc-file"; if( { test -d "$a" } ) echo "$a is a dir"' +/bin/bash: -c: line 0: syntax error near unexpected token `)' /bin/bash: -c: line 0: `set a="def-file"; if( { test -d "$a" } ) echo "$a is a dir"' /bin/bash: -c: line 0: syntax error near unexpected token `)' /bin/bash: -c: line 0: `set a="fixedlen"; if( { test -d "$a" } ) echo "$a is a dir"' @@ -574,7 +574,6 @@ Computer:jobs running/jobs completed/%of started jobs/Average seconds to complet seq 1000 | parallel -j10 --bar '(echo -n {};sleep 0.1)' \ 2> >(zenity --timeout=15 --progress --auto-kill --auto-close) -BASE64-Message: GtkDialog mapped without a transient parent. This is discouraged. parallel --joblog /tmp/log exit ::: 1 2 3 0 cat /tmp/log; parallel --joblog /tmp/log exit ::: 1 2 3 0 @@ -826,9 +825,11 @@ foo bar baz in my_func baz parallel --record-env cat ~/.parallel/ignored_vars|sort +_ BASH_FUNC_run_once%% BASH_FUNC_run_test%% COLORFGBG +COLORTERM DBUS_SESSION_BUS_ADDRESS DEBEMAIL DEBFULLNAME @@ -845,7 +846,6 @@ HOME JAVA_HOME JDK_HOME KDE_FULL_SESSION -KDE_MULTIHEAD KDE_SESSION_UID KDE_SESSION_VERSION KONSOLE_DBUS_SERVICE @@ -867,6 +867,7 @@ MAKE_TERMERR MAKE_TERMOUT MANDATORY_PATH MFLAGS +OLDPWD ORACLE_HOME ORACLE_SID PARALLEL @@ -881,8 +882,8 @@ PERL_MM_OPT PROFILEHOME PWD QT_ACCESSIBILITY -QT_IM_MODULE -QT_LINUX_ACCESSIBILITY_ALWAYS_ON +QT_AUTO_SCREEN_SCALE_FACTOR +S_COLORS SERVER1 SERVER2 SESSION_MANAGER @@ -913,7 +914,6 @@ XDG_SESSION_ID XDG_SESSION_PATH XDG_SESSION_TYPE XDG_VTNR -_ # The function is only copied if using Bash my_func2() { echo in my_func2 $VAR $1 @@ -1304,20 +1304,17 @@ cat: num_%header: No such file or directory /bin/bash: line 1: foo: command not found #!/usr/bin/perl print "@ARGV\n" -Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /usr/bin/print line 528. Error: no such file "@ARGV\n" parallel perl_echo ::: foo bar /bin/bash: perl_echo: command not found #!/usr/bin/parallel --shebang-wrap /usr/bin/perl print "@ARGV\n" -Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /usr/bin/print line 528. Error: no such file "@ARGV\n" perl_echo foo bar /bin/bash: perl_echo: command not found #!/usr/bin/parallel --shebang-wrap /usr/bin/perl print "Arguments @ARGV\n"; -Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /usr/bin/print line 528. Error: no such file "Arguments @ARGV\n" #!/usr/bin/parallel --shebang-wrap /usr/bin/python @@ -1351,7 +1348,6 @@ Arguments print "Arguments " puts ARGV -Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at /usr/bin/print line 528. Error: no such file "Arguments " /bin/bash: line 3: puts: command not found #!/usr/bin/parallel --shebang-wrap /usr/bin/octave @@ -1425,6 +1421,7 @@ The second finished running in the foreground First started First done sem --id my_id -u 'echo Second started; sleep 10; echo Second done' +Second done sem --jobs 3 --id my_id -u 'echo Start 1; sleep 5; echo 1 done' && sem --jobs 3 --id my_id -u 'echo Start 2; sleep 6; echo 2 done' && sem --jobs 3 --id my_id -u 'echo Start 3; sleep 7; echo 3 done' && @@ -1445,8 +1442,8 @@ Start 4 Slow started Forced running after 1 sec Slow ended -Give up after 2 secs parallel: Warning: Semaphore timed out. Stealing the semaphore. +parallel: Warning: Semaphore timed out. Exiting. parallel --help Usage: @@ -1541,4 +1538,4 @@ C echo A echo B echo C -8 +7 diff --git a/testsuite/wanted-results/sem01 b/testsuite/wanted-results/sem01 index 22303a22..c409c23c 100644 --- a/testsuite/wanted-results/sem01 +++ b/testsuite/wanted-results/sem01 @@ -21,26 +21,6 @@ echo '### Test mutex. This should not mix output'; parallel --semaphore --id m 19 20 done -echo '### Test semaphore 2 jobs running simultaneously' -### Test semaphore 2 jobs running simultaneously - parallel --semaphore --id 2jobs -u -j2 'echo job1a 1; sleep 1; echo job1b 3'; sleep 0.2; parallel --semaphore --id 2jobs -u -j2 'echo job2a 2; sleep 1; echo job2b 5'; sleep 0.2; parallel --semaphore --id 2jobs -u -j2 'echo job3a 4; sleep 1; echo job3b 6'; parallel --semaphore --id 2jobs --wait; echo done -job1a 1 -job2a 2 -job1b 3 -job3a 4 -job2b 5 -job3b 6 -done -echo '### Test if parallel invoked as sem will run parallel --semaphore' -### Test if parallel invoked as sem will run parallel --semaphore - sem --id as_sem -u -j2 'echo job1a 1; sleep 1; echo job1b 3'; sleep 0.2; sem --id as_sem -u -j2 'echo job2a 2; sleep 1; echo job2b 5'; sleep 0.2; sem --id as_sem -u -j2 'echo job3a 4; sleep 1; echo job3b 6'; sem --id as_sem --wait; echo done -job1a 1 -job2a 2 -job1b 3 -job3a 4 -job2b 5 -job3b 6 -done echo '### Test similar example as from man page - run 2 jobs simultaneously' ### Test similar example as from man page - run 2 jobs simultaneously echo 'Expect done: 1 2 5 3 4' diff --git a/testsuite/wanted-results/sql02 b/testsuite/wanted-results/sql02 index 468f2090..46842665 100644 --- a/testsuite/wanted-results/sql02 +++ b/testsuite/wanted-results/sql02 @@ -37,7 +37,7 @@ bytes 3072 Current command: sqlite3 foo -sqltest.sqlite3: SQLite 3.x database +sqltest.sqlite3: SQLite 3.x database, last written using SQLite version 3022000 n|t 1|Line 1 2|Line 2 @@ -70,6 +70,6 @@ n t Line 2 bytes -2048 +8192 bytes -2048 +8192 diff --git a/testsuite/wanted-results/test19 b/testsuite/wanted-results/test19 index 7fd15c4b..e14b141c 100644 --- a/testsuite/wanted-results/test19 +++ b/testsuite/wanted-results/test19 @@ -76,11 +76,11 @@ ls: tmp/parallel.file*: No such file or directory OK Input for ssh -l parallel one-server -- mkdir -p ./. --l parallel one-server rsync --server -lDrRze.iLsfx . ./. +-l parallel one-server rsync --server -lDrRze.iLsfxC . ./. -l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64 --l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file. +-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file. newlineX.out' --l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file. +-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file. newlineX.out2' -l parallel one-server -- rm -f './tmp/parallel.file. newlineX'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' @@ -89,11 +89,11 @@ newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' -l parallel one-server -- rm -f './tmp/parallel.file. newlineX.out2'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' -l parallel one-server -- mkdir -p ./. --l parallel one-server rsync --server -lDrRze.iLsfx . ./. +-l parallel one-server rsync --server -lDrRze.iLsfxC . ./. -l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64 --l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file. +-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file. newlineX.out' --l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . './parallel.file. +-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file. newlineX.out2' -l parallel one-server -- rm -f './tmp/parallel.file. newlineX'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' diff --git a/testsuite/wanted-results/test23 b/testsuite/wanted-results/test23 index 403c081f..acd534e7 100644 --- a/testsuite/wanted-results/test23 +++ b/testsuite/wanted-results/test23 @@ -19,30 +19,30 @@ ls: script2: No such file or directory OK ### Test --basefile + --sshlogin : 1 -10 -11 -12 -13 -2 -3 -4 -5 -6 -7 -8 -9 1 10 +10 +11 11 12 +12 +13 13 2 +2 +3 3 4 +4 +5 5 6 +6 +7 7 8 +8 +9 9 ### Here we ought to test -m --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space ### But we will wait for a real world scenario