diff --git a/10seconds_install b/10seconds_install index 7e044e8b..8d8758ee 100644 --- a/10seconds_install +++ b/10seconds_install @@ -1,7 +1,6 @@ #!/bin/bash -# Copyright (C) 2013,2014,2015,2017 Ole Tange and Free Software -# Foundation, Inc. +# Copyright (C) 2013-2018 Ole Tange and Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,7 +14,7 @@ # If that fails, it does a personal installation. # If that fails, it copies to $HOME/bin # -# Download and run the script directly by: +# You can download and run the script directly by: # (wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash run() { @@ -52,13 +51,40 @@ run() { $GET http://ftpmirror.gnu.org/parallel/$LATEST.tar.bz2.sig > $LATEST.tar.bz2.sig fi + fetch_keys() { + if gpg -h 2>/dev/null >/dev/null ; then + # GnuPG installed + # Setup .gnupg/gpg.conf if not already done + echo | gpg 2>/dev/null >/dev/null + keyserver1=keys.gnupg.net + keyserver2=pool.sks-keyservers.net + if gpg --keyserver $keyserver1 --recv-key 0xFFFFFFF1 || + gpg --keyserver $keyserver2 --recv-key 0xFFFFFFF1 ; then + if gpg --keyserver $keyserver1 --recv-key 0x88888888 || + gpg --keyserver $keyserver2 --recv-key 0x88888888; then + # OK + return 0 + else + echo + echo "Cannot fetch keyID 0x88888888, so the signature cannot be checked." + return 1 + fi + else + echo + echo "Cannot fetch keyID 0xFFFFFFF1, so the signature cannot be checked." + return 1 + fi + else + # GnuPG not installed + echo + echo "GnuPG (gpg) is not installed so the signature cannot be checked." + return 1 + fi + } + + # Check signature - in case ftpmirror.gnu.org is compromised - if gpg -h 2>/dev/null >/dev/null; then - # GnuPG installed - # Setup .gnupg/gpg.conf if not already done - echo | gpg 2>/dev/null >/dev/null - gpg --keyserver keys.gnupg.net --recv-key FFFFFFF1 - gpg --keyserver keys.gnupg.net --recv-key 88888888 + if fetch_keys; then if gpg --with-fingerprint $LATEST.tar.bz2.sig 2>&1 | $GREP -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1|^Primary key fingerprint: CDA0 1A42 08C4 F745 0610 7E7B D1AB 4516 8888 8888' ; then # Source code signed by Ole Tange @@ -74,8 +100,7 @@ run() { exit 1 fi else - # GnuPG not installed - echo "GnuPG (gpg) is not installed so the signature cannot be checked." + # GnuPG not installed or public keys not downloaded echo "This means that if the code has been changed by criminals, you will not discover that!" echo echo "Continue anyway? (y/n)" 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..09cba522 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -500,7 +500,7 @@ distdir: $(DISTFILES) ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -526,7 +526,7 @@ dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -544,7 +544,7 @@ dist dist-all: distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -554,7 +554,7 @@ distcheck: dist *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac @@ -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/NEWS b/NEWS index 65cf8abb..f98fa122 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,61 @@ +<<<<<<< HEAD +======= +20181122 + +* Experimental simpler job flow control. + +* 時間がかかるコマンドを GNU parallel で 並列実行する + https://qiita.com//grohiro/items/4db3fa951a4778c5c479 + +* Bug fixes and man page updates. + + +20181022 + +* env_parallel.fish: --session support (alpha quality) + +* 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 + +* GNU parallel in Japanese Wikipedia + https://ja.wikipedia.org/wiki/GNU_parallel + +* 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. + + +20180922 + +* Minix is supported again. + +* 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 + +* Intro to Computing at CARC includes introduction to GNU Parallel + http://carc.unm.edu/education--training/workshops-and-seminars.html + +* 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 + +* Bug fixes and man page updates. + + +20180822 + +* parset sets exit code. + +* How to install GNU Parallel + https://www.techrepublic.com/videos/how-to-install-gnu-parallel/ + +* Bug fixes and man page updates. + + +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 20180722 * The quoting engine has been changed. Instead of using \-quoting GNU @@ -24,6 +82,11 @@ * Parallel download genomic data with GNU-Parallel https://digibio.blogspot.com/search/label/GNU-Parallel +<<<<<<< HEAD +======= +* Bug fixes and man page updates. + +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 20180622 diff --git a/README b/README index c3b68279..13f22c82 100644 --- a/README +++ b/README @@ -44,9 +44,9 @@ document. Full installation of GNU Parallel is as simple as: - wget https://ftpmirror.gnu.org/parallel/parallel-20180722.tar.bz2 - bzip2 -dc parallel-20180722.tar.bz2 | tar xvf - - cd parallel-20180722 + wget https://ftpmirror.gnu.org/parallel/parallel-20181122.tar.bz2 + bzip2 -dc parallel-20181122.tar.bz2 | tar xvf - + cd parallel-20181122 ./configure && make && sudo make install @@ -55,9 +55,9 @@ Full installation of GNU Parallel is as simple as: If you are not root you can add ~/bin to your path and install in ~/bin and ~/share: - wget https://ftpmirror.gnu.org/parallel/parallel-20180722.tar.bz2 - bzip2 -dc parallel-20180722.tar.bz2 | tar xvf - - cd parallel-20180722 + wget https://ftpmirror.gnu.org/parallel/parallel-20181122.tar.bz2 + bzip2 -dc parallel-20181122.tar.bz2 | tar xvf - + cd parallel-20181122 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel diff --git a/aclocal.m4 b/aclocal.m4 index c24039fe..22dd4fca 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl +[AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -143,7 +143,7 @@ fi])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -340,7 +340,7 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -361,7 +361,7 @@ if test x"${install_sh+set}" != xset; then fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -382,7 +382,7 @@ AC_SUBST([am__leading_dot])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -421,7 +421,7 @@ fi # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -452,7 +452,7 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -533,7 +533,7 @@ AC_CONFIG_COMMANDS_PRE( rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -593,7 +593,7 @@ AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -621,7 +621,7 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -640,7 +640,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/configure b/configure index de1dc7f6..0dea38d6 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for parallel 20180722. +# Generated by GNU Autoconf 2.69 for parallel 20181122. # # Report bugs to . # @@ -579,8 +579,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20180722' -PACKAGE_STRING='parallel 20180722' +PACKAGE_VERSION='20181122' +PACKAGE_STRING='parallel 20181122' PACKAGE_BUGREPORT='bug-parallel@gnu.org' PACKAGE_URL='' @@ -1214,7 +1214,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures parallel 20180722 to adapt to many kinds of systems. +\`configure' configures parallel 20181122 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1281,7 +1281,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of parallel 20180722:";; + short | recursive ) echo "Configuration of parallel 20181122:";; esac cat <<\_ACEOF @@ -1357,7 +1357,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -parallel configure 20180722 +parallel configure 20181122 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1374,7 +1374,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by parallel $as_me 20180722, which was +It was created by parallel $as_me 20181122, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2237,7 +2237,7 @@ fi # Define the identity of the package. PACKAGE='parallel' - VERSION='20180722' + VERSION='20181122' cat >>confdefs.h <<_ACEOF @@ -2880,7 +2880,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by parallel $as_me 20180722, which was +This file was extended by parallel $as_me 20181122, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2942,7 +2942,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -parallel config.status 20180722 +parallel config.status 20181122 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 8672d83d..60218c2a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20180722], [bug-parallel@gnu.org]) +AC_INIT([parallel], [20181122], [bug-parallel@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ 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 155039e0..02289980 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -16,6 +16,7 @@ configure.ac: AC_INIT([parallel], [20100422], [bug-parallel@gnu.org]) src/parallel: $Global::version = 20100422; README: parallel-20130222 +YYYYMMDD=$(echo `yyyymmdd`-1 | bc) YYYYMMDD=$(echo `yyyymmdd`+1 | bc) YYYYMMDD=`yyyymmdd` echo $YYYYMMDD @@ -205,87 +206,22 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama +Subject: GNU Parallel 20181222 ('Kilogram/brexitdeal/Stan Lee/Cesar Sayoc/Tree of Life/Iran') released <<[stable]>> -Subject: GNU Parallel 20180722 ('Crimson Hexagon') released [alpha] <<[stable]>> +GNU Parallel 20181222 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ -GNU Parallel 20180722 ('Crimson Hexagon') [alpha] <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ - -This release has signficant changes and is considered alpha quality. <> Quote of the month: - I've been using GNU Parallel very much and effectively lately. - Such an easy way to get huge speed-ups with my simple bash/Perl/Python - programs -- parallelize them! - -- Ken Youens-Clark @kycl4rk@twitter - New in this release: -* The quoting engine has been changed. Instead of using \-quoting GNU Parallel now uses '-quoting in bash/ash/dash/ksh. This should improve compatibility with different locales. This is a big change causing this release to be alpha quality. - -* The CPU calculation has changed. By default GNU Parallel uses the number of CPU threads as the number of CPUs. This can be change to the number of CPU cores or number of CPU sockets with --use-cores-instead-of-threads or --use-sockets-instead-of-threads. - -* The detected number of sockets, cores, and threads can be shown with --number-of-sockets, --number-of-cores, and --number-of-threads. - -* env_parallel now support mksh using env_parallel.mksh. - -* GNU Parallel is distributed as part of Snippy https://github.com/tseemann/snippy - -* GNU Parallel: Ejecutar comandos simultáneamente en Linux https://esgeeks.com/gnu-parallel-ejecutar-comandos-simultaneo-linux/ - -* Parallel download genomic data with GNU-Parallel https://digibio.blogspot.com/search/label/GNU-Parallel - -<> - -<> - -<> - -<> - -<> - -<> - -<> - -<> - -<> - -<> - -<> - -<> - -<> GNU Parallel was used (unfortunately without citation) in: MUGBAS: a species free gene-based programme suite for post-GWAS analysis http://www.ncbi.nlm.nih.gov/pubmed/25765345 - -<> GNU Parallel was used in: Large Scale Author Name Disambiguation in Digital Libraries http://ieeexplore.ieee.org/xpl/abstractReferences.jsp?tp=&arnumber=7004487&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D7004487 - -<> GNU Parallel was used (unfortunately with wrong citation) in: TADSim: Discrete Event-Based Performance Prediction for Temperature-Accelerated Dynamics http://vruehle.de/publications/2015c.pdf -http://www.researchgate.net/profile/Christoph_Junghans/publication/276178326_TADSim_Discrete_Event-Based_Performance_Prediction_for_Temperature-Accelerated_Dynamics/links/55562b6708ae980ca60c8369.pdf - -<< Update forventet juni Rachel har lige svaret >> GNU Parallel was used in: SISRS: Site Identification from Short Read Sequences https://github.com/rachelss/SISRS/ - -<> - -<> - -<> - -<> - -<> - -<> - -<> +* https://qiita.com/hana_shin/items/53c3c78525c9c758ae7c * Bug fixes and man page updates. +Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html + GNU Parallel - For people who live life in the parallel lane. @@ -307,7 +243,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/packager/obs/home:tange/parallel/.osc/_files b/packager/obs/home:tange/parallel/.osc/_files index c4a2967a..39541a53 100644 --- a/packager/obs/home:tange/parallel/.osc/_files +++ b/packager/obs/home:tange/parallel/.osc/_files @@ -1,6 +1,6 @@ - - - - - + + + + + diff --git a/packager/obs/home:tange/parallel/.osc/parallel.spec b/packager/obs/home:tange/parallel/.osc/parallel.spec index 12f33916..df608706 100644 --- a/packager/obs/home:tange/parallel/.osc/parallel.spec +++ b/packager/obs/home:tange/parallel/.osc/parallel.spec @@ -1,6 +1,7 @@ + Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20180622 +Version: 20181122 Release: 1.2 License: GPL Group: Productivity/File utilities diff --git a/packager/obs/home:tange/parallel/parallel.spec b/packager/obs/home:tange/parallel/parallel.spec index 12f33916..df608706 100644 --- a/packager/obs/home:tange/parallel/parallel.spec +++ b/packager/obs/home:tange/parallel/parallel.spec @@ -1,6 +1,7 @@ + Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20180622 +Version: 20181122 Release: 1.2 License: GPL Group: Productivity/File utilities diff --git a/src/Makefile.in b/src/Makefile.in index 392ecd5c..94f7dff0 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff --git a/src/env_parallel.ash b/src/env_parallel.ash index 0697c7b8..d69ccd6a 100755 --- a/src/env_parallel.ash +++ b/src/env_parallel.ash @@ -204,7 +204,7 @@ env_parallel() { _error_PAR() { echo "env_parallel: Error: $@" >&2 } - + if _which_PAR parallel >/dev/null; then true parallel found in path else @@ -300,12 +300,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -328,15 +328,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -347,25 +354,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names eval "` # Compute results into files - $_parset_parallel_prg --files -k "$@" | + ($_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}\`' :::: - :::+ \` - echo "$_parset_name" | + echo "$_parset_NAME" | perl -pe 's/,/ /g' \` `" else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into - # Supported in: bash zsh ksh - # Arrays do not work in: ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into + # Supported in: bash zsh ksh mksh + # Arrays do not work in: sh ash dash + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/env_parallel.bash b/src/env_parallel.bash index eca28334..72c3a885 100755 --- a/src/env_parallel.bash +++ b/src/env_parallel.bash @@ -7,7 +7,7 @@ # after which 'env_parallel' works # # -# Copyright (C) 2016,2017,2018 +# Copyright (C) 2016-2018 # Ole Tange and Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify @@ -300,12 +300,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -328,15 +328,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -347,25 +354,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names eval "$( # Compute results into files - $_parset_parallel_prg --files -k "$@" | + ($_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}`' :::: - :::+ $( - echo "$_parset_name" | - perl -pe 's/,/ /g' + parallel --plain -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $( + echo "$_parset_NAME" | perl -pe 's/,/ /g' ) - )" + ); + " else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into - # Supported in: bash zsh ksh - # Arrays do not work in: ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into + # Supported in: bash zsh ksh mksh + # Arrays do not work in: sh ash dash + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/env_parallel.csh b/src/env_parallel.csh index 8ac91193..153eb0c3 100755 --- a/src/env_parallel.csh +++ b/src/env_parallel.csh @@ -7,7 +7,7 @@ # after which 'env_parallel' works # # -# Copyright (C) 2016,2017,2018 +# Copyright (C) 2016-2018 # Ole Tange and Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify @@ -55,7 +55,7 @@ else # Deal with --env _ cat <<'EOF' > $_tMpscRIpt #!/usr/bin/perl - + for(@ARGV){ $next_is_env and push @envvar, split/,/, $_; $next_is_env=/^--env$/; @@ -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 @@ -125,8 +126,8 @@ else # Quoted: s/\^/\\001alias\ /\; alias | \ perl -ne '/^'"$_grep_REGEXP"'/ or next; /^'"$_ignore_UNDERSCORE"'[^_a-zA-Z]/ and next; print' | \ - perl -pe s/\\047/\\047\\042\\047\\042\\047/g\;s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;s/\^\(\\S+\)\(\\s+\)\(.\*\)/\\1\\2\\047\\3\\047/\;s/\^/\\001alias\ /\;s/\\\!/\\\\\\\!/g >> $_tMpaLLfILe - + perl -pe s/\\047/\\047\\042\\047\\042\\047/g\;s/\^\(\\S+\)\(\\s+\)\\\(\(.\*\)\\\)/\\1\\2\\3/\;s/\^\(\\S+\)\(\\s+\)\(.\*\)/\\1\\2\\047\\3\\047/\;s/\^/\\001alias\ /\;s/\\\!/\\\\\\\!/g >> $_tMpaLLfILe + setenv PARALLEL_ENV "`cat $_tMpaLLfILe; rm $_tMpaLLfILe`"; unset _tMpaLLfILe; # Use $PARALLEL set in calling alias diff --git a/src/env_parallel.dash b/src/env_parallel.dash index 28e97b9a..3ed9b4bb 100755 --- a/src/env_parallel.dash +++ b/src/env_parallel.dash @@ -204,7 +204,7 @@ env_parallel() { _error_PAR() { echo "env_parallel: Error: $@" >&2 } - + if _which_PAR parallel >/dev/null; then true parallel found in path else @@ -300,12 +300,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -328,15 +328,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -347,25 +354,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names eval "` # Compute results into files - $_parset_parallel_prg --files -k "$@" | + ($_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}\`' :::: - :::+ \` - echo "$_parset_name" | + echo "$_parset_NAME" | perl -pe 's/,/ /g' \` `" else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into - # Supported in: bash zsh ksh - # Arrays do not work in: ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into + # Supported in: bash zsh ksh mksh + # Arrays do not work in: sh ash dash + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/env_parallel.fish b/src/env_parallel.fish index 7ee5c731..6436c57f 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; ) @@ -118,7 +133,7 @@ function env_parallel # Generate commands to set scalar variables # Keep the ones from --env # Ignore the ones from ~/.parallel/ignored_vars - # + # begin; for v in (set -n | \ grep -Ev '^(PARALLEL_TMP|PARALLEL_ENV)$' | \ diff --git a/src/env_parallel.ksh b/src/env_parallel.ksh index 265edd21..1c9b3928 100755 --- a/src/env_parallel.ksh +++ b/src/env_parallel.ksh @@ -48,7 +48,6 @@ env_parallel() { typeset +p -f | perl -pe 's/\(\).*//' } _bodies_of_FUNCTIONS() { - # typeset -f "$@" functions "$@" } _names_of_VARIABLES() { @@ -284,12 +283,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -312,15 +311,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -331,25 +337,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names - eval "` + eval "$( # Compute results into files - $_parset_parallel_prg --files -k "$@" | - # var1= cat tmpfile1; rm tmpfile1 - # var2= cat tmpfile2; rm tmpfile2 - parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` - echo "$_parset_name" | - perl -pe 's/,/ /g' - \` - `" + ($_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}`' :::: - :::+ $( + echo "$_parset_NAME" | perl -pe 's/,/ /g' + ) + ); + " else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into - # Supported in: bash zsh ksh - # Arrays do not work in: ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into + # Supported in: bash zsh ksh mksh + # Arrays do not work in: sh ash dash + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/env_parallel.mksh b/src/env_parallel.mksh index 92e48986..3503c074 100644 --- a/src/env_parallel.mksh +++ b/src/env_parallel.mksh @@ -190,7 +190,7 @@ env_parallel() { _error_PAR() { echo "env_parallel: Error: $@" >&2 } - + if _which_PAR parallel >/dev/null; then true parallel found in path else @@ -286,12 +286,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -314,15 +314,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -333,25 +340,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names - eval "` + eval "$( # Compute results into files - $_parset_parallel_prg --files -k "$@" | - # var1= cat tmpfile1; rm tmpfile1 - # var2= cat tmpfile2; rm tmpfile2 - parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` - echo "$_parset_name" | - perl -pe 's/,/ /g' - \` - `" + ($_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}`' :::: - :::+ $( + echo "$_parset_NAME" | perl -pe 's/,/ /g' + ) + ); + " else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into # Supported in: bash zsh ksh mksh # Arrays do not work in: sh ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/env_parallel.pod b/src/env_parallel.pod index 71b582ad..ff9b6841 100644 --- a/src/env_parallel.pod +++ b/src/env_parallel.pod @@ -20,9 +20,6 @@ environment to GNU B. If the shell function is not loaded, a dummy script will be run instead that explains how to install the function. -B is beta quality and not production ready, but please -use it for everyday use and report bugs. - B is 100 ms slower at startup than pure GNU B, and takes up to 30% longer to start a job (typically 15 ms). @@ -448,7 +445,7 @@ array with the given name. Multiple B<--env>s can be given. =back -=head2 mksh (alpha testing) +=head2 mksh =head3 Installation @@ -744,10 +741,10 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing. Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk -Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk +Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange, -http://ole.tange.dk and Free Software Foundation, Inc. +Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free +Software Foundation, Inc. =head1 LICENSE diff --git a/src/env_parallel.sh b/src/env_parallel.sh index 5a493152..ce7d0211 100755 --- a/src/env_parallel.sh +++ b/src/env_parallel.sh @@ -7,7 +7,7 @@ # after which 'env_parallel' works # # -# Copyright (C) 2016,2017,2018 +# Copyright (C) 2016-2018 # Ole Tange and Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify @@ -181,12 +181,12 @@ env_parallel() { # type returns: # ll is an alias for ls -l (in ash) # bash is a tracked alias for /bin/bash - # true is a shell builtin + # true is a shell builtin (in bash) # myfunc is a function (in bash) # myfunc is a shell function (in zsh) - # which is /usr/bin/which + # which is /usr/bin/which (in sh, bash) # which is hashed (/usr/bin/which) - # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' + # gi is aliased to `grep -i' (in bash) # Return 0 if found, 1 otherwise LANG=C type "$@" | perl -pe '$exit += (s/ is an alias for .*// || @@ -204,7 +204,7 @@ env_parallel() { _error_PAR() { echo "env_parallel: Error: $@" >&2 } - + if _which_PAR parallel >/dev/null; then true parallel found in path else @@ -300,12 +300,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -328,15 +328,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -347,25 +354,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names eval "` # Compute results into files - $_parset_parallel_prg --files -k "$@" | + ($_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}\`' :::: - :::+ \` - echo "$_parset_name" | + echo "$_parset_NAME" | perl -pe 's/,/ /g' \` `" else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into - # Supported in: bash zsh ksh - # Arrays do not work in: ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into + # Supported in: bash zsh ksh mksh + # Arrays do not work in: sh ash dash + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/env_parallel.tcsh b/src/env_parallel.tcsh index 7b4672ee..9ea73521 100755 --- a/src/env_parallel.tcsh +++ b/src/env_parallel.tcsh @@ -7,7 +7,7 @@ # after which 'env_parallel' works # # -# Copyright (C) 2016,2017,2018 +# Copyright (C) 2016-2018 # Ole Tange and Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify diff --git a/src/env_parallel.zsh b/src/env_parallel.zsh index 324076e0..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 { @@ -181,7 +181,7 @@ env_parallel() { _error_PAR() { echo "env_parallel: Error: $@" >&2 } - + if _which_PAR parallel >/dev/null; then true parallel found in path else @@ -277,12 +277,12 @@ env_parallel() { } parset() { - _parset_parallel_prg=parallel + _parset_PARALLEL_PRG=parallel _parset_main "$@" } env_parset() { - _parset_parallel_prg=env_parallel + _parset_PARALLEL_PRG=env_parallel _parset_main "$@" } @@ -305,15 +305,22 @@ _parset_main() { # parset "var_a4 var_b4 var_c4" echo ::: {1..3} # echo $var_c4 - _parset_name="$1" - if [ "$_parset_name" = "" ] ; then + _make_TEMP() { + # mktemp does not exist on some OS + perl -e 'use File::Temp qw(tempfile); + $ENV{"TMPDIR"} ||= "/tmp"; + print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])' + } + + _parset_NAME="$1" + if [ "$_parset_NAME" = "" ] ; then echo parset: Error: No destination variable given. >&2 echo parset: Error: Try: >&2 echo parset: Error: ' ' parset myarray echo ::: foo bar >&2 return 255 fi shift - echo "$_parset_name" | + echo "$_parset_NAME" | perl -ne 'chomp;for (split /[, ]/) { # Allow: var_32 var[3] if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) { @@ -324,25 +331,30 @@ _parset_main() { } exit $exitval; ' || return 255 - if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then - # $_parset_name contains , or space + _exit_FILE=`_make_TEMP` + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then + # $_parset_NAME contains , or space # Split on , or space to get the names - eval "` + eval "$( # Compute results into files - $_parset_parallel_prg --files -k "$@" | - # var1= cat tmpfile1; rm tmpfile1 - # var2= cat tmpfile2; rm tmpfile2 - parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \` - echo "$_parset_name" | - perl -pe 's/,/ /g' - \` - `" + ($_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}`' :::: - :::+ $( + echo "$_parset_NAME" | perl -pe 's/,/ /g' + ) + ); + " else - # $_parset_name does not contain , or space - # => $_parset_name is the name of the array to put data into + # $_parset_NAME does not contain , or space + # => $_parset_NAME is the name of the array to put data into # Supported in: bash zsh ksh mksh # Arrays do not work in: sh ash dash - eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | - perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" + eval "$_parset_NAME=( $( + # Compute results into files. Save exit value + ($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") | + perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' + ) )" fi + return `cat "$_exit_FILE"; rm "$_exit_FILE"` } diff --git a/src/niceload b/src/niceload index f3032812..33f7da2b 100755 --- a/src/niceload +++ b/src/niceload @@ -24,7 +24,11 @@ use strict; use Getopt::Long; $Global::progname="niceload"; +<<<<<<< HEAD $Global::version = 20180723; +======= +$Global::version = 20181124; +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { @@ -1147,7 +1151,7 @@ sub io_status_linux { # throw away all execpt the last Device:-section my @iostat; for(reverse @iostat_out) { - /Device:/ and last; + /Device/ and last; push @iostat, (split(/\s+/,$_))[13]; } my $io = ::max(@iostat); diff --git a/src/niceload.pod b/src/niceload.pod index 064c6c0d..29ee414e 100644 --- a/src/niceload.pod +++ b/src/niceload.pod @@ -36,7 +36,10 @@ run 1 second, suspend (3.00-1.00) seconds, run 1 second, suspend =item B<--battery> -Suspend if the system is running on battery. Shorthand for: -l -1 --sensor 'cat /sys/class/power_supply/BAT0/status /proc/acpi/battery/BAT0/state 2>/dev/null |grep -i -q discharging; echo $?' +Suspend if the system is running on battery. Shorthand for: +-l -1 --sensor 'cat /sys/class/power_supply/BAT0/status +/proc/acpi/battery/BAT0/state 2>/dev/null | grep -i -q discharging; +echo $?' =item B<-f> I @@ -62,7 +65,7 @@ under the limits. The default is B<--soft>. Limit for I/O. The amount of disk I/O will be computed as a value 0 - 10, where 0 is no I/O and 10 is at least one disk is 100% saturated. -B<--io> will set both B<--start-io> and B. +B<--io> will set both B<--start-io> and B<--run-io>. =item B<--load> I @@ -71,7 +74,7 @@ B<--io> will set both B<--start-io> and B. Limit for load average. -B<--load> will set both B<--start-load> and B. +B<--load> will set both B<--start-load> and B<--run-load>. =item B<--mem> I @@ -87,7 +90,7 @@ I can be postfixed with K, M, G, T, or P which would multiply the size with 1024, 1048576, 1073741824, or 1099511627776 respectively. -B<--mem> will set both B<--start-mem> and B. +B<--mem> will set both B<--start-mem> and B<--run-mem>. =item B<--noswap> @@ -99,7 +102,7 @@ indication that the system is memory stressed. B<--noswap> is over limit if the system is swapping both in and out. -B<--noswap> will set both B<--start-noswap> and B. +B<--noswap> will set both B<--start-noswap> and B<--run-noswap>. =item B<--net> @@ -251,18 +254,19 @@ CPU. When the load rises to 1.0 the process is suspended. =head1 EXAMPLE: Run updatedb -Running updatedb can often starve the system for disk I/O and thus result in a high load. +Running B can often starve the system for disk I/O and thus result in a high load. -Run updatedb but suspend updatedb if the load is above 2.00: +Run B but suspend B if the load is above 2.00: B =head1 EXAMPLE: Run rsync -rsync can just like updatedb starve the system for disk I/O and thus result in a high load. +B can, just like B, starve the system for disk I/O +and thus result in a high load. -Run rsync but keep load below 3.4. If load reaches 7 sleep for +Run B but keep load below 3.4. If load reaches 7 sleep for (7-3.4)*12 seconds: B @@ -299,15 +303,14 @@ Report bugs to . Copyright (C) 2004-11-19 Ole Tange, http://ole.tange.dk -Copyright (C) 2005,2006,2007,2008,2009,2010 Ole Tange, http://ole.tange.dk +Copyright (C) 2005-2010 Ole Tange, http://ole.tange.dk -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange, -http://ole.tange.dk and Free Software Foundation, Inc. +Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free +Software Foundation, Inc. =head1 LICENSE -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Free -Software Foundation, Inc. +Copyright (C) 2010-2018 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/parallel b/src/parallel index e5f26c80..a614aa7e 100755 --- a/src/parallel +++ b/src/parallel @@ -1,7 +1,6 @@ #!/usr/bin/env perl -# Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016, -# 2017,2018 Ole Tange and Free Software Foundation, Inc. +# Copyright (C) 2007-2018 Ole Tange and Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -121,17 +120,27 @@ if($Global::semaphore) { $sem = acquire_semaphore(); } $SIG{TERM} = \&start_no_new_jobs; -start_more_jobs(); + if($opt::tee) { # All jobs must be running in parallel for --tee + while(start_more_jobs()) {} $Global::start_no_new_jobs = 1; + if(not $Global::JobQueue->empty()) { + ::error("--tee requres --jobs to be higher. Try --jobs 0."); + ::wait_and_exit(255); + } } elsif($opt::pipe and not $opt::pipepart) { + # Fill all jobslots + while(start_more_jobs()) {} spreadstdin(); +} else { + # Reap one - start one + while(reaper() + start_more_jobs()) {} } ::debug("init", "Start draining\n"); drain_job_queue(); ::debug("init", "Done draining\n"); -reaper(); +reapers(); ::debug("init", "Done reaping\n"); if($Global::semaphore) { $sem->release(); @@ -160,7 +169,8 @@ sub set_input_source_header { ::debug("init", "Colname: '$s'"); # Replace {colname} with {2} for(@command,@Global::ret_files,@Global::transfer_files, - $opt::tagstring, $opt::workdir, $opt::results, $opt::retries) { + $opt::tagstring, $opt::workdir, $opt::results, + $opt::retries) { # Skip if undefined $_ or next; s:\{$s(|/|//|\.|/\.)\}:\{$id$1\}:g; @@ -186,11 +196,14 @@ sub max_jobs_running { # Returns: # $Global::max_jobs_running if(not $Global::max_jobs_running) { - for my $sshlogin (values %Global::host) { $sshlogin->max_jobs_running(); } } + if(not $Global::max_jobs_running) { + ::error("Cannot run any jobs."); + wait_and_exit(255); + } return $Global::max_jobs_running; } @@ -202,7 +215,8 @@ sub halt { if(not defined $Global::halt_exitstatus) { if($Global::halt_pct) { $Global::halt_exitstatus = - ::ceil($Global::total_failed / $Global::total_started * 100); + ::ceil($Global::total_failed / + $Global::total_started * 100); } elsif($Global::halt_count) { $Global::halt_exitstatus = ::min(undef_as_zero($Global::total_failed),101); @@ -226,7 +240,7 @@ sub pipepart_setup { if($opt::tee) { # Prepend each command with # < file - my $cat_string = "< ".::shell_quote_scalar($opt::a[0]); + my $cat_string = "< ".Q($opt::a[0]); for(1..$Global::JobQueue->total_jobs()) { push @Global::cat_appends, $cat_string; push @Global::cat_prepends, ""; @@ -337,7 +351,8 @@ sub find_header { if($opt::header eq ":") { $opt::header = "(.*\n)"; } # Number = number of lines $opt::header =~ s/^(\d+)$/"(.*\n)"x$1/e; - while(read($fh,substr($$buf_ref,length $$buf_ref,0),$Global::blocksize)) { + while(read($fh,substr($$buf_ref,length $$buf_ref,0), + $Global::blocksize)) { if($$buf_ref=~s/^($opt::header)//) { $header = $1; last; @@ -441,7 +456,7 @@ sub cat_partial { } } }); - return "<". shell_quote_scalar($file) . + return "<". Q($file) . " perl -e '$script' @start_len |"; } @@ -460,15 +475,6 @@ sub spreadstdin { # %Global::running # Returns: N/A - if($opt::tee) { - # Spawn all jobs - # read a record - # Write record to all jobs - if(not $Global::JobQueue->empty()) { - ::error("--tee requres --jobs to be higher. Try --jobs 0."); - } - } - my $buf = ""; my ($recstart,$recend) = recstartrecend(); my $recendrecstart = $recend.$recstart; @@ -618,6 +624,7 @@ sub spreadstdin { my $sleep =1; while($Global::total_running > 0) { $sleep = ::reap_usleep($sleep); + start_more_jobs(); } } $Global::start_no_new_jobs ||= 1; @@ -667,7 +674,8 @@ sub recstartrecend { } if($opt::regexp) { - # If $recstart/$recend contains '|' this should only apply to the regexp + # If $recstart/$recend contains '|' + # this should only apply to the regexp $recstart = "(?:".$recstart.")"; $recend = "(?:".$recend.")"; } else { @@ -726,7 +734,8 @@ sub nindex { if($job->block_length() > 0) { $written += $job->non_blocking_write(); } else { - $job->set_block($header_ref,$buffer_ref,$endpos,$recstart,$recend); + $job->set_block($header_ref, $buffer_ref, + $endpos, $recstart, $recend); $block_passed = 1; $job->set_virgin(0); $written += $job->non_blocking_write(); @@ -740,8 +749,8 @@ sub nindex { if($job->block_length() > 0) { $written += $job->non_blocking_write(); } else { - $job->set_block($header_ref,$buffer_ref, - $endpos,$recstart,$recend); + $job->set_block($header_ref, $buffer_ref, + $endpos, $recstart, $recend); $block_passed = 1; $job->set_virgin(0); $written += $job->non_blocking_write(); @@ -864,12 +873,14 @@ sub write_record_to_pipe { # @Global::virgin_jobs # Returns: # Number of chunks written (0 or 1) - my ($chunk_number,$header_ref,$buffer_ref,$recstart,$recend,$endpos) = @_; + my ($chunk_number, $header_ref, $buffer_ref, + $recstart, $recend, $endpos) = @_; if($endpos == 0) { return 0; } if(vec($Global::job_already_run,$chunk_number,1)) { return 1; } if($opt::roundrobin) { # Write the block to one of the already running jobs - return round_robin_write($header_ref,$buffer_ref,$recstart,$recend,$endpos); + return round_robin_write($header_ref, $buffer_ref, + $recstart, $recend, $endpos); } # If no virgin found, backoff my $sleep = 0.0001; # 0.01 ms - better performance on highend @@ -889,7 +900,8 @@ sub write_record_to_pipe { # Copy $buffer[0..$endpos] to $job->{'block'} # Remove rec_sep # Run $job->add_transfersize - $job->set_block($header_ref,$buffer_ref,$endpos,$recstart,$recend); + $job->set_block($header_ref, $buffer_ref, $endpos, + $recstart, $recend); if(fork()) { # Skip } else { @@ -908,7 +920,7 @@ sub write_record_to_pipe { substr($$buffer_ref,$endpos,length $$buffer_ref) = ""; # Remove rec_sep if($opt::remove_rec_sep) { - Job::remove_rec_sep($buffer_ref,$recstart,$recend); + Job::remove_rec_sep($buffer_ref, $recstart, $recend); } $job->write($header_ref); $job->write($buffer_ref); @@ -931,7 +943,8 @@ sub acquire_semaphore { # Returns: # The semaphore to be released when jobs is complete $Global::host{':'} = SSHLogin->new(":"); - my $sem = Semaphore->new($Semaphore::name,$Global::host{':'}->max_jobs_running()); + my $sem = Semaphore->new($Semaphore::name, + $Global::host{':'}->max_jobs_running()); $sem->acquire(); if($Semaphore::fg) { # skip @@ -974,7 +987,8 @@ sub options_hash { "group" => \$opt::group, "g" => \$opt::retired, "ungroup|u" => \$opt::ungroup, - "linebuffer|linebuffered|line-buffer|line-buffered|lb" => \$opt::linebuffer, + "linebuffer|linebuffered|line-buffer|line-buffered|lb" + => \$opt::linebuffer, "tmux" => \$opt::tmux, "tmuxpane" => \$opt::tmuxpane, "null|0" => \$opt::null, @@ -1001,8 +1015,10 @@ sub options_hash { "number-of-sockets" => \$opt::number_of_sockets, "number-of-cores" => \$opt::number_of_cores, "number-of-threads" => \$opt::number_of_threads, - "use-sockets-instead-of-threads" => \$opt::use_sockets_instead_of_threads, - "use-cores-instead-of-threads" => \$opt::use_cores_instead_of_threads, + "use-sockets-instead-of-threads" + => \$opt::use_sockets_instead_of_threads, + "use-cores-instead-of-threads" + => \$opt::use_cores_instead_of_threads, "use-cpus-instead-of-cores" => \$opt::use_cpus_instead_of_cores, "shellquote|shell_quote|shell-quote" => \$opt::shellquote, "nice=i" => \$opt::nice, @@ -1030,7 +1046,8 @@ sub options_hash { "rsync-opts|rsyncopts=s" => \$opt::rsync_opts, "tmpdir|tempdir=s" => \$opt::tmpdir, "use-compress-program|compress-program=s" => \$opt::compress_program, - "use-decompress-program|decompress-program=s" => \$opt::decompress_program, + "use-decompress-program|decompress-program=s" + => \$opt::decompress_program, "compress" => \$opt::compress, "tty" => \$opt::tty, "T" => \$opt::retired, @@ -1100,7 +1117,8 @@ sub options_hash { "wait" => \$opt::wait, # Shebang #!/usr/bin/parallel --shebang "shebang|hashbang" => \$opt::shebang, - "internal-pipe-means-argfiles" => \$opt::internal_pipe_means_argfiles, + "internal-pipe-means-argfiles" + => \$opt::internal_pipe_means_argfiles, "Y" => \$opt::retired, "skip-first-line" => \$opt::skip_first_line, "bug" => \$opt::bug, @@ -1449,8 +1467,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 +1572,11 @@ sub check_invalid_option_combinations { sub init_globals { # Defaults: +<<<<<<< HEAD $Global::version = 20180723; +======= + $Global::version = 20181124; +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -1904,7 +1926,7 @@ sub open_joblog { $/ = "\0"; } # Replace \0 with '\n' as used in print_joblog() - print $outfh map { s/\0/\n/g; $_,$/ } @group; + print $outfh map { s/\0/\n/g; $_,$/ } map { $_ } @group; seek $outfh, 0, 0; exit_if_disk_full(); # Set filehandle to -a @@ -2059,7 +2081,7 @@ sub read_options { # remove --hashbang if it is set $opt::shebang .= ($ARGV[0] =~ s/^--hashbang *//); if($opt::shebang) { - my $argfile = shell_quote_scalar(pop @ARGV); + my $argfile = Q(pop @ARGV); # exec myself to split $ARGV[0] into separate fields exec "$0 --skip-first-line -a $argfile @ARGV"; } @@ -2082,7 +2104,7 @@ sub read_options { } else { @options = shift @ARGV; } - my $script = shell_quote_scalar(shift @ARGV); + my $script = Q(shift @ARGV); # exec myself to split $ARGV[0] into separate fields exec "$0 --internal-pipe-means-argfiles @options @parser $script ". "::: @ARGV"; @@ -2365,6 +2387,7 @@ sub shell_quote_scalar { sub Q { # Q alias for ::shell_quote_scalar + no warnings 'redefine'; *Q = \&::shell_quote_scalar; return Q(@_); } @@ -2385,7 +2408,7 @@ sub shell_quote_file { $a = "./".$a; } } - return ::Q($a); + return Q($a); } sub shell_words { @@ -2667,7 +2690,6 @@ sub init_run_jobs { # Returns: # $jobs_started = number of jobs started my $jobs_started = 0; - my $jobs_started_this_round = 0; if($Global::start_no_new_jobs) { return $jobs_started; } @@ -2677,65 +2699,61 @@ sub init_run_jobs { changed_procs_file(); changed_sshloginfile(); } - do { - $jobs_started_this_round = 0; - # This will start 1 job on each --sshlogin (if possible) - # thus distribute the jobs on the --sshlogins round robin - for my $sshlogin (values %Global::host) { - if($Global::JobQueue->empty() and not $opt::pipe) { - # No more jobs in the queue - last; - } - debug("run", "Running jobs before on ", $sshlogin->string(), ": ", - $sshlogin->jobs_running(), "\n"); - if ($sshlogin->jobs_running() < $sshlogin->max_jobs_running()) { - if($opt::delay - and - $opt::delay > ::now() - $Global::newest_starttime) { - # It has been too short since last start - next; - } - if($opt::load and $sshlogin->loadavg_too_high()) { - # The load is too high or unknown - next; - } - if($opt::noswap and $sshlogin->swapping()) { - # The server is swapping - next; - } - if($opt::limit and $sshlogin->limit()) { - # Over limit - next; - } - if($opt::memfree and $sshlogin->memfree() < $opt::memfree) { - # The server has not enough mem free - ::debug("mem", "Not starting job: not enough mem\n"); - next; - } - if($sshlogin->too_fast_remote_login()) { - # It has been too short since - next; - } - debug("run", $sshlogin->string(), - " has ", $sshlogin->jobs_running(), - " out of ", $sshlogin->max_jobs_running(), - " jobs running. Start another.\n"); - if(start_another_job($sshlogin) == 0) { - # No more jobs to start on this $sshlogin - debug("run","No jobs started on ", - $sshlogin->string(), "\n"); - next; - } - $sshlogin->inc_jobs_running(); - $sshlogin->set_last_login_at(::now()); - $jobs_started++; - $jobs_started_this_round++; - } - debug("run","Running jobs after on ", $sshlogin->string(), ": ", - $sshlogin->jobs_running(), " of ", - $sshlogin->max_jobs_running(), "\n"); + # This will start 1 job on each --sshlogin (if possible) + # thus distribute the jobs on the --sshlogins round robin + for my $sshlogin (values %Global::host) { + if($Global::JobQueue->empty() and not $opt::pipe) { + # No more jobs in the queue + last; } - } while($jobs_started_this_round); + debug("run", "Running jobs before on ", $sshlogin->string(), ": ", + $sshlogin->jobs_running(), "\n"); + if ($sshlogin->jobs_running() < $sshlogin->max_jobs_running()) { + if($opt::delay + and + $opt::delay > ::now() - $Global::newest_starttime) { + # It has been too short since last start + next; + } + if($opt::load and $sshlogin->loadavg_too_high()) { + # The load is too high or unknown + next; + } + if($opt::noswap and $sshlogin->swapping()) { + # The server is swapping + next; + } + if($opt::limit and $sshlogin->limit()) { + # Over limit + next; + } + if($opt::memfree and $sshlogin->memfree() < $opt::memfree) { + # The server has not enough mem free + ::debug("mem", "Not starting job: not enough mem\n"); + next; + } + if($sshlogin->too_fast_remote_login()) { + # It has been too short since + next; + } + debug("run", $sshlogin->string(), + " has ", $sshlogin->jobs_running(), + " out of ", $sshlogin->max_jobs_running(), + " jobs running. Start another.\n"); + if(start_another_job($sshlogin) == 0) { + # No more jobs to start on this $sshlogin + debug("run","No jobs started on ", + $sshlogin->string(), "\n"); + next; + } + $sshlogin->inc_jobs_running(); + $sshlogin->set_last_login_at(::now()); + $jobs_started++; + } + debug("run","Running jobs after on ", $sshlogin->string(), ": ", + $sshlogin->jobs_running(), " of ", + $sshlogin->max_jobs_running(), "\n"); + } return $jobs_started; } @@ -2911,8 +2929,8 @@ sub drain_job_queue { } # * because of loadavg # * because of too little time between each ssh login. - start_more_jobs(); $sleep = ::reap_usleep($sleep); + start_more_jobs(); if($Global::max_jobs_running == 0) { ::warning("There are no job slots available. Increase --jobs."); } @@ -2920,6 +2938,7 @@ sub drain_job_queue { while($opt::sqlmaster and not $Global::sql->finished()) { # SQL master $sleep = ::reap_usleep($sleep); + start_more_jobs(); if($Global::start_sqlworker) { # Start an SQL worker as we are now sure there is work to do $Global::start_sqlworker = 0; @@ -3255,19 +3274,8 @@ sub get_job_with_sshlogin { return undef; } } - - my $clean_command = $job->replaced(); - if($clean_command =~ /^\s*$/) { - # Do not run empty lines - if(not $Global::JobQueue->empty()) { - return get_job_with_sshlogin($sshlogin); - } else { - return undef; - } - } $job->set_sshlogin($sshlogin); - if($opt::retries and $clean_command and - $job->failed_here()) { + if($opt::retries and $job->failed_here()) { # This command with these args failed for this sshlogin my ($no_of_failed_sshlogins,$min_failures) = $job->min_failed(); # Only look at the Global::host that have > 0 jobslots @@ -3779,7 +3787,7 @@ sub parallelized_host_filtering { my $cmd = "$0 -j0 --timeout 10 --joblog - --plain --delay 0.1 --retries 3 ". "--tag --tagstring '{1}' -0 --colsep '\t' -k eval '{2}' && true "; - $cmd = $Global::shell." -c ".::shell_quote_scalar($cmd); + $cmd = $Global::shell." -c ".Q($cmd); ::debug("init", $cmd, "\n"); my @out; my $prepend = ""; @@ -3908,16 +3916,16 @@ sub onall { ((defined $opt::timeout) ? "--timeout ".$opt::timeout : ""), ((defined $opt::ungroup) ? "-u" : ""), ((defined $opt::tee) ? "--tee" : ""), - ((defined $opt::workdir) ? "--wd ".::shell_quote_scalar($opt::workdir) : ""), - (@Global::transfer_files ? map { "--tf ".::shell_quote_scalar($_) } + ((defined $opt::workdir) ? "--wd ".Q($opt::workdir) : ""), + (@Global::transfer_files ? map { "--tf ".Q($_) } @Global::transfer_files : ""), - (@Global::ret_files ? map { "--return ".::shell_quote_scalar($_) } + (@Global::ret_files ? map { "--return ".Q($_) } @Global::ret_files : ""), - (@opt::env ? map { "--env ".::shell_quote_scalar($_) } @opt::env : ""), + (@opt::env ? map { "--env ".Q($_) } @opt::env : ""), (map { "-v" } @opt::v), ); ::debug("init", "| $0 $options\n"); - open(my $parallel_fh, "|-", "$0 --will-cite -j0 $options") || + open(my $parallel_fh, "|-", "$0 -0 --will-cite -j0 $options") || ::die_bug("This does not run GNU Parallel: $0 $options"); my @joblogs; for my $host (sort keys %Global::host) { @@ -3928,16 +3936,20 @@ sub onall { $joblog = "--joblog $joblog"; } my $quad = $opt::arg_file_sep || "::::"; - ::debug("init", "$0 $suboptions -j1 $joblog ", + # If PARALLEL_ENV is set: Pass it on + my $penv=$Global::parallel_env ? + "PARALLEL_ENV=".Q($Global::parallel_env) : + ''; + ::debug("init", "$penv $0 $suboptions -j1 $joblog ", ((defined $opt::tag) ? - "--tagstring ".shell_quote_scalar($sshlogin->string()) : ""), - " -S ", shell_quote_scalar($sshlogin->string())," ", + "--tagstring ".Q($sshlogin->string()) : ""), + " -S ", Q($sshlogin->string())," ", join(" ",shell_quote(@command))," $quad @argfiles\n"); - print $parallel_fh "$0 $suboptions -j1 $joblog ", + print $parallel_fh "$penv $0 $suboptions -j1 $joblog ", ((defined $opt::tag) ? - "--tagstring ".shell_quote_scalar($sshlogin->string()) : ""), - " -S ", shell_quote_scalar($sshlogin->string())," ", - join(" ",shell_quote(@command))," $quad @argfiles\n"; + "--tagstring ".Q($sshlogin->string()) : ""), + " -S ", Q($sshlogin->string())," ", + join(" ",shell_quote(@command))," $quad @argfiles\0"; } close $parallel_fh; $Global::exitstatus = $? >> 8; @@ -4044,89 +4056,95 @@ sub start_no_new_jobs { $Global::start_no_new_jobs ||= 1; } +sub reapers { + # Run reaper until there are no more left + # Returns: + # @pids_reaped = pids of reaped processes + my @pids_reaped; + my $pid; + while($pid = reaper()) { + push @pids_reaped, $pid; + } + return @pids_reaped; +} + sub reaper { - # A job finished. - # Print the output. - # Start another job + # A job finished: + # * Set exitstatus, exitsignal, endtime. + # * Free ressources for new job + # * Update median runtime + # * Print output + # * If --halt = now: Kill children + # * Print progress # Uses: - # %Global::sshmaster # %Global::running # $opt::timeout # $Global::timeoutq - # $opt::halt # $opt::keeporder # $Global::total_running # Returns: - # @pids_reaped = PIDs of children finished + # $stiff = PID of child finished my $stiff; - my @pids_reaped; - my $children_reaped = 0; debug("run", "Reaper "); - # For efficiency surround with BEGIN/COMMIT when using $opt::sqlmaster - $opt::sqlmaster and $Global::sql->run("BEGIN;"); - while (($stiff = waitpid(-1, &WNOHANG)) > 0) { - # $stiff = pid of dead process - if(wantarray) { - push(@pids_reaped,$stiff); - } else { - $children_reaped++; - } - if($Global::sshmaster{$stiff}) { - # This is one of the ssh -M: ignore - next; - } - my $job = $Global::running{$stiff}; + if(($stiff = waitpid(-1, &WNOHANG)) <= 0) { + # No jobs waiting to be reaped + return 0; + } - # '-a <(seq 10)' will give us a pid not in %Global::running - $job or next; - delete $Global::running{$stiff}; - $Global::total_running--; - if($job->{'commandline'}{'skip'}) { - # $job->skip() was called - $job->set_exitstatus(-2); - $job->set_exitsignal(0); - } else { - $job->set_exitstatus($? >> 8); - $job->set_exitsignal($? & 127); - } + # $stiff = pid of dead process + my $job = $Global::running{$stiff}; - debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")"); - $job->set_endtime(::now()); - my $sshlogin = $job->sshlogin(); - $sshlogin->dec_jobs_running(); - if($job->should_be_retried()) { - $job->free_ressources(); + # '-a <(seq 10)' will give us a pid not in %Global::running + # The same will one of the ssh -M: ignore + $job or return 0; + delete $Global::running{$stiff}; + $Global::total_running--; + if($job->{'commandline'}{'skip'}) { + # $job->skip() was called + $job->set_exitstatus(-2); + $job->set_exitsignal(0); + } else { + $job->set_exitstatus($? >> 8); + $job->set_exitsignal($? & 127); + } + + debug("run", "seq ",$job->seq()," died (", $job->exitstatus(), ")"); + $job->set_endtime(::now()); + my $sshlogin = $job->sshlogin(); + $sshlogin->dec_jobs_running(); + if($job->should_be_retried()) { + # Free up file handles + $job->free_ressources(); + } else { + # The job is done + $sshlogin->inc_jobs_completed(); + # Free the jobslot + $job->free_slot(); + if($opt::timeout and not $job->exitstatus()) { + # Update average runtime for timeout only for successful jobs + $Global::timeoutq->update_median_runtime($job->runtime()); + } + if($opt::keeporder) { + $job->print_earlier_jobs(); } else { - # The job is done - $sshlogin->inc_jobs_completed(); - # Free the jobslot - $job->free_slot(); - if($opt::timeout and not $job->exitstatus()) { - # Update average runtime for timeout only for successful jobs - $Global::timeoutq->update_median_runtime($job->runtime()); - } - if($opt::keeporder) { - $job->print_earlier_jobs(); - } else { - $job->print(); - } - if($job->should_we_halt() eq "now") { - # Kill children - ::kill_sleep_seq($job->pid()); - ::killall(); - ::wait_and_exit($Global::halt_exitstatus); - } - } - $job->cleanup(); - start_more_jobs(); - if($opt::progress) { - my %progress = progress(); - ::status_no_nl("\r",$progress{'status'}); + $job->print(); + } + if($job->should_we_halt() eq "now") { + # Kill children + ::kill_sleep_seq($job->pid()); + ::killall(); + ::wait_and_exit($Global::halt_exitstatus); } } - $opt::sqlmaster and $Global::sql->run("COMMIT;"); + $job->cleanup(); + + if($opt::progress) { + my %progress = progress(); + ::status_no_nl("\r",$progress{'status'}); + } + debug("run", "done "); - return wantarray ? @pids_reaped : $children_reaped; + return $stiff; } @@ -4135,8 +4153,11 @@ sub __USAGE__ {} sub killall { # Kill all jobs by killing their process groups - + # Uses: + # $Global::start_no_new_jobs = we are stopping + # $Global::killall = Flag to not run reaper $Global::start_no_new_jobs ||= 1; + # Do not reap killed children: Ignore them instead $Global::killall ||= 1; kill_sleep_seq(keys %Global::running); } @@ -4157,35 +4178,35 @@ sub kill_sleep_seq { } sub kill_sleep { + # Kill pids with a signal and wait a while for them to die + # Input: + # $signal = signal to send to @pids + # $sleep_max = number of ms to sleep at most before returning + # @pids = pids to kill (actually process groups) + # Uses: + # $Global::killall = set by killall() to avoid calling reaper + # Returns: + # @pids = pids still alive my ($signal, $sleep_max, @pids) = @_; ::debug("kill","kill_sleep $signal ",(join " ",sort @pids),"\n"); kill $signal, @pids; my $sleepsum = 0; my $sleep = 0.001; - my @dead; while(@pids and $sleepsum < $sleep_max) { if($Global::killall) { # Killall => don't run reaper - my $stiff; - while (($stiff = waitpid(-1, &WNOHANG)) > 0) { - # remove $stiff from @pids - @pids = grep { $_ != $stiff } @pids; + while(waitpid(-1, &WNOHANG) > 0) { $sleep = $sleep/2+0.001; } - } elsif(@dead = reaper()) { - # Remove reaped pids - for my $stiff (@dead) { - @pids = grep { $_ != $stiff } @pids; - } + } elsif(reapers()) { $sleep = $sleep/2+0.001; } - @pids = grep { kill( 0, $_) } @pids; $sleep *= 1.1; ::usleep($sleep); $sleepsum += $sleep; - # Remove dead children - @pids = grep { kill( 0, $_) } @pids; + # Keep only living children + @pids = grep { kill(0, $_) } @pids; } return @pids; } @@ -4200,7 +4221,7 @@ sub wait_and_exit { killall(); } for (keys %Global::unkilled_children) { - # Kill any (non-jobs) children + # Kill any (non-jobs) children (e.g. reserved processes) kill 9, $_; waitpid($_,0); delete $Global::unkilled_children{$_}; @@ -4360,17 +4381,17 @@ sub die_bug { sub version { # Returns: N/A - print join("\n", - "GNU $Global::progname $Global::version", - "Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,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.", - "GNU $Global::progname comes with no warranty.", - "", - "Web site: http://www.gnu.org/software/${Global::progname}\n", - "When using programs that use GNU Parallel to process data for publication", - "please cite as described in 'parallel --citation'.\n", + print join + ("\n", + "GNU $Global::progname $Global::version", + "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.", + "GNU $Global::progname comes with no warranty.", + "", + "Web site: http://www.gnu.org/software/${Global::progname}\n", + "When using programs that use GNU Parallel to process data for publication", + "please cite as described in 'parallel --citation'.\n", ); } @@ -4483,8 +4504,8 @@ sub embed { } print "#!$Global::shell -# Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016, -# 2017,2018 $user, Ole Tange and Free Software Foundation, Inc. +# Copyright (C) 2007-2018 $user, Ole Tange and Free Software +# Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -5016,9 +5037,10 @@ sub which { # Filter for SysV-style `ps` my $sysv = q( ps -ef | perl -ane '1..1 and /^(.*)CO?MM?A?N?D/ and $s=length $1;). q(s/^.{$s}//; print "@F[1,2] $_"' ); - # Crazy msys: ' is not accepted on the cmd line, but " are treated as ' - my $msys = q( ps -ef | perl -ane "1..1 and /^(.*)CO?MM?A?N?D/ and $s=length $1;). - q(s/^.{$s}//; print qq{@F[1,2] $_}" ); + # Minix uses cols 2,3 and can have newlines in the command + # so lines not having numbers in cols 2,3 must be ignored + my $minix = q( ps -ef | perl -ane '1..1 and /^(.*)CO?MM?A?N?D/ and $s=length $1;). + q(s/^.{$s}// and $F[2]>0 and $F[3]>0 and print "@F[2,3] $_"' ); # BSD-style `ps` my $bsd = q(ps -o pid,ppid,command -ax); %pid_parentpid_cmd = @@ -5034,7 +5056,8 @@ sub which { 'hpux' => $sysv, 'linux' => $sysv, 'mirbsd' => $bsd, - 'msys' => $msys, + 'minix' => $minix, + 'msys' => $sysv, 'MSWin32' => $sysv, 'netbsd' => $bsd, 'nto' => $sysv, @@ -5105,7 +5128,7 @@ sub reap_usleep { # $ms/2+0.001 if children reaped # $ms*1.1 if no children reaped my $ms = shift; - if(reaper()) { + if(reapers()) { if(not $Global::total_completed % 100) { if($opt::timeout) { # Force cleaning the timeout queue for every 1000 jobs @@ -5541,7 +5564,7 @@ sub memfree_recompute { $perlscript .= 'if($^O eq "'.$os.'") { '.$script_of{$os}.'}'; } $perlscript =~ s/[\t\n ]+/ /g; - $script = "perl -e " . ::shell_quote_scalar($perlscript); + $script = "perl -e " . ::Q($perlscript); } return $script; } @@ -5633,7 +5656,8 @@ sub swap_activity { # Should we update the swap_activity file? my $update_swap_activity_file = 0; if(-r $self->{'swap_activity_file'}) { - open(my $swap_fh, "<", $self->{'swap_activity_file'}) || ::die_bug("swap_activity_file-r"); + open(my $swap_fh, "<", $self->{'swap_activity_file'}) || + ::die_bug("swap_activity_file-r"); my $swap_out = <$swap_fh>; close $swap_fh; if($swap_out =~ /^(\d+)$/) { @@ -5660,7 +5684,7 @@ sub swap_activity { $swap_activity = swapactivityscript(); if($self->{'string'} ne ":") { $swap_activity = $self->sshcommand() . " " . $self->serverlogin() . " " . - ::shell_quote_scalar($swap_activity); + ::Q($swap_activity); } # Run swap_activity measuring. # As the command can take long to run if run remote @@ -5797,7 +5821,7 @@ sub swap_activity { $perlscript .= 'if($^O eq "'.$os.'") { print `'.$vmstat{$os}[0].' | awk "{print ' . $vmstat{$os}[1] . '}"` }'; } - $script = "perl -e " . ::shell_quote_scalar($perlscript); + $script = "perl -e " . ::Q($perlscript); } return $script; } @@ -5957,7 +5981,7 @@ sub loadavg { my $cmd = ""; if($self->{'string'} ne ":") { $cmd = $self->sshcommand() . " " . $self->serverlogin() . " " . - ::shell_quote_scalar(loadavg_cmd()); + ::Q(loadavg_cmd()); } else { $cmd .= loadavg_cmd(); } @@ -6115,8 +6139,8 @@ sub compute_number_of_processes { # The child takes one process slot # It will be killed later $SIG{'TERM'} = $Global::original_sig{'TERM'}; - if($^O eq "cygwin" or $^O eq "msys") { - # The exec does not work on Cygwin + if($^O eq "cygwin" or $^O eq "msys" or $^O eq "nto") { + # The exec does not work on Cygwin and QNX sleep 10101010; } else { # 'exec sleep' takes less RAM than sleeping in perl @@ -6164,6 +6188,8 @@ sub compute_number_of_processes { return 0; } else { $job = $Global::JobQueue->get(); + # Replacement must happen here due to seq() + $job and $job->replaced(); push(@jobs, $job); return 1; } @@ -6308,7 +6334,7 @@ sub simultaneous_sshlogin_limit { my $serverlogin = $self->serverlogin(); ::warning("ssh to $serverlogin only allows ". "for $ssh_limit simultaneous logins.", - "You may raise this by changing ". + "You may raise this by changing", "/etc/ssh/sshd_config:MaxStartups and MaxSessions on $serverlogin.", "You can also try --sshdelay 0.1", "Using only ".($ssh_limit-1)." connections ". @@ -6322,9 +6348,12 @@ sub simultaneous_sshlogin_limit { sub simultaneous_sshlogin { # Using $sshlogin try to see if we can do $wanted_processes # simultaneous logins - # (ssh host echo simultaneouslogin & ssh host echo simultaneouslogin & ...)|grep simul|wc -l + # (ssh host echo simul-login & ssh host echo simul-login & ...) | + # grep simul|wc -l + # Input: + # $wanted_processes = Try for this many logins in parallel # Returns: - # Number of succesful logins + # $ssh_limit = Number of succesful parallel logins local $/ = "\n"; my $self = shift; my $wanted_processes = shift; @@ -6332,7 +6361,8 @@ sub simultaneous_sshlogin { my $serverlogin = $self->serverlogin(); my $sshdelay = $opt::sshdelay ? "sleep $opt::sshdelay;" : ""; # TODO sh -c wrapper to work for csh - my $cmd = "$sshdelay$sshcmd $serverlogin -- echo simultaneouslogin &1 &"x$wanted_processes; + my $cmd = ("$sshdelay$sshcmd $serverlogin -- ". + "echo simultaneouslogin &1 &")x$wanted_processes; ::debug("init", "Trying $wanted_processes logins at $serverlogin\n"); open (my $simul_fh, "-|", "($cmd)|grep simultaneouslogin | wc -l") or ::die_bug("simultaneouslogin"); @@ -6349,8 +6379,10 @@ sub set_ncpus { sub user_requested_processes { # Parse the number of processes that the user asked for using -j + # Input: + # $opt_P = string formatted as for -P # Returns: - # the number of processes to run on this sshlogin + # $processes = the number of processes to run on this sshlogin my $self = shift; my $opt_P = shift; my $processes; @@ -6396,6 +6428,11 @@ sub user_requested_processes { } sub ncpus { + # Number of CPU threads + # --use_sockets_instead_of_threads = count socket instead + # --use_cores_instead_of_threads = count physical cores instead + # Returns: + # $ncpus = number of cpu (threads) on this sshlogin local $/ = "\n"; my $self = shift; if(not defined $self->{'ncpus'}) { @@ -6773,9 +6810,10 @@ sub sct_aix() { close $in_fh; } } - $cpu->{'sockets'} ||= $cpu->{'cores'}; if(grep { /\d/ } values %$cpu) { + # BUG It is not not known how to calculate this + $cpu->{'sockets'} = 1; return $cpu; } else { return undef; @@ -6792,10 +6830,13 @@ sub sct_hpux() { my $cpu; $cpu->{'cores'} = ::qqx(qq{ /usr/bin/mpsched -s 2>&1 | grep 'Locality Domain Count' | awk '{ print \$4 }'}); + chomp($cpu->{'cores'}); $cpu->{'threads'} = - ::qqx(qq{ /usr/bin/mpsched -s 2>&1 | perl -ne '/Processor Count\\D+(\\d+)/ and print "\$1\n"'}); + ::qqx(qq{ /usr/bin/mpsched -s 2>&1 | perl -ne '/Processor Count\\D+(\\d+)/ and print "\$1"'}); if(grep { /\d/ } values %$cpu) { + # BUG It is not not known how to calculate this + $cpu->{'sockets'} = 1; return $cpu; } else { return undef; @@ -6888,6 +6929,8 @@ sub sct_tru64() { } sub sshcommand { + # Returns: + # $sshcommand = the command (incl options) to run when using ssh my $self = shift; if (not defined $self->{'sshcommand'}) { $self->sshcommand_of_sshlogin(); @@ -6896,6 +6939,8 @@ sub sshcommand { } sub serverlogin { + # Returns: + # $sshcommand = the command (incl options) to run when using ssh my $self = shift; if (not defined $self->{'serverlogin'}) { $self->sshcommand_of_sshlogin(); @@ -6904,14 +6949,15 @@ sub serverlogin { } sub sshcommand_of_sshlogin { + # Compute ssh command and serverlogin from sshlogin # 'server' -> ('ssh -S /tmp/parallel-ssh-RANDOM/host-','server') # 'user@server' -> ('ssh','user@server') # 'myssh user@server' -> ('myssh','user@server') # 'myssh -l user server' -> ('myssh -l user','server') # '/usr/bin/myssh -l user server' -> ('/usr/bin/myssh -l user','server') - # Returns: - # sshcommand - defaults to 'ssh' - # login@host + # Sets: + # $self->{'sshcommand'} + # $self->{'serverlogin'} my $self = shift; my ($sshcmd, $serverlogin); # If $opt::ssh is unset, use $PARALLEL_SSH or 'ssh' @@ -6941,8 +6987,7 @@ sub sshcommand_of_sshlogin { open(STDIN,"<","/dev/null"); # Run a sleep that outputs data, so it will discover # if the ssh connection closes. - my $sleep = ::shell_quote_scalar - ('$|=1;while(1){sleep 1;print "foo\n"}'); + my $sleep = ::Q('$|=1;while(1){sleep 1;print "foo\n"}'); my @master = ($opt::ssh, "-MTS", $control_path, $serverlogin, "--", "perl", "-e", $sleep); @@ -6966,7 +7011,7 @@ sub sshcommand_of_sshlogin { sub control_path_dir { # Returns: - # path to directory + # $control_path_dir = dir of control path (for -M) my $self = shift; if(not defined $self->{'control_path_dir'}) { $self->{'control_path_dir'} = @@ -7004,7 +7049,7 @@ sub rsync_transfer_cmd { $file = ::shell_quote_file($file); my $sshcmd = $self->sshcommand(); my $rsync_opts = $ENV{'PARALLEL_RSYNC_OPTS'}. - " -e".::shell_quote_scalar($sshcmd); + " -e".::Q($sshcmd); my $serverlogin = $self->serverlogin(); # Make dir if it does not exist return "$sshcmd $serverlogin -- mkdir -p $rsync_destdir && " . @@ -7037,15 +7082,15 @@ sub cleanup_cmd { $dir .= $_."/"; unshift @rmdir, ::shell_quote_file($dir); } - my $rmdir = @rmdir ? "sh -c ".::shell_quote_scalar("rmdir @rmdir 2>/dev/null;") : ""; + my $rmdir = @rmdir ? "sh -c ".::Q("rmdir @rmdir 2>/dev/null;") : ""; if(defined $opt::workdir and $opt::workdir eq "...") { - $rmdir .= ::shell_quote_scalar("rm -rf " . ::shell_quote_file($workdir).';'); + $rmdir .= ::Q("rm -rf " . ::shell_quote_file($workdir).';'); } $f = ::shell_quote_file($f); my $sshcmd = $self->sshcommand(); my $serverlogin = $self->serverlogin(); - return "$sshcmd $serverlogin -- ".::shell_quote_scalar("rm -f $f; $rmdir"); + return "$sshcmd $serverlogin -- ".::Q("rm -f $f; $rmdir"); } { @@ -7054,6 +7099,8 @@ sub cleanup_cmd { sub rsync { # rsync 3.1.x uses protocol 31 which is unsupported by 2.5.7. # If the version >= 3.1.0: downgrade to protocol 30 + # Returns: + # $rsync = "rsync" or "rsync --protocol 30" if(not $rsync) { my @out = `rsync --version`; for (@out) { @@ -7120,8 +7167,8 @@ sub unget { sub empty { my $self = shift; - my $empty = (not @{$self->{'unget'}}) - && $self->{'commandlinequeue'}->empty(); + my $empty = (not @{$self->{'unget'}}) && + $self->{'commandlinequeue'}->empty(); ::debug("run", "JobQueue->empty $empty "); return $empty; } @@ -7154,7 +7201,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); @@ -7490,7 +7537,7 @@ sub grouped { open(my $fdr,"<", $self->fh($fdno,'name')) || ::die_bug("fdr: Cannot open ".$self->fh($fdno,'name')); $self->set_fh($fdno,'r',$fdr); - # Unlink if required + # Unlink if not debugging $Global::debug or ::rm($self->fh($fdno,"unlink")); } } @@ -7520,7 +7567,7 @@ sub empty_input_wrapper { exit ($?&127 ? 128+($?&127) : 1+$?>>8) } }); - ::debug("run",'Empty wrap: perl -e '.::shell_quote_scalar($script)."\n"); + ::debug("run",'Empty wrap: perl -e '.::Q($script)."\n"); if($Global::cshell and length $command > 499) { @@ -7528,12 +7575,12 @@ sub empty_input_wrapper { # $command = "perl -e '".base64_zip_eval()."' ". # join" ",string_zip_base64( # 'exec "'.::perl_quote_scalar($command).'"'); - return 'perl -e '.::shell_quote_scalar($script)." ". + return 'perl -e '.::Q($script)." ". base64_wrap("exec \"$Global::shell\",'-c',\"". ::perl_quote_scalar($command).'"'); } else { - return 'perl -e '.::shell_quote_scalar($script)." ". - $Global::shell." -c ".::shell_quote_scalar($command); + return 'perl -e '.::Q($script)." ". + $Global::shell." -c ".::Q($command); } } @@ -7920,7 +7967,7 @@ sub wrapped { # Prepend /bin/echo (echo no-/bin is wrong in csh) # and quote twice $command = "/bin/echo " . - ::shell_quote_scalar(::shell_quote_scalar($command)); + ::Q(::Q($command)); } if($Global::parallel_env) { # If $PARALLEL_ENV set, put that in front of the command @@ -7928,7 +7975,7 @@ sub wrapped { if($Global::shell =~ /zsh/) { # The extra 'eval' will make aliases work, too $command = $Global::parallel_env."\n". - "eval ".::shell_quote_scalar($command); + "eval ".::Q($command); } else { $command = $Global::parallel_env."\n".$command; } @@ -7945,7 +7992,7 @@ sub wrapped { $command = 'cat > $PARALLEL_TMP;'. $command.";". postpone_exit_and_cleanup(). - '$PARALLEL_TMP'; + '$PARALLEL_TMP'; } elsif($opt::fifo) { # Prepend fifo-wrapper. In essence: # mkfifo {} @@ -7955,10 +8002,7 @@ sub wrapped { # wait; rm {} # without affecting $? $command = fifo_wrap(). " ". - $Global::shell. " ". - ::shell_quote_scalar($command). - ' $PARALLEL_TMP'. - ';'; + $Global::shell. " ". ::Q($command). ' $PARALLEL_TMP'. ';'; } # Wrap with ssh + tranferring of files $command = $self->sshlogin_wrap($command); @@ -8290,7 +8334,7 @@ sub sshlogin_wrap { my $self = shift; my $command = shift; # TODO test that *sh -c 'parallel --env' use *sh - if(not defined $self->{'sshlogin_wrap'}) { + if(not defined $self->{'sshlogin_wrap'}{$command}) { my $sshlogin = $self->sshlogin(); my $serverlogin = $sshlogin->serverlogin(); my $quoted_remote_command; @@ -8322,12 +8366,16 @@ sub sshlogin_wrap { $command =~ /\n/) { # csh does not deal well with > 1000 chars in one word # csh does not deal well with $ENV with \n - $self->{'sshlogin_wrap'} = base64_wrap($perl_code); + $self->{'sshlogin_wrap'}{$command} = base64_wrap($perl_code); } else { +<<<<<<< HEAD $self->{'sshlogin_wrap'} = "perl -e ".::Q($perl_code); +======= + $self->{'sshlogin_wrap'}{$command} = "perl -e ".::Q($perl_code); +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 } } else { - $self->{'sshlogin_wrap'} = $command; + $self->{'sshlogin_wrap'}{$command} = $command; } } else { my $pwd = ""; @@ -8340,7 +8388,12 @@ sub sshlogin_wrap { } my ($csh_friendly,$envset,$bashfuncset) = env_as_eval(); my $remote_command = $pwd.$envset.$bashfuncset. +<<<<<<< HEAD '@ARGV="'.::pQ($command).'";'. monitor_parent_sshd_script(); +======= + '@ARGV="'.::perl_quote_scalar($command).'";'. + monitor_parent_sshd_script(); +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 $quoted_remote_command = "perl -e ". ::Q($remote_command); my $dq_remote_command = ::Q($quoted_remote_command); if(length $dq_remote_command > 999 @@ -8352,7 +8405,11 @@ sub sshlogin_wrap { # csh does not deal well with $ENV with \n $quoted_remote_command = "perl -e ". ::Q(::Q(base64_zip_eval()))." ". +<<<<<<< HEAD join" ", ::shell_quote(::shell_quote(string_zip_base64($remote_command))); +======= + join" ",::shell_quote(::shell_quote(string_zip_base64($remote_command))); +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 } else { $quoted_remote_command = $dq_remote_command; } @@ -8369,7 +8426,7 @@ sub sshlogin_wrap { # We need to save the exit status of the job $post = '_EXIT_status=$?; ' . $post . ' exit $_EXIT_status;'; } - $self->{'sshlogin_wrap'} = + $self->{'sshlogin_wrap'}{$command} = ($pre . "$sshcmd $serverlogin -- exec " . $quoted_remote_command @@ -8377,7 +8434,7 @@ sub sshlogin_wrap { . $post); } } - return $self->{'sshlogin_wrap'}; + return $self->{'sshlogin_wrap'}{$command}; } sub transfer { @@ -8466,7 +8523,11 @@ sub sshreturn { my $sshlogin = $self->sshlogin(); my $sshcmd = $sshlogin->sshcommand(); my $serverlogin = $sshlogin->serverlogin(); +<<<<<<< HEAD my $rsync_opts = $ENV{'PARALLEL_RSYNC_OPTS'}." -e".::Q($sshcmd); +======= + my $rsync_opts = $ENV{'PARALLEL_RSYNC_OPTS'}. " -e". ::Q($sshcmd); +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 my $pre = ""; for my $file ($self->return()) { # Remove ./ if any @@ -8491,8 +8552,12 @@ sub sshreturn { $nobasedir =~ s:.*/\./::; $cd = ::shell_quote_file(::dirname($nobasedir)); my $rsync_cd = '--rsync-path='.::Q("cd $wd$cd; rsync"); +<<<<<<< HEAD my $basename = ::shell_quote_scalar(::shell_quote_file(::basename($file))); +======= + my $basename = ::Q(::shell_quote_file(::basename($file))); +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 # --return # mkdir -p /home/tange/dir/subdir/; # rsync (--protocol 30) -rlDzR @@ -8893,7 +8958,7 @@ sub interactive_start { return "mkfifo $tmpfifo && $tmux ". # Run in tmux - ::shell_quote_scalar + ::Q ( "(".$actual_command.');'. # The triple print is needed - otherwise the testsuite fails @@ -9975,6 +10040,10 @@ sub len { $self->{'replacecount'}{$replstring}; } } + if(defined $Global::parallel_env) { + # If we are using --env, add the prefix for that, too. + $len += length $Global::parallel_env; + } if($Global::quoting) { # Pessimistic length if -q is set # Worse than worst case: every char needs to be quoted with \ @@ -9985,8 +10054,12 @@ sub len { # Worse than worst case: every char needs to be quoted with \ twice $len *= 4; } - # If we are using --env, add the prefix for that, too. - $len += 0; + if(@opt::sshlogin) { + # Pessimistic length if remote + # Worst case is BASE64 encoding 3 bytes -> 4 bytes + $len = int($len*4/3); + } + return $len; } @@ -10019,12 +10092,12 @@ sub replaced { sub replace_placeholders { # Replace foo{}bar with fooargbar - # Uses: - # @Arg::arg = arguments as strings to be use in {= =} # Input: # $targetref = command as shell words # $quote = should everything be quoted? # $quote_arg = should replaced arguments be quoted? + # Uses: + # @Arg::arg = arguments as strings to be use in {= =} # Returns: # @target with placeholders replaced my $self = shift; @@ -10125,7 +10198,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; @@ -10190,7 +10263,7 @@ sub replace_placeholders { if($_ eq "\0spc" or $_ eq "\0end") { # \0spc splits quotable groups if($quote) { - CORE::push @quoted, ::shell_quote_scalar(join"",@quotegroup); + CORE::push @quoted, ::Q(join"",@quotegroup); } else { CORE::push @quoted, join"",@quotegroup; } @@ -10534,14 +10607,9 @@ sub get { "(e.g. 'cat')."); ::wait_and_exit(255); } - } else { - if($cmd_line->number_of_args() == 0) { - # We did not get more args - maybe at EOF string? - return undef; - } elsif($cmd_line->replaced() eq "") { - # Empty command - get the next instead - return $self->get(); - } + } elsif($cmd_line->number_of_args() == 0) { + # We did not get more args - maybe at EOF string? + return undef; } $self->set_seq($self->seq()+1); return $cmd_line; @@ -10555,7 +10623,8 @@ sub unget { sub empty { my $self = shift; - my $empty = (not @{$self->{'unget'}}) && $self->{'arg_queue'}->empty(); + my $empty = (not @{$self->{'unget'}}) && + $self->{'arg_queue'}->empty(); ::debug("run", "CommandLineQueue->empty $empty"); return $empty; } @@ -10776,8 +10845,8 @@ sub unget { sub empty { my $self = shift; - my $empty = not @{$self->{'unget'}}; - $empty &&= $self->{'arg_sub_queue'}->empty(); + my $empty = (not @{$self->{'unget'}}) && + $self->{'arg_sub_queue'}->empty(); ::debug("run", "RecordQueue->empty $empty"); return $empty; } @@ -10852,8 +10921,8 @@ sub unget { sub empty { my $self = shift; - my $empty = (not @{$self->{'unget'}} and - $self->{'arg_sub_queue'}->empty()); + my $empty = (not @{$self->{'unget'}}) && + $self->{'arg_sub_queue'}->empty(); ::debug("run", "RecordColQueue->empty $empty"); return $empty; } @@ -10938,8 +11007,8 @@ sub unget { sub empty { my $self = shift; - my $empty = (not @Global::unget_argv - and not @{$self->{'unget'}}); + my $empty = (not @Global::unget_argv) && + not @{$self->{'unget'}}; for my $fh (@{$self->{'fhs'}}) { $empty &&= eof($fh); } @@ -11199,10 +11268,9 @@ sub new { sub Q { # Q alias for ::shell_quote_scalar - # Run shell_quote_scalar once to set the reference to the sub - my $a = ::shell_quote_scalar(@_); + no warnings 'redefine'; *Q = \&::shell_quote_scalar; - return $a; + return Q(@_); } sub pQ { @@ -11271,7 +11339,7 @@ sub total_jobs { $self->{'cache'}{$perlexpr} = $_; } # Return the value quoted if needed - return($quote ? ::shell_quote_scalar($self->{'cache'}{$perlexpr}) + return($quote ? Q($self->{'cache'}{$perlexpr}) : $self->{'cache'}{$perlexpr}); } } diff --git a/src/parallel.pod b/src/parallel.pod index c745f987..e9f28e4f 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -4,21 +4,23 @@ =head1 NAME -parallel - build and execute shell command lines from standard input in parallel +parallel - build and execute shell command lines from standard input +in parallel =head1 SYNOPSIS B [options] [I [arguments]] < list_of_arguments -B [options] [I [arguments]] ( B<:::> arguments | B<:::+> arguments | -B<::::> argfile(s) | B<::::+> argfile(s) ) ... +B [options] [I [arguments]] ( B<:::> arguments | +B<:::+> arguments | B<::::> argfile(s) | B<::::+> argfile(s) ) ... B --semaphore [options] I B<#!/usr/bin/parallel> --shebang [options] [I [arguments]] -B<#!/usr/bin/parallel> --shebang-wrap [options] [I [arguments]] +B<#!/usr/bin/parallel> --shebang-wrap [options] [I +[arguments]] =head1 DESCRIPTION @@ -118,7 +120,7 @@ replacement string; then the string is not quoted. Input line without extension. This replacement string will be replaced by the input with the extension removed. If the input line contains -B<.> after the last B the last B<.> till the end of the string will +B<.> after the last B, the last B<.> until the end of the string will be removed and B<{.}> will be replaced with the remaining. E.g. I becomes I, I becomes I, I becomes I, @@ -659,7 +661,7 @@ equivalent: B<--delay 100000> and B<--delay 1d3.5h16.6m4s>. Print the job to run on stdout (standard output), but do not run the job. Use B<-v -v> to include the wrapping that GNU Parallel generates (for remote jobs, B<--tmux>, B<--nice>, B<--pipe>, B<--pipepart>, -B<--fifo> and B<--cat>). Do not count on this literaly, though, as the +B<--fifo> and B<--cat>). Do not count on this literally, though, as the job may be scheduled on another computer or the local computer if : is in the list. @@ -773,7 +775,7 @@ may not be used. B<--gnu> is kept for compatibility. =item B<--group> Group output. Output from each job is grouped together and is only -printed when the command is finished. stdout (standard output) first +printed when the command is finished. Stdout (standard output) first followed by stderr (standard error). This takes in the order of 0.5ms per job and depends on the speed of @@ -855,7 +857,7 @@ exit when 3% of the jobs have finished. Kill running jobs. =back -For backwards compability these also work: +For backwards compatibility these also work: =over 12 @@ -1458,20 +1460,32 @@ on remote computers). Print the number of physical CPU cores and exit. +<<<<<<< HEAD =item B<--number-of-cores> (beta testing) +======= +=item B<--number-of-cores> +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 Print the number of physical CPU cores and exit (used by GNU B itself to determine the number of physical CPU cores on remote computers). +<<<<<<< HEAD =item B<--number-of-sockets> (beta testing) +======= +=item B<--number-of-sockets> +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 Print the number of filled CPU sockets and exit (used by GNU B itself to determine the number of filled CPU sockets on remote computers). +<<<<<<< HEAD =item B<--number-of-threads> (beta testing) +======= +=item B<--number-of-threads> +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 Print the number of hyperthreaded CPU cores and exit (used by GNU B itself to determine the number of hyperthreaded CPU cores @@ -2363,6 +2377,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> @@ -2571,9 +2590,15 @@ Use the replacement string I instead of B<{.}> for input line without extension. +<<<<<<< HEAD =item B<--use-sockets-instead-of-threads> (beta testing) =item B<--use-cores-instead-of-threads> (beta testing) +======= +=item B<--use-sockets-instead-of-threads> + +=item B<--use-cores-instead-of-threads> +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 =item B<--use-cpus-instead-of-cores> (obsolete) @@ -3053,12 +3078,20 @@ 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 -=head1 EXAMPLE: Digtal clock with "blinking" : +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" : The : in a digital clock blinks. To make every other line have a ':' and the rest a ' ' a perl expression is used to look at the 3rd input -source. If the value modudo 2 is 1: Use ":" otherwise use " ": +source. If the value modulo 2 is 1: Use ":" otherwise use " ": parallel -k echo {1}'{=3 $_=$_%2?":":" "=}'{2}{3} \ ::: {0..12} ::: {0..5} ::: {0..9} @@ -4862,9 +4895,9 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing. Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk -Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk +Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange, +Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc. Parts of the manual concerning B compatibility is inspired by @@ -4873,9 +4906,7 @@ the manual of B from GNU findutils 4.4.2. =head1 LICENSE -Copyright (C) -2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018 Free -Software Foundation, Inc. +Copyright (C) 2007-2018 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/parallel_alternatives.pod b/src/parallel_alternatives.pod index 617b6972..2f1cfcc3 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: @@ -205,7 +215,7 @@ composed commands and redirection require using B. ls | parallel "wc {} >{}.wc" ls | parallel "echo {}; ls {}|wc" -becomes (assuming you have 8 cores and that none of the file names +becomes (assuming you have 8 cores and that none of the filenames contain space, " or '). ls | xargs -d "\n" -P8 -I {} bash -c "wc {} >{}.wc" @@ -216,9 +226,9 @@ https://www.gnu.org/software/findutils/ =head2 DIFFERENCES BETWEEN find -exec AND GNU Parallel -B offer some of the same possibilities as GNU B. +B offers some of the same possibilities as GNU B. -B only works on files. So processing other input (such as +B only works on files. Processing other input (such as hosts or URLs) will require creating these inputs as files. B has no support for running commands in parallel. @@ -228,13 +238,13 @@ https://www.gnu.org/software/findutils/ =head2 DIFFERENCES BETWEEN make -j AND GNU Parallel B can run jobs in parallel, but requires a crafted Makefile -to do this. That results in extra quoting to get filename containing -newline to work correctly. +to do this. That results in extra quoting to get filenames containing +newlines to work correctly. B computes a dependency graph before running jobs. Jobs run -by GNU B does not depend on eachother. +by GNU B does not depend on each other. -(Very early versions of GNU B were coincidently implemented +(Very early versions of GNU B were coincidentally implemented using B). https://www.gnu.org/software/make/ @@ -250,10 +260,10 @@ into files. The argument replace string ($ITEM) cannot be changed. Arguments must be quoted - thus arguments containing special characters (space '"&!*) -may cause problems. More than one argument is not supported. File -names containing newlines are not processed correctly. When reading -input from a file null cannot be used as a terminator. B needs -to read the whole input file before starting any jobs. +may cause problems. More than one argument is not supported. Filenames +containing newlines are not processed correctly. When reading input +from a file null cannot be used as a terminator. B needs to read +the whole input file before starting any jobs. Output and status information is stored in ppss_dir and thus requires cleanup when completed. If the dir is not removed before running @@ -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 @@ -615,7 +626,7 @@ https://github.com/cheusov/paexec B sees it as a feature to have less features and in doing so it also handles corner cases incorrectly. A lot of GNU B's code is to handle corner cases correctly on every platform, so you will not -get a nasty surprise if a user for example saves a file called: I B's example showing how to deal with special characters fails on @@ -624,17 +635,20 @@ special characters: echo "The Cure" > My\ brother\'s\ 12\"\ records ls | \ - map 'echo -n `gzip < "%" | wc -c`; echo -n '*100/'; wc -c < "%"' | bc + map 'echo -n `gzip < "%" | wc -c`; echo -n '*100/'; wc -c < "%"' | + bc It works with GNU B: ls | \ - parallel 'echo -n `gzip < {} | wc -c`; echo -n '*100/'; wc -c < {}' | bc + parallel \ + 'echo -n `gzip < {} | wc -c`; echo -n '*100/'; wc -c < {}' | bc And you can even get the file name prepended: ls | \ - parallel --tag '(echo -n `gzip < {} | wc -c`'*100/'; wc -c < {}) | bc' + parallel --tag \ + '(echo -n `gzip < {} | wc -c`'*100/'; wc -c < {}) | bc' B has no support for grouping. So this gives the wrong results without any warnings: @@ -655,23 +669,22 @@ completely for certain jobs (and may even be considered less readable): parallel echo -n {} ::: 1 2 3 - map -p 4 'echo -n % 2>&1 | sed -e "s/^/$$:/"' 1 2 3 | sort | cut -f2- -d: + map -p 4 'echo -n % 2>&1 | sed -e "s/^/$$:/"' 1 2 3 | \ + sort | cut -f2- -d: Bs replacement strings (% %D %B %E) can be simulated in GNU B by putting this in B<~/.parallel/config>: --rpl '%' - --rpl '%D $_=::shell_quote(::dirname($_));' + --rpl '%D $_=Q(::dirname($_));' --rpl '%B s:.*/::;s:\.[^/.]+$::;' --rpl '%E s:.*\.::' -B cannot handle bundled options: B - B does not have an argument separator on the command line, but uses the first argument as command. This makes quoting harder which again may affect readability. Compare: - map -p 2 perl\\\ -ne\\\ \\\'/^\\\\S+\\\\s+\\\\S+\\\$/\\\ and\\\ print\\\ \\\$ARGV,\\\"\\\\n\\\"\\\' * + map -p 2 'perl -ne '"'"'/^\S+\s+\S+$/ and print $ARGV,"\n"'"'" * parallel -q perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ::: * @@ -680,16 +693,11 @@ context replace: parallel --xargs echo 'BEGIN{'{}'}END' ::: 1 2 3 -B does not set exit value according to whether one of the jobs -failed: - - parallel false ::: 1 || echo Job failed - - map false 1 || echo Never run + map "echo 'BEGIN{'%'}END'" 1 2 3 B requires Perl v5.10.0 making it harder to use on old systems. -B has no way of using % in the command (GNU Parallel has -I to +B has no way of using % in the command (GNU B has -I to specify another replacement string than B<{}>). By design B is option incompatible with B, it does not @@ -710,18 +718,23 @@ B only works on files and the only way to specify files is using a quoted glob string (such as \*.jpg). It is not possible to list the files manually. -As replacement strings it uses FULLPATH DIRNAME BASENAME EXT RELDIR RELPATH +As replacement strings it uses FULLPATH DIRNAME BASENAME EXT RELDIR +RELPATH -These can be simulated using GNU B by putting this in B<~/.parallel/config>: +These can be simulated using GNU B by putting this in +B<~/.parallel/config>: - --rpl 'FULLPATH $_=::shell_quote($_);chomp($_=qx{readlink -f $_});' - --rpl 'DIRNAME $_=::shell_quote(::dirname($_));chomp($_=qx{readlink -f $_});' + --rpl 'FULLPATH $_=Q($_);chomp($_=qx{readlink -f $_});' + --rpl 'DIRNAME $_=Q(::dirname($_));chomp($_=qx{readlink -f $_});' --rpl 'BASENAME s:.*/::;s:\.[^/.]+$::;' --rpl 'EXT s:.*\.::' - --rpl 'RELDIR $_=::shell_quote($_);chomp(($_,$c)=qx{readlink -f $_;pwd});s:\Q$c/\E::;$_=::dirname($_);' - --rpl 'RELPATH $_=::shell_quote($_);chomp(($_,$c)=qx{readlink -f $_;pwd});s:\Q$c/\E::;' + --rpl 'RELDIR $_=Q($_);chomp(($_,$c)=qx{readlink -f $_;pwd}); + s:\Q$c/\E::;$_=::dirname($_);' + --rpl 'RELPATH $_=Q($_);chomp(($_,$c)=qx{readlink -f $_;pwd}); + s:\Q$c/\E::;' -B deals badly with filenames containing " and newline, and it fails for output larger than 200k: +B deals badly with filenames containing " and newline, and it +fails for output larger than 200k: ladon '*' -- seq 36000 | wc @@ -755,17 +768,23 @@ B can run multiple jobs in parallel. Just like B output from B jobs running in parallel mix together by default. B can buffer into files (placed in -/run/shm), but these are not cleaned up - not even if B dies -unexpectently. If the total output is big (in the order of RAM+swap) -it can cause the system to run out of memory. +/run/shm), but these are not cleaned up if B dies +unexpectedly (e.g. by Ctrl-C). If the total output is big (in the +order of RAM+swap) it can cause the system to slow to a crawl and +eventually run out of memory. B gives no error if the command is unknown, and like B -redirection requires wrapping with B. +redirection and composed commands require wrapping with B. + +Input lines can at most be 4096 bytes. You can at most have 16 {}'s in +the command template. More than that either crashes the program or +simple does not execute the command. + +B has no equivalent for B<--pipe>, or B<--sshlogin>. B makes it possible to set resource limits on the running jobs. This can be emulated by GNU B using B's B: - jobflow -limits=mem=100M,cpu=3,fsize=20M,nofiles=300 myjob parallel 'ulimit -v 102400 -t 3 -f 204800 -n 300 myjob' @@ -832,7 +851,7 @@ setting SSHPASS and by using B<--ssh "sshpass ssh">. To make the emulation easier, make a simple alias: - alias par_emul="parallel -j0 --ssh 'sshpass ssh' --nonall --tag --linebuffer" + alias par_emul="parallel -j0 --ssh 'sshpass ssh' --nonall --tag --lb" If you want to supply a password run: @@ -850,8 +869,10 @@ If the above is set up you can then do: orgalorg -o frontend1 -o frontend2 -p -C top -bid 1 par_emul -S frontend1 -S frontend2 top -bid 1 - orgalorg -o frontend1 -o frontend2 -p -er /tmp -n 'md5sum /tmp/bigfile' -S bigfile - par_emul -S frontend1 -S frontend2 --basefile bigfile --workdir /tmp md5sum /tmp/bigfile + orgalorg -o frontend1 -o frontend2 -p -er /tmp -n \ + 'md5sum /tmp/bigfile' -S bigfile + par_emul -S frontend1 -S frontend2 --basefile bigfile --workdir /tmp \ + md5sum /tmp/bigfile B has a progress indicator for the transferring of a file. GNU B does not. @@ -865,8 +886,6 @@ Rust parallel focuses on speed. It is almost as fast as B. It implements a few features from GNU B, but lacks many functions. All these fail: - # Show what would be executed - parallel --dry-run echo ::: a # Read arguments from file parallel -a file echo # Changing the delimiter @@ -874,8 +893,6 @@ functions. All these fail: These do something different from GNU B - # Read more arguments at a time -n - parallel -n 2 echo ::: 1 a 2 b # -q to protect quoted $ and space parallel -q perl -e '$a=shift; print "$a"x10000000' ::: a b c # Generation of combination of inputs @@ -885,7 +902,7 @@ These do something different from GNU B # --pipe seq 100000 | parallel --pipe wc # linked arguments - parallel echo ::: S M L :::+ small medium large ::: R G B :::+ red green blue + parallel echo ::: S M L :::+ sml med lrg ::: R G B :::+ red grn blu # Run different shell dialects zsh -c 'parallel echo \={} ::: zsh && true' csh -c 'parallel echo \$\{\} ::: shell && true' @@ -894,15 +911,26 @@ 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 -terminated abrubtly. If another user on the system uses Rust parallel, +terminated abruptly. If another user on the system uses Rust parallel, then /tmp/parallel will have the wrong permissions and Rust parallel will fail. A malicious user can setup the right permissions and symlink the output file to one of the user's files and next time the user uses Rust parallel it will overwrite this file. + attacker$ mkdir /tmp/parallel + attacker$ chmod a+rwX /tmp/parallel + # Symlink to the file the attacker wants to zero out + attacker$ ln -s ~victim/.important-file /tmp/parallel/stderr_1 + victim$ seq 1000 | parallel echo + # This file is now overwritten with stderr from 'echo' + victim$ cat ~victim/.important-file + If /tmp/parallel runs full during the run, Rust parallel does not report this, but finishes with success - thereby risking data loss. @@ -1112,7 +1140,7 @@ B<15. Interrupt jobs by `Ctrl-C`, rush will stop unfinished commands and exit.> ^C B<16. Continue/resume jobs (`-c`). When some jobs failed (by -execution failure, timeout, or cancelling by user with `Ctrl + C`), +execution failure, timeout, or canceling by user with `Ctrl + C`), please switch flag `-c/--continue` on and run again, so that `rush` can save successful commands and ignore them in I run.> @@ -1144,7 +1172,7 @@ Multi-line jobs: B<17. A comprehensive example: downloading 1K+ pages given by three URL list files using `phantomjs save_page.js` (some page -contents are dynamicly generated by Javascript, so `wget` does not +contents are dynamically generated by Javascript, so `wget` does not work). Here I set max jobs number (`-j`) as `20`, each job has a max running time (`-t`) of `60` seconds and `3` retry changes (`-r`). Continue flag `-c` is also switched on, so we can continue @@ -1286,7 +1314,8 @@ E.g. With GNU B this can be emulated by: - echo foosuffix | parallel --plus 'p={%suffix}; echo ${p}_new_suffix' + echo foosuffix | + parallel --plus 'p={%suffix}; echo ${p}_new_suffix' Opposite B GNU B works fine if the input contains double space, ' and ": @@ -1298,7 +1327,7 @@ double space, ' and ": =item * Commands of multi-lines While you I use multi-lined commands in GNU B, to -improve readibilty GNU B discourages the use of multi-line +improve readability GNU B discourages the use of multi-line commands. In most cases it can be written as a function: seq 1 3 | @@ -1376,7 +1405,7 @@ It can be emulated with GNU B using this Bash function: parallel $(_cmds "$@")'|| echo exit status $?' ::: */ } -This works execpt for the B<--exclude> option. +This works except for the B<--exclude> option. =head2 DIFFERENCES BETWEEN pyargs AND GNU Parallel @@ -1432,7 +1461,7 @@ The output is prepended with the job number, and may be incomplete: 7165 When pretty printing it caches output in memory. Output mixes by using -test MIX below wether or not output is cached. +test MIX below whether or not output is cached. There seems to be no way of making a template command and have B fill that with different args. The full commands must @@ -1457,7 +1486,7 @@ B itself, the output also mixes: seq 10 | map i 'echo start-$i && sleep 0.$i && echo end-$i &' -The major difference is that GNU B is build for parallelization +The major difference is that GNU B is built for parallelization and map is not. So GNU B has lots of ways of dealing with the issues that parallelization raises: @@ -1490,7 +1519,7 @@ Here are the 5 examples converted to GNU Parallel: 4$ printf "1\n1\n1\n" | map t 'sleep $t && say done' 4$ printf "1\n1\n1\n" | parallel 'sleep {} && say done' - 4$ paralllel 'sleep {} && say done' ::: 1 1 1 + 4$ parallel 'sleep {} && say done' ::: 1 1 1 5$ printf "1\n1\n1\n" | map t 'sleep $t && say done &' 5$ printf "1\n1\n1\n" | parallel -j0 'sleep {} && say done' @@ -1499,11 +1528,211 @@ 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 DIFFERENCES BETWEEN spp AND GNU Parallel + +B can run jobs in parallel. B does not use a command +template to generate the jobs, but requires jobs to be in a +file. Output from the jobs mix. + +https://github.com/john01dav/spp + =head2 Todo -Url for map, spread +Url for spread -machma. Requires Go >= 1.7. + + +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 number of platforms this can work on. @@ -1518,6 +1747,8 @@ https://github.com/Julian/Verge https://github.com/amattn/paral +https://github.com/mmstick/concurr + pyargs @@ -1559,7 +1790,8 @@ This test stresses whether output mixes. chmod +x mycommand # Run 30 jobs in parallel - seq 30 | $paralleltool ./mycommand > >(tr -s abcdef) 2> >(tr -s abcdef >&2) + seq 30 | + $paralleltool ./mycommand > >(tr -s abcdef) 2> >(tr -s abcdef >&2) # 'a c e' and 'b d f' should always stay together # and there should only be a single line per job @@ -1673,6 +1905,18 @@ Some tools can only insert the argument once. echo bar | $paralleltool echo {} foo {} +=head2 INPUTSIZE: Length of input should not be limited + +Some tools limit the length of the input lines artificially with no good +reason. GNU B does not: + + perl -e 'print "foo."."x"x100_000_000' | parallel echo {.} + +GNU B limits the command to run to 128 KB due to execve(1): + + perl -e 'print "x"x131_000' | parallel echo {} | wc + + =head2 NUMWORDS: Speed depends on number of words Some tools become very slow if output lines have many words. @@ -1705,10 +1949,10 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing. Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk -Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk +Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange, -http://ole.tange.dk and Free Software Foundation, Inc. +Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free +Software Foundation, Inc. Parts of the manual concerning B compatibility is inspired by the manual of B from GNU findutils 4.4.2. @@ -1716,8 +1960,7 @@ the manual of B from GNU findutils 4.4.2. =head1 LICENSE -Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018 -Free Software Foundation, Inc. +Copyright (C) 2007-2018 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/parallel_book.pod b/src/parallel_book.pod index 66b0c661..54619a17 100644 --- a/src/parallel_book.pod +++ b/src/parallel_book.pod @@ -15,7 +15,7 @@ situations, and to avoid overloading you with information, the most used features are presented first. All the examples are tested in Bash, and most will work in other -shells, too, but there are a few exceptions. So you are recommened to +shells, too, but there are a few exceptions. So you are recommended to use Bash while testing out the examples. @@ -209,8 +209,8 @@ If the input is B then: {#} = the sequence number of the job {%} = the job slot number -When a job is started it gets sequence number that starts at 1 and -increases with 1 for each new job. The job also gets assigned a slot +When a job is started it gets a sequence number that starts at 1 and +increases by 1 for each new job. The job also gets assigned a slot number. This number is from 1 to the number of jobs running in parallel. It is unique between the running jobs, but is re-used as soon as a job finishes. @@ -349,7 +349,7 @@ A shorthand for B<--transfer --return {} --cleanup> is B<--trc {}>. =head1 Advanced usage -parset fifo, cmd substtition, arrayelements, array with var names and cmds, env_parset +parset fifo, cmd substitution, arrayelements, array with var names and cmds, env_parset env_parallel @@ -382,11 +382,11 @@ Interfacing with HTML/? =head2 Remote execution -seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo +seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo -seq 10 | PARALLLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@b.com echo +seq 10 | PARALLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@b.com echo -seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@b.com echo +seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@b.com echo ssh-agent diff --git a/src/parallel_design.pod b/src/parallel_design.pod index 3f2e0d1a..7bf9f1f8 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -213,10 +213,10 @@ error (stderr). GNU B pipes output from the command run into the compression program which saves to a tmpfile. GNU B records the pid of -the compress program. At the same time a small perl script (called +the compress program. At the same time a small Perl script (called B above) is started: It basically does B followed by B, but it also removes the tmpfile as soon as the first byte -is read, and it continously checks if the pid of the compression +is read, and it continuously checks if the pid of the compression program is dead. If the compress program is dead, B reads the rest of tmpfile and exits. @@ -539,7 +539,7 @@ needs to know how to read the function. From version 20150122 GNU B tries both the ()-version and the %%-version, and the function definition works on both pre- and -post-shellshock versions of B. +post-shell shock versions of B. =head2 The remote system wrapper @@ -1183,7 +1183,7 @@ software, username, password, host, port, database, and table in a single string. The DBURL must point to a table name. The table will be dropped and -created. The reason for not reusing an exising table is that the user +created. The reason for not reusing an existing table is that the user may have added more input sources which would require more columns in the table. By prepending '+' to the DBURL the table will not be dropped. @@ -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 @@ -1239,7 +1241,7 @@ instead? See a list in: B. =head2 Multiple processes working together Open3 is slow. Printing is slow. It would be good if they did not tie -up ressources, but were run in separate threads. +up resources, but were run in separate threads. =head2 --rrs on remote using a perl wrapper diff --git a/src/parallel_tutorial.pod b/src/parallel_tutorial.pod index 61c934ce..0f597715 100644 --- a/src/parallel_tutorial.pod +++ b/src/parallel_tutorial.pod @@ -2906,7 +2906,7 @@ Output: =head2 Timeout With B<--semaphoretimeout> you can force running the command anyway after -a period (postive number) or give up (negative number): +a period (positive number) or give up (negative number): sem --id foo -u 'echo Slow started; sleep 5; echo Slow ended' && sem --id foo --semaphoretimeout 1 'echo Forced running after 1 sec' && @@ -2978,7 +2978,7 @@ When asking for help, always report the full output of this: Output: GNU parallel 20180122 - Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018 + 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. @@ -3139,7 +3139,7 @@ https://my.fsf.org/donate/ =back -(C) 2013,2014,2015,2016,2017,2018 Ole Tange, GPLv3 +(C) 2013-2018 Ole Tange, GPLv3 =cut diff --git a/src/parset.pod b/src/parset.pod index a604eabc..2e059961 100644 --- a/src/parset.pod +++ b/src/parset.pod @@ -28,7 +28,9 @@ If I is a single variable name, this will be treated as the destination variable and made into an array. If I contains multiple names separated by ',' or space, -the names will be the destination variables. +the names will be the destination variables. The number of names must +be at least the number of jobs - otherwise some tmp files will not be +cleaned up. =head1 OPTIONS @@ -39,7 +41,7 @@ variable. =head1 SUPPORTED SHELLS -=head2 Bash/Zsh/Ksh/(Mksh alpha testing) +=head2 Bash/Zsh/Ksh/Mksh =head3 Examples @@ -178,16 +180,15 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing. Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk -Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk +Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange, +Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc. =head1 LICENSE -Copyright (C) 2016 -Ole Tange and Free Software Foundation, Inc. +Copyright (C) 2016 Ole Tange and Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/sem.pod b/src/sem.pod index 6ce80e44..4d1d02f5 100644 --- a/src/sem.pod +++ b/src/sem.pod @@ -244,7 +244,7 @@ Report bugs to . =head1 AUTHOR -Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange, +Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free Software Foundation, Inc. diff --git a/src/sql b/src/sql index 84b3bb09..b70f562e 100755 --- a/src/sql +++ b/src/sql @@ -576,7 +576,11 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { +<<<<<<< HEAD $Global::version = 20180723; +======= + $Global::version = 20181124; +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/Makefile b/testsuite/Makefile index e38f9c5a..0cf7bdcb 100644 --- a/testsuite/Makefile +++ b/testsuite/Makefile @@ -7,7 +7,7 @@ testsuite: 3 make stopvm 1: ../src/parallel tests-to-run/* wanted-results/* prereqlocal startdb prereqremote - TRIES=1 time bash Start.sh '' 'mem|polarhome|tutorial' || true + TRIES=1 time bash Start.sh '' '100s|mem|polarhome|tutorial' || true touch ~/.parallel/will-cite make stopvm 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/niceload01.sh b/testsuite/tests-to-run/niceload01.sh index 3f5af59a..ffc00e8d 100755 --- a/testsuite/tests-to-run/niceload01.sh +++ b/testsuite/tests-to-run/niceload01.sh @@ -2,7 +2,7 @@ echo '### Test niceload -q' niceload -q perl -e '$a = "works";$b="This $a\n"; print($b);' -echo +echo freepl >/dev/null freepl >/dev/null & @@ -21,7 +21,7 @@ freepl >/dev/null & # niceload -q -l 5 perl -e '$a=join"",<>; while(1){push @a,$a}' & -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### --rm and --runmem' niceload -H --rm 1g free -g | perl -ane '/Mem:/ and print $F[5],"\n"' | grep '[1-9]' >/dev/null && echo OK--rm niceload -H --runmem 1g free -g | perl -ane '/Mem:/ and print $F[5],"\n"' | grep '[1-9]' >/dev/null && echo OK--runmem diff --git a/testsuite/tests-to-run/niceload03.sh b/testsuite/tests-to-run/niceload03.sh index f406d26e..76eec46e 100755 --- a/testsuite/tests-to-run/niceload03.sh +++ b/testsuite/tests-to-run/niceload03.sh @@ -10,7 +10,7 @@ int() { } export -f int -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r # The seq 30000000 should take > 1 cpu sec to run. echo '### --soft -f and test if child is actually suspended and thus takes longer' niceload --soft -f 0.5 'seq 30000000 | nice wc;echo This should finish last' & diff --git a/testsuite/tests-to-run/parallel-freebsd.sh b/testsuite/tests-to-run/parallel-freebsd.sh index a7a30cda..5c2ecbd0 100644 --- a/testsuite/tests-to-run/parallel-freebsd.sh +++ b/testsuite/tests-to-run/parallel-freebsd.sh @@ -9,6 +9,9 @@ ping -c 1 freebsd7.tange.dk >/dev/null 2>&1 ssh freebsd7.tange.dk touch .parallel/will-cite scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} freebsd7.tange.dk:bin/ +. `which env_parallel.bash` +env_parallel --session + par_no_more_procs() { echo 'bug #40136: FreeBSD: No more processes' sem --jobs 3 --id my_id -u 'echo First started; sleep 10; echo The first finished;echo' && @@ -59,24 +62,24 @@ par_shebang() { } par_shellshock_bug() { - bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env _; + bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env name; echo Non-shellshock-hardened to non-shellshock-hardened; funky() { echo Function $1; }; export -f funky; PARALLEL_SHELL=bash parallel --env funky -S localhost funky ::: non-shellshock-hardened' - bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env _; + bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env name; echo Non-shellshock-hardened to shellshock-hardened; funky() { echo Function $1; }; export -f funky; - parallel --env funky -S parallel@192.168.1.72 funky ::: shellshock-hardened' + PARALLEL_SHELL=bash parallel --env funky -S parallel@192.168.1.72 funky ::: shellshock-hardened' } par_load() { echo '### Test --load (must give 1=true)' parallel -j0 -N0 --timeout 5 --nice 10 'bzip2 < /dev/zero >/dev/null' ::: 1 2 3 4 5 6 & parallel --argsep ,, --joblog - -N0 parallel --load 100% echo ::: 1 ,, 1 | - parallel --colsep '\t' --header : echo '{=4 $_=$_>5=}' + parallel -k --colsep '\t' --header : echo '{=4 $_=$_>5=}' } par_env_parallel() { @@ -104,7 +107,7 @@ unset TMPDIR # we get 'shopt'-errors and 'declare'-errors. # We can safely ignore those. -env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \ +PARALLEL_SHELL=sh env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \ -S freebsd7.tange.dk --tag '{} 2>&1' \ ::: $(compgen -A function | grep par_ | sort) \ 2> >(grep -Ev 'shopt: not found|declare: not found') diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 8e267256..9caebeb2 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -20,14 +20,14 @@ 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 # Test amount of parallelization # parallel --shuf --jl /tmp/myjl -j1 'export JOBS={1};'bash tests-to-run/parallel-local-0.3s.sh ::: {1..16} ::: {1..5} -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj13 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj13 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)'; seq 10 | parallel --halt now,fail=1 true; echo $? @@ -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() { @@ -837,6 +837,34 @@ par_perlexpr_with_newline() { rm *"Dad's \"famous\" 1' pizza" } +par_empty_command() { + echo 'bug #54647: parset ignores empty lines' + # really due to this. Should give an empty line due to -v: + parallel -v :::: <(echo) + . `which env_parallel.bash` + parset a,b,c :::: <(echo echo A; echo; echo echo C) + echo Empty: $b + parset a,b,c :::: <(echo echo A; echo echo B; echo echo C) + 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 +} + +par_tee_too_many_args() { + echo '### Fail if there are more arguments than --jobs' + seq 11 |parallel -k --tag --pipe -j4 --tee grep {} ::: {1..4} + seq 11 |parallel -k --tag --pipe -j4 --tee grep {} ::: {1..5} +} + +par_space_envvar() { + echo "### bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'" + export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK' +} + 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 dd0bb90f..827066fd 100644 --- a/testsuite/tests-to-run/parallel-local-100s.sh +++ b/testsuite/tests-to-run/parallel-local-100s.sh @@ -24,6 +24,7 @@ par_exit_code() { OK="ash bash csh dash fish mksh posh rc sash sh static-sh tcsh" BAD="fdsh fizsh ksh ksh93 yash zsh" s=100 + rm -f /tmp/mysleep cp /bin/sleep /tmp/mysleep echo '# Ideally the command should return the same' @@ -34,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..963b92fc 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..269f531d 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$$ } @@ -151,7 +151,7 @@ par_test_detected_shell() { tmp="/tmp/test_unknown_shell_$shell" cp $(which "$shell") "$tmp" chmod +x "$tmp" - $tmp -c 'ppar -Dinit echo ::: 1; true' | + $tmp -c 'parallel -Dinit echo ::: 1; true' | grep Global::shell rm "$tmp" } diff --git a/testsuite/tests-to-run/parallel-local-3s.sh b/testsuite/tests-to-run/parallel-local-3s.sh index 8e6dbe24..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 4 - perl -e 'print "'$string'"x9000,"end\n"' - } - tmp1=$(mktmpfifo) - tmp2=$(mktmpfifo) - slow_output a > $tmp1 & - sleep 2 - 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-mem.sh b/testsuite/tests-to-run/parallel-local-mem.sh index 2515367f..e7f53b3e 100755 --- a/testsuite/tests-to-run/parallel-local-mem.sh +++ b/testsuite/tests-to-run/parallel-local-mem.sh @@ -20,7 +20,7 @@ export -f perl5.14parallel par_2gb_records_N() { echo '### bug #44358: 2 GB records cause problems for -N' - echo '5 GB version: Eats 12.5 GB' + echo '5 GB version: Eats 12.5 GB RAM + 4 GB Swap' (gendata 5000MB; echo FOO; gendata 3000MB; echo FOO; gendata 1000MB;) | @@ -33,7 +33,7 @@ par_2gb_records_N() { perl5.14parallel --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c echo '### -L >4GB'; - echo 'Eats 12.5 GB'; + echo 'Eats 12.5 GB RAM + 6 GB Swap'; (head -c 5000MB /dev/zero; echo FOO; head -c 3000MB /dev/zero; echo FOO; head -c 1000MB /dev/zero;) | diff --git a/testsuite/tests-to-run/parallel-local-race02.sh b/testsuite/tests-to-run/parallel-local-race02.sh index ef2b549c..725d1b6c 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,30 @@ 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 +} + +par_continuous_output() { + # After the first batch, each jobs should output when it finishes. + # Old versions delayed output by $jobslots jobs + doit() { + echo "Test delayed output with '$1'" + echo "-u is optimal but hard to reach, due to non-mixing" + seq 10 | + parallel -j1 $1 --delay 1 -N0 echo | + parallel -j4 $1 -N0 'sleep 0.6;date' | + timestamp -dd | + perl -pe 's/(.).*/$1/' + } + export -f doit + parallel -k doit ::: '' -u +} 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 846e5331..ef2a81f9 100755 --- a/testsuite/tests-to-run/parallel-local-sql.sh +++ b/testsuite/tests-to-run/parallel-local-sql.sh @@ -147,6 +147,11 @@ 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 +<<<<<<< HEAD compgen -A function | grep par_ | sort | stdout parallel --timeout 250 -vj40% -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \ +======= +compgen -A function | grep par_ | LC_ALL=C sort | + stdout parallel --timeout 200 -vj3 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \ +>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7 :::: - ::: \$MYSQL \$PG \$SQLITE diff --git a/testsuite/tests-to-run/parallel-local-sql01.sh b/testsuite/tests-to-run/parallel-local-sql01.sh index 20b9804b..ca393f95 100644 --- a/testsuite/tests-to-run/parallel-local-sql01.sh +++ b/testsuite/tests-to-run/parallel-local-sql01.sh @@ -120,8 +120,11 @@ par_empty() { true; } +hostname=`hostname` export -f $(compgen -A function | egrep 'p_|par_') # Tested that -j0 in parallel is fastest (up to 15 jobs) compgen -A function | grep par_ | sort | stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \ - :::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi' + :::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi;' | + perl -pe 's/(from TBL99999 order) .*/$1/g' | + perl -pe "s/$hostname/hostname/g" diff --git a/testsuite/tests-to-run/parallel-local-ssh1.sh b/testsuite/tests-to-run/parallel-local-ssh1.sh index 30b21c5b..78fe9c96 100644 --- a/testsuite/tests-to-run/parallel-local-ssh1.sh +++ b/testsuite/tests-to-run/parallel-local-ssh1.sh @@ -6,7 +6,7 @@ mkdir tmp cd tmp unset run_test -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj300% -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj300% -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test --load remote' ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -qN0 perl -e while\(1\)\{\ \}' & sleep 1; @@ -20,17 +20,6 @@ echo '### Stop if all hosts are filtered and there are no hosts left to run on' echo '### Can csh propagate a variable containing \n'; export A=$(seq 3); parallel -S csh@lo --env A bash -c \''echo "$A"'\' ::: dummy -echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores' - echo '** test_zsh' - FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' - echo '** test_zsh_filter' - FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' - echo '** test_csh' - FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' - echo '** test_csh_filter' - FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' - echo '** bug #41805 done' - echo '### Test bug #34241: --pipe should not spawn unneeded processes' seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end @@ -125,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-ssh3.sh b/testsuite/tests-to-run/parallel-local-ssh3.sh index d3c0cfd1..c7639c5c 100644 --- a/testsuite/tests-to-run/parallel-local-ssh3.sh +++ b/testsuite/tests-to-run/parallel-local-ssh3.sh @@ -2,7 +2,7 @@ # SSH only allowed to localhost/lo -cat <<'EOF' | parallel -vj100% --retries 3 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | parallel -vj100% --retries 3 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### trailing space in sshlogin' echo 'sshlogin trailing space' | parallel --sshlogin "ssh -l parallel localhost " echo @@ -40,11 +40,6 @@ echo '### bug #45906: {= in header =}' parallel --rpl '{G} $_=lc($_)' -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: RETURNFILE45906; ls returnfile45906 -echo '### bug #45907: --header : + --return {header}' - rm returnfile45907; - ppar --header : -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: G returnfile45907; - ls returnfile45907 - echo "### bug #47608: parallel --nonall -S lo 'echo ::: ' blocks" parallel --nonall -S lo 'echo ::: ' @@ -59,6 +54,13 @@ echo '### bug #49404: "Max jobs to run" does not equal the number of jobs specif stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10 EOF +par_header_in_return() { + echo '### bug #45907: --header : + --return {header}' + rm returnfile45907 + parallel --header : -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: G returnfile45907 + ls returnfile45907 +} + par_trc_with_space() { echo '### Test --trc with space added in filename' cd diff --git a/testsuite/tests-to-run/parallel-local-ssh4.sh b/testsuite/tests-to-run/parallel-local-ssh4.sh index 910eef7c..7fce198b 100644 --- a/testsuite/tests-to-run/parallel-local-ssh4.sh +++ b/testsuite/tests-to-run/parallel-local-ssh4.sh @@ -5,7 +5,7 @@ unset run_once # SSH only allowed to localhost/lo # --retries if ssh dies -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj4 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj4 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### --env _' fUbAr="OK FUBAR" parallel -S parallel@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test fUbAr="OK FUBAR" parallel -S csh@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test diff --git a/testsuite/tests-to-run/parallel-local-ssh5.sh b/testsuite/tests-to-run/parallel-local-ssh5.sh index 69fc821f..c7acd15c 100644 --- a/testsuite/tests-to-run/parallel-local-ssh5.sh +++ b/testsuite/tests-to-run/parallel-local-ssh5.sh @@ -48,6 +48,14 @@ par_pipe_retries() { stdout parallel --retries 2 --roundrobin echo ::: should fail } +par_env_parallel_onall() { + echo "bug #54352: env_parallel -Slo --nonall myfunc broken in 20180722" + . `which env_parallel.bash` + doit() { echo Myfunc "$@"; } + env_parallel -Slo --onall doit ::: works + env_parallel -Slo --nonall doit works +} + export -f $(compgen -A function | grep par_) compgen -A function | grep par_ | sort -r | parallel --joblog /tmp/jl-`basename $0` -j3 --tag -k --delay 0.1 --retries 3 '{} 2>&1' diff --git a/testsuite/tests-to-run/parallel-local-ssh7.sh b/testsuite/tests-to-run/parallel-local-ssh7.sh index 2c12a05d..b4499066 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 @@ -782,6 +787,7 @@ _EOF par_fish_underscore() { echo '### fish' myscript=$(cat <<'_EOF' + echo "Fish is broken" echo "### Testing of --env _" # . `which env_parallel.fish`; @@ -792,7 +798,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 +1110,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 +1143,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 +1208,13 @@ 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' + echo "Fish is broken" + env_parallel --session set myvar "myvar works" setenv myenvvar "myenvvar works" @@ -1277,7 +1286,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 +1319,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 +1352,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 +1387,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 +1396,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 +1419,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 +1444,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 +1469,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,11 +1506,12 @@ 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() { myscript=$(cat <<'_EOF' + echo "Fish is broken" echo 'bug #50435: Remote fifo broke in 20150522' # Due to $PARALLEL_TMP being transferred set OK OK @@ -1534,7 +1545,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 +1570,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 +1595,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 +1608,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,20 +1632,92 @@ 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() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+50-25 + len_var_remote=100-50+25+12+6+3 + len_var_quote=100-50+25-12-6+3-2 + len_var_quote_remote=100-50-25+12+6-3 + len_fun=100+50+25+12+6-3 + len_fun_remote=100-50+25+12-6+3 + len_fun_quote=100+50-25-12 + len_fun_quote_remote=100-50+25+12-6 + + . `which env_parallel.ash`; + + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail - functions not supported in ash + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc-not-supported + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote-not-supported + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote-not-supported + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote-not-supported + + bigfunc() { true; } +_EOF + ) + ssh ash@lo "$myscript" +} + +__ash_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.ash`; bigvar="$(perl -e 'print "x"x130000')" env_parallel echo ::: OK_bigvar + bigvar="$(perl -e 'print "x"x65000')" env_parallel -S lo echo ::: OK_bigvar_remote bigvar="$(perl -e 'print "\""x65000')" env_parallel echo ::: OK_bigvar_quote + bigvar="$(perl -e 'print "\""x32000')" env_parallel -S lo echo ::: OK_bigvar_quote_remote # Functions not supported in ash @@ -1652,10 +1735,12 @@ par_ash_environment_too_big() { bigvar="$(perl -e 'print "x"x131000')" env_parallel echo ::: fail_bigvar + bigvar="$(perl -e 'print "x"x65000')" env_parallel -S lo echo ::: fail_bigvar_remote bigvar="$(perl -e 'print "\""x66000')" env_parallel echo ::: fail_bigvar_quote + bigvar="$(perl -e 'print "\""x33000')" env_parallel -S lo echo ::: fail_bigvar_quote_remote # Functions not supported in ash @@ -1674,26 +1759,32 @@ _EOF ssh ash@lo "$myscript" } -par_bash_environment_too_big() { +__bash_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.bash`; + repeat() { + bigvar="$(perl -e 'print "x"x110000')" env_parallel echo ::: OK_bigvar + bigvar="$(perl -e 'print "x"x55000')" env_parallel -S lo echo ::: OK_bigvar_remote bigvar="$(perl -e 'print "\""x55000')" env_parallel echo ::: OK_bigvar_quote + bigvar="$(perl -e 'print "\""x27000')" env_parallel -S lo echo ::: OK_bigvar_quote_remote bigvar=u eval 'bigfunc() { a="'"$(perl -e 'print "x"x110000')"'"; };' env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(perl -e 'print "x"x55000')"'"; };' env_parallel -S lo echo ::: OK_bigfunc_remote eval 'bigfunc() { a="'"$(perl -e 'print "\""x110000')"'"; };' env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(perl -e 'print "\""x55000')"'"; };' env_parallel -S lo echo ::: OK_bigfunc_quote_remote bigfunc() { true; } @@ -1701,19 +1792,93 @@ par_bash_environment_too_big() { bigvar="$(perl -e 'print "x"x127000')" env_parallel echo ::: fail_bigvar + bigvar="$(perl -e 'print "x"x64000')" env_parallel -S lo echo ::: fail_bigvar_remote bigvar="$(perl -e 'print "\""x64000')" env_parallel echo ::: fail_bigvar_quote + bigvar="$(perl -e 'print "\""x32000')" env_parallel -S lo echo ::: fail_bigvar_quote_remote bigvar=u - eval 'bigfunc() { a="'"$(perl -e 'print "x"x1220000')"'"; };' + eval 'bigfunc() { a="'"$(perl -e 'print "x"x122000')"'"; };' env_parallel echo ::: fail_bigfunc + eval 'bigfunc() { a="'"$(perl -e 'print "x"x61000')"'"; };' env_parallel -S lo echo ::: fail_bigfunc_remote eval 'bigfunc() { a="'"$(perl -e 'print "\""x127000')"'"; };' env_parallel echo ::: fail_bigfunc_quote + eval 'bigfunc() { a="'"$(perl -e 'print "\""x64000')"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote + + bigfunc() { true; } +_EOF + ) + ssh bash@lo "$myscript" +} + +par_bash_environment_too_big() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+50-25-12+6-3+2 + len_var_remote=100-50+25+12-6+3 + len_var_quote=100-50+25-12-6+3-2 + len_var_quote_remote=100-50-25+12+6-3 + len_fun=100+50-25-12+6-3 + len_fun_remote=100-50+25+12-6+3 + len_fun_quote=100+50-25-12 + len_fun_quote_remote=100-50+25+12-6 + + . `which env_parallel.bash`; + + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' env_parallel -S lo echo ::: fail_bigfunc_quote_remote bigfunc() { true; } @@ -1727,16 +1892,88 @@ par_csh_environment_too_big() { } par_dash_environment_too_big() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+50-25 + len_var_remote=100-50+25+12+6+3 + len_var_quote=100-50+25-12-6+3-2 + len_var_quote_remote=100-50-25+12+6-3 + len_fun=100+50+25+12+6-3 + len_fun_remote=100-50+25+12-6+3 + len_fun_quote=100+50-25-12 + len_fun_quote_remote=100-50+25+12-6 + + . `which env_parallel.dash`; + + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail - functions not supported in dash + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc-not-supported + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote-not-supported + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote-not-supported + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote-not-supported + + bigfunc() { true; } +_EOF + ) + ssh dash@lo "$myscript" +} + +__dash_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.dash`; bigvar="$(perl -e 'print "x"x130000')" env_parallel echo ::: OK_bigvar + bigvar="$(perl -e 'print "x"x65000')" env_parallel -S lo echo ::: OK_bigvar_remote bigvar="$(perl -e 'print "\""x65000')" env_parallel echo ::: OK_bigvar_quote + bigvar="$(perl -e 'print "\""x32000')" env_parallel -S lo echo ::: OK_bigvar_quote_remote # Functions not supported @@ -1754,10 +1991,12 @@ par_dash_environment_too_big() { bigvar="$(perl -e 'print "x"x131000')" env_parallel echo ::: fail_bigvar + bigvar="$(perl -e 'print "x"x65000')" env_parallel -S lo echo ::: fail_bigvar_remote bigvar="$(perl -e 'print "\""x66000')" env_parallel echo ::: fail_bigvar_quote + bigvar="$(perl -e 'print "\""x33000')" env_parallel -S lo echo ::: fail_bigvar_quote_remote # Functions not supported @@ -1780,7 +2019,148 @@ par_fish_environment_too_big() { echo Not implemented } + par_ksh_environment_too_big() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+50-25-12 + len_var_remote=100-50+25+12-6-3 + len_var_quote=100+50-25-12 + len_var_quote_remote=100-50+25+12-6 + len_fun=100+12+6-3 + len_fun_remote=100-50+25+12-6+3 + len_fun_quote=100+50-25-12 + len_fun_quote_remote=100-50+25+12-6 + + . `which env_parallel.ksh`; + + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote + + bigfunc() { true; } +_EOF + ) + ssh ksh@lo "$myscript" +} + +__ksh_environment_too_big() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+50-25 + len_var_remote=100-50+25+12+6+3 + len_var_quote=100-50+25-12-6+3-2 + len_var_quote_remote=100-50-25+12+6-3 + len_fun=100+50+25+12+6-3 + len_fun_remote=100-50+25+12-6+3 + len_fun_quote=100+50-25-12 + len_fun_quote_remote=100-50+25+12-6 + + . `which env_parallel.ksh`; + + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote + + bigfunc() { true; } +_EOF + ) + ssh ksh@lo "$myscript" +} + +__ksh_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.ksh`; @@ -1831,22 +2211,92 @@ _EOF par_mksh_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+6 + len_var_remote=100-50+25+12-6-3 + len_var_quote=100+6 + len_var_quote_remote=100-50+25 + len_fun=100+6 + len_fun_remote=100-50+25-6+3 + len_fun_quote=100+6 + len_fun_quote_remote=100-50+25 + . `which env_parallel.mksh`; - bigvar="$(perl -e 'print "x"x119000')" + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote + + bigfunc() { true; } +_EOF + ) + ssh mksh@lo "$myscript" +} + +__mksh_environment_too_big() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + . `which env_parallel.mksh`; + + bigvar="$(perl -e 'print "x"x110000')" env_parallel echo ::: OK_bigvar env_parallel -S lo echo ::: OK_bigvar_remote - bigvar="$(perl -e 'print "\""x119000')" + bigvar="$(perl -e 'print "\""x110000')" env_parallel echo ::: OK_bigvar_quote env_parallel -S lo echo ::: OK_bigvar_quote_remote bigvar=u - eval 'bigfunc() { a="'"$(perl -e 'print "x"x119000')"'"; };' + eval 'bigfunc() { a="'"$(perl -e 'print "x"x110000')"'"; };' env_parallel echo ::: OK_bigfunc env_parallel -S lo echo ::: OK_bigfunc_remote - eval 'bigfunc() { a="'"$(perl -e 'print "\""x119000')"'"; };' + eval 'bigfunc() { a="'"$(perl -e 'print "\""x110000')"'"; };' env_parallel echo ::: OK_bigfunc_quote env_parallel -S lo echo ::: OK_bigfunc_quote_remote bigfunc() { true; } @@ -1876,17 +2326,19 @@ _EOF ssh mksh@lo "$myscript" } -par_sh_environment_too_big() { +__sh_environment_too_big() { myscript=$(cat <<'_EOF' echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.sh`; bigvar="$(perl -e 'print "x"x130000')" env_parallel echo ::: OK_bigvar + bigvar="$(perl -e 'print "x"x90000')" env_parallel -S lo echo ::: OK_bigvar_remote bigvar="$(perl -e 'print "\""x65000')" env_parallel echo ::: OK_bigvar_quote + bigvar="$(perl -e 'print "\""x45000')" env_parallel -S lo echo ::: OK_bigvar_quote_remote # Functions not supported @@ -1925,6 +2377,75 @@ _EOF ) ssh sh@lo "$myscript" } +par_sh_environment_too_big() { + myscript=$(cat <<'_EOF' + echo 'bug #50815: env_parallel should warn if the environment is too big' + len_var=100+50-25 + len_var_remote=100-12 + len_var_quote=100-50+6 + len_var_quote_remote=100-50-6 + len_fun=100+25 + len_fun_remote=100-50+25-6+3+10 + len_fun_quote=100+6+10 + len_fun_quote_remote=100-50+25+12-6 + + . `which env_parallel.sh`; + + repeat() { + # Repeat input string n*1000 times + perl -e 'print ((shift)x(eval "1000*(".shift.")"))' "$@" + } + + bigvar=$(repeat x $len_var) + env_parallel echo ::: OK_bigvar + bigvar=$(repeat x $len_var_remote) + env_parallel -S lo echo ::: OK_bigvar_remote + + bigvar=$(repeat \" $len_var_quote) + env_parallel echo ::: OK_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote) + env_parallel -S lo echo ::: OK_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun)"'"; };' + env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_remote + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote)"'"; };' + env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote_remote)"'"; };' + env_parallel -S lo echo ::: OK_bigfunc_quote_remote + bigfunc() { true; } + + echo Rest should fail - functions not supported in sh + + bigvar=$(repeat x $len_var+10) + env_parallel echo ::: fail_bigvar + bigvar=$(repeat x $len_var_remote+10) + env_parallel -S lo echo ::: fail_bigvar_remote + + bigvar=$(repeat \" $len_var_quote+10) + env_parallel echo ::: fail_bigvar_quote + bigvar=$(repeat \" $len_var_quote_remote+10) + env_parallel -S lo echo ::: fail_bigvar_quote_remote + + bigvar=u + eval 'bigfunc() { a="'"$(repeat x $len_fun+10)"'"; };' + env_parallel echo ::: fail_bigfunc-not-supported + eval 'bigfunc() { a="'"$(repeat x $len_fun_remote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_remote-not-supported + + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel echo ::: fail_bigfunc_quote-not-supported + eval 'bigfunc() { a="'"$(repeat \" $len_fun_quote+10)"'"; };' + env_parallel -S lo echo ::: fail_bigfunc_quote_remote-not-supported + + bigfunc() { true; } +_EOF + ) + ssh sh@lo "$myscript" +} par_tcsh_environment_too_big() { echo Not implemented @@ -1937,19 +2458,23 @@ par_zsh_environment_too_big() { bigvar="$(perl -e 'print "x"x24000')" env_parallel echo ::: OK_bigvar + bigvar="$(perl -e 'print "x"x12000')" env_parallel -S lo echo ::: OK_bigvar_remote bigvar="$(perl -e 'print "\""x24000')" env_parallel echo ::: OK_bigvar_quote + bigvar="$(perl -e 'print "\""x12000')" env_parallel -S lo echo ::: OK_bigvar_quote_remote bigvar=u eval 'bigfunc() { a="'"$(perl -e 'print "x"x24000')"'"; };' env_parallel echo ::: OK_bigfunc + eval 'bigfunc() { a="'"$(perl -e 'print "x"x12000')"'"; };' env_parallel -S lo echo ::: OK_bigfunc_remote eval 'bigfunc() { a="'"$(perl -e 'print "\""x24000')"'"; };' env_parallel echo ::: OK_bigfunc_quote + eval 'bigfunc() { a="'"$(perl -e 'print "\""x12000')"'"; };' env_parallel -S lo echo ::: OK_bigfunc_quote_remote bigfunc() { true; } @@ -2032,6 +2557,10 @@ par_ash_parset() { # env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo # echo "${myarray[*]}" # echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOF ) ssh ash@lo "$myscript" @@ -2077,7 +2606,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" @@ -2086,6 +2615,10 @@ par_bash_parset() { env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo echo "${myarray[*]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOF ) ssh bash@lo "$myscript" @@ -2149,6 +2682,10 @@ par_dash_parset() { # env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo # echo "${myarray[*]}" # echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOF ) ssh dash@lo "$myscript" @@ -2198,7 +2735,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" @@ -2207,6 +2744,10 @@ par_ksh_parset() { env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo echo "${myarray[*]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOF ) ssh ksh@lo "$myscript" @@ -2241,6 +2782,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 "$@"; } @@ -2252,7 +2795,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" @@ -2261,6 +2804,10 @@ par_mksh_parset() { env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo echo "${myarray[*]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOF ) ssh mksh@lo "$myscript" @@ -2343,6 +2890,10 @@ par_sh_parset() { # env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo # echo "${myarray[*]}" # echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOF ) ssh sh@lo "$myscript" @@ -2409,6 +2960,10 @@ par_zsh_parset() { env_parset 'myarray[6],myarray[5],myarray[4]' myfun ::: baz bar foo echo "${myarray[*]}" echo "${myarray[4]} ${myarray[5]} ${myarray[6]}" + parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? + env_parset a,b,c,d 'echo {};exit {}' ::: 0 1 1 0 + echo Exit value 2 = $? _EOS`" _EOF ) @@ -2714,11 +3269,15 @@ _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:/; s/sh\[\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 5f6ac109..4b481fef 100644 --- a/testsuite/tests-to-run/parallel-local-ssh9.sh +++ b/testsuite/tests-to-run/parallel-local-ssh9.sh @@ -131,11 +131,47 @@ _EOF ssh zsh@lo "$myscript" } +par_propagate_env() { + echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores' + echo '** test_zsh' + FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' + echo '** test_zsh_filter' + FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' + echo '** test_csh' + FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' + echo '** test_csh_filter' + FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' + echo '** bug #41805 done' +} + +par_env_parallel_big_env() { + echo '### bug #54128: command too long when exporting big env' + . `which env_parallel.bash` + a=`rand | perl -pe 's/\0//g'| head -c 75000` + env_parallel -Slo echo should not ::: fail 2>&1 + a=`rand | perl -pe 's/\0//g'| head -c 80000` + env_parallel -Slo echo should ::: fail 2>/dev/null || echo OK +} + +par_no_route_to_host() { + echo '### no route to host with | and -j0 causes inf loop' + via_parallel() { + seq 11 | stdout parallel -j0 -S 192.168.1.199 echo + } + export -f via_parallel + raw() { + stdout ssh 192.168.1.199 echo + } + export -f raw + + parallel -k ::: raw via_parallel +} + 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_ | 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` --delay 0.1 -j200% --tag -k '{} 2>&1' | perl -pe 's/line \d\d\d+:/line XXX:/' | perl -pe 's/\[\d\d\d+\]:/[XXX]:/' diff --git a/testsuite/tests-to-run/parallel-local1.sh b/testsuite/tests-to-run/parallel-local1.sh index 0787f1fb..295bbd50 100644 --- a/testsuite/tests-to-run/parallel-local1.sh +++ b/testsuite/tests-to-run/parallel-local1.sh @@ -1,6 +1,6 @@ #!/bin/bash -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo "bug #43654: --bar with command not using {} - only last output line " COLUMNS=80 stdout parallel --bar true {.} ::: 1 | perl -pe 's/.*\r/\r/' diff --git a/testsuite/tests-to-run/parallel-local114.sh b/testsuite/tests-to-run/parallel-local114.sh index b1d610d6..7e948afe 100755 --- a/testsuite/tests-to-run/parallel-local114.sh +++ b/testsuite/tests-to-run/parallel-local114.sh @@ -1,6 +1,6 @@ #!/bin/bash -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo "### bug #41482: --pipe --compress blocks at different -j/seq combinations" seq 1 | parallel -k -j2 --compress -N1 -L1 --pipe cat; echo echo 1-4 + 1-4 diff --git a/testsuite/tests-to-run/parallel-local13.sh b/testsuite/tests-to-run/parallel-local13.sh index c71d11f8..e9b5a0b3 100644 --- a/testsuite/tests-to-run/parallel-local13.sh +++ b/testsuite/tests-to-run/parallel-local13.sh @@ -9,11 +9,11 @@ PARALLEL=-j8 export PARALLEL stdsort() { - "$@" 2>&1 | sort; + "$@" 2>&1 | LC_ALL=C sort; } export -f stdsort -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj100 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj100 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### -0 -n3 echo < files0.xi' stdout xargs -0 -n3 echo < files0.xi stdout parallel -k -0 -n3 echo < files0.xi @@ -255,13 +255,13 @@ echo 'Because of -t these lines can be flipped around therefore sort' stdout parallel -k -X -s30 -t echo < stairs.xi | sort echo '### -t echo this plus that < space.xi' stdout xargs -t echo this plus that < space.xi -stdout parallel -k -t echo this plus that < space.xi +stdout parallel -k -t echo this plus that < space.xi | sort echo '### -n1 printf "@%s@\n" < empty.xi' stdout xargs -n1 printf "@%s@\n" < empty.xi stdout parallel -k -n1 printf "@%s@\n" < empty.xi echo '### -n2 -t echo < foobar.xi' stdout xargs -n2 -t echo < foobar.xi -stdout parallel -k -n2 -t echo < foobar.xi +stdout parallel -k -n2 -t echo < foobar.xi | sort EOF 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-local150.sh b/testsuite/tests-to-run/parallel-local150.sh index c0bcadda..1ae904f5 100644 --- a/testsuite/tests-to-run/parallel-local150.sh +++ b/testsuite/tests-to-run/parallel-local150.sh @@ -7,7 +7,7 @@ median() { perl -e '@a=sort {$a<=>$b} <>;print $a[$#a/2]';} export -f median # -L1 will join lines ending in ' ' -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### bug #41565: Print happens in blocks - not after each job complete' echo 'The timing here is important: a full second between each' perl -e 'for(1..30){print("$_\n");`sleep 1`}' | parallel -j3 'echo {#}' | timestamp -dd | perl -pe '$_=int($_+0.3)."\n"' | median diff --git a/testsuite/tests-to-run/parallel-local164.sh b/testsuite/tests-to-run/parallel-local164.sh index e3fe386c..7c713c64 100644 --- a/testsuite/tests-to-run/parallel-local164.sh +++ b/testsuite/tests-to-run/parallel-local164.sh @@ -1,7 +1,7 @@ #!/bin/bash # -L1 will join lines ending in ' ' -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### bug #38354: -J profile_name should read from `pwd`/profile_name before ~/.parallel/profile_name' echo "echo echo from ./local_test_profile" > local_test_profile; parallel --profile local_test_profile echo ::: 1; @@ -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 @@ -133,7 +133,4 @@ echo 'bug #34241: --pipe should not spawn unneeded processes - part 2' echo No .par should exist; stdout ls *.par -echo "bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'" - export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK' - EOF 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-local19.sh b/testsuite/tests-to-run/parallel-local19.sh index 832b9c2c..4da53dde 100755 --- a/testsuite/tests-to-run/parallel-local19.sh +++ b/testsuite/tests-to-run/parallel-local19.sh @@ -34,7 +34,7 @@ ls | parallel -kv rm -- {.}/abc-{.}-{} 2>&1 #test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v rmdir -- {} 2>&1 \ # -L1 will join lines ending in ' ' -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj0 -k -L1 --joblog /tmp/jl-`basename $0` +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj0 -k -L1 --joblog /tmp/jl-`basename $0` -r echo '### Test compress' seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10' diff --git a/testsuite/tests-to-run/parallel-local2.sh b/testsuite/tests-to-run/parallel-local2.sh index 81ba04fa..22e5956c 100644 --- a/testsuite/tests-to-run/parallel-local2.sh +++ b/testsuite/tests-to-run/parallel-local2.sh @@ -20,7 +20,7 @@ forceload () { # Force load avg > number of cpu cores forceload $(parallel --number-of-cores) -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo "bug #38441: CPU usage goes to 100% if load is higher than --load at first job" /usr/bin/time -f %e parallel --load 100% true ::: a 2>&1 | perl -ne '$_ > 1 and print "More than 1 secs wall clock: OK\n"' 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 3ad8f13b..7daa8e8b 100755 --- a/testsuite/tests-to-run/parallel-local22.sh +++ b/testsuite/tests-to-run/parallel-local22.sh @@ -1,6 +1,6 @@ #!/bin/bash -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test of xargs -m command lines > 130k'; seq 1 60000 | parallel -m -j1 echo a{}b{}c | tee >(wc >/tmp/awc$$) >(sort | md5sum) >/tmp/a$$; wait; @@ -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-local23.sh b/testsuite/tests-to-run/parallel-local23.sh index 0e793e49..b51de27b 100755 --- a/testsuite/tests-to-run/parallel-local23.sh +++ b/testsuite/tests-to-run/parallel-local23.sh @@ -6,7 +6,7 @@ cp -a input-files/testdir2 tmp NICEPAR="nice nice parallel" export NICEPAR -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### bug #42329: --line-buffer gives wrong output'; $NICEPAR --line-buffer --tag seq ::: 10000000 | wc -c; $NICEPAR --line-buffer seq ::: 10000000 | wc -c diff --git a/testsuite/tests-to-run/parallel-local4.sh b/testsuite/tests-to-run/parallel-local4.sh index 997af4cb..da931c74 100644 --- a/testsuite/tests-to-run/parallel-local4.sh +++ b/testsuite/tests-to-run/parallel-local4.sh @@ -1,6 +1,6 @@ #!/bin/bash -cat <<'EOF' | sed -e 's/;$/; /;' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### -L -n with pipe' seq 14 | parallel --pipe -k -L 3 -n 2 'cat;echo 6 Ln line record' diff --git a/testsuite/tests-to-run/parallel-local5.sh b/testsuite/tests-to-run/parallel-local5.sh index 2d4be46c..04da4ecd 100644 --- a/testsuite/tests-to-run/parallel-local5.sh +++ b/testsuite/tests-to-run/parallel-local5.sh @@ -5,7 +5,7 @@ echo '### Test --pipe' seq 1 1000000 >/tmp/parallel-seq shuf --random-source=/tmp/parallel-seq /tmp/parallel-seq >/tmp/blocktest -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj2 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj2 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test 200M records with too small block'; ( echo start; diff --git a/testsuite/tests-to-run/parallel-local7.sh b/testsuite/tests-to-run/parallel-local7.sh index 8c720933..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/;' @@ -24,7 +42,7 @@ export -f par_tmux # echo '### bug #48841: --tmux(pane) --fg should start tmux in foreground' # stdout /usr/bin/time -f %e script -q -f -c /tmp/parallel-local7-script /dev/null | perl -ne '$_ >= 26 and $_ <= 45 and print "OK\n"' -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 100 --retries 1 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 100 --retries 1 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### tmux-1.9' seq 0000 10 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux diff --git a/testsuite/tests-to-run/parallel-local9.sh b/testsuite/tests-to-run/parallel-local9.sh index 59e3aeb6..bafb6149 100644 --- a/testsuite/tests-to-run/parallel-local9.sh +++ b/testsuite/tests-to-run/parallel-local9.sh @@ -7,7 +7,7 @@ export XAP NICEPAR="nice nice parallel" export NICEPAR -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1 -r echo 'bug #41412: --timeout + --delay causes deadlock'; seq 10 | parallel -j10 --timeout 1 --delay 0.3 echo; parallel -j3 --timeout 1 --delay 2 echo ::: 1 2 3; diff --git a/testsuite/tests-to-run/parallel-polarhome.sh b/testsuite/tests-to-run/parallel-polarhome.sh index 4fd30f8b..462fbfc3 100644 --- a/testsuite/tests-to-run/parallel-polarhome.sh +++ b/testsuite/tests-to-run/parallel-polarhome.sh @@ -5,24 +5,24 @@ unset TIMEOUT . `which env_parallel.bash` env_parallel --session +P_ALL="openstep qnx pidora alpha tru64 hpux-ia64 syllable raspbian solaris openindiana aix hpux debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2" +P="$P_ALL" -P_ALL="alpha tru64 hpux-ia64 syllable pidora raspbian solaris openindiana aix hpux qnx debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2" -P_NOTWORKING="vax alpha openstep" -P_NOTWORKING_YET="ultrix irix" +# tru64 takes 22s to run 4 parallels +MAXTIME=50 +RETRIES=2 +MAXPROC=${maxproc:-11} +MAXINNERPROC=${maxinnerproc:-3} -P_WORKING="openbsd tru64 debian freebsd redhat netbsd macosx miros centos unixware pidora ubuntu scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux openindiana hpux-ia64" -P_WORKING="openbsd tru64 debian redhat netbsd macosx miros centos unixware pidora scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux hurd freebsd ubuntu openindiana" -P_TEMPORARILY_BROKEN="minix dragonfly hpux-ia64 beaglebone cubieboard2" +export PARALLEL_SSH="ssh -oLogLevel=quiet" -P="$P_WORKING" -POLAR=`parallel -k echo {}.polarhome.com ::: $P` -S_POLAR=`parallel -k echo -S 1/{}.polarhome.com ::: $P` +# select a running master (debian-ppc, suse, ubuntu, or debian) +MASTER=$(parallel -j0 --delay 0.1 --halt now,success=1 $PARALLEL_SSH {} echo {} \ + ::: {debian-ppc,ubuntu,debian,suse}.polarhome.com) -# 2018-04-22 MAXTIME=20 -MAXTIME=25 -RETRIES=4 - -parallel --retries $RETRIES rsync -a /usr/local/bin/{parallel,env_parallel,env_parallel.*,parcat} ::: redhat.polarhome.com:bin/ +parallel -j0 --delay 0.1 --retries $RETRIES \ + rsync -L /usr/local/bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \ + ::: $MASTER:bin/ doit() { # Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet @@ -30,7 +30,25 @@ doit() { export PARALLEL_SSH export MAXTIME export RETRIES - echo MAXTIME=$MAXTIME RETRIES=$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' + # syllable often gives false positive + parallel --timeout $MAXTIME -j10 ssh syllable true ::: {1..10} 2>/dev/null >/dev/null & + POLAR_ALL="`bin/parallel -j0 -k --timeout 10 echo {} ::: $P`" + 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` + + sshwithpass() { + # Minix requires sshpass. The other servers will use ssh-keys + sshpass -f ~/.ssh/minix.password ssh -oLogLevel=quiet "$@" + } + export -f sshwithpass copy() { # scp, but atomic (avoid half files if disconnected) @@ -38,75 +56,101 @@ doit() { src="$2" dst="$3" cat "$src" | - stdout ssh -oLogLevel=quiet $host "mkdir -p bin;cat > bin/'$dst'.tmp && chmod 755 bin/'$dst'.tmp && mv bin/'$dst'.tmp bin/'$dst'" + sshwithpass $host "mkdir -p bin;cat > bin/'$dst'.tmp && chmod 755 bin/'$dst'.tmp && mv bin/'$dst'.tmp bin/'$dst'" 2>&1 } export -f copy par_nonall() { - parallel -j15 -k --retries $RETRIES --timeout $MAXTIME --delay 0.1 --tag \ - --nonall $S_POLAR --argsep ,:- \ + 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/sshwithpass minix" --argsep ,:- \ 'source setupenv >&/dev/null || . `pwd`/setupenv;' "$@" } export -f par_nonall echo '### Copy commands to servers' - parallel -vkj15 --retries $RETRIES --timeout $MAXTIME --delay 0.03 --tag \ - copy {2} {1} {1/} \ - ::: bin/{parallel,env_parallel,env_parallel.*,parcat,stdout} \ - ::: $POLAR + env_parallel -vj$MAXPROC $RET_TIME_K --delay 0.03 --tag copy {2} {1} {1/} \ + ::: bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \ + ::: $POLAR minix echo Done copying - # Test empty command - test_empty_cmd() { - echo '### Test if empty command in process list causes problems' - perl -e '$0=" ";sleep 10' & - parallel echo ::: OK_with_empty_cmd - } - export -f test_empty_cmd - PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1 + env_parallel -d '\n\n' -vkj$MAXINNERPROC --delay 2 <<'EOF' + echo + echo '### Works on ...' + echo par_nonall parallel echo Works on {} ::: '`hostname`' 2>&1 - par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp |" \ - "perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' &&" \ - "echo OK readonly tmp" 2>&1 echo echo '### --number-of-cores/--number-of-cpus should work with no error' echo - par_nonall parallel --number-of-sockets 2>&1 - par_nonall parallel --number-of-cores 2>&1 - par_nonall parallel --number-of-threads 2>&1 - par_nonall parallel --number-of-cpus 2>&1 + par_nonall 'parallel --number-of-sockets; parallel --number-of-cores' 2>&1 + par_nonall 'parallel --number-of-threads; parallel --number-of-cpus' 2>&1 echo - echo '### Does exporting a bash function kill parallel' + echo '### Fails if tmpdir is R/O' + echo + par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp | + perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' && + echo OK readonly tmp" 2>&1 + + echo + echo '### Does exporting a bash function make parallel fail?' + echo 'If login shell is not bash compatible it fails' echo # http://zmwangx.github.io/blog/2015-11-25-bash-function-exporting-fiasco.html - par_nonall 'func() { cat <(echo bash only A); };export -f func; bin/parallel func ::: 1' 2>&1 + par_nonall 'echo test funcA + funcA() { + cat <(echo bash only A) + } + export -f funcA; + bin/parallel funcA ::: 1' 2>&1 echo - echo '### Does PARALLEL_SHELL help exporting a bash function not kill parallel' + echo '### Does PARALLEL_SHELL help exporting a bash function' + echo 'If login shell is not bash compatible it should work' echo - ( - mkdir -p tmp/bin; - cp /bin/bash tmp/bin - cd tmp - PARALLEL_SHELL=bin/bash par_nonall 'func() { cat <(echo bash only B); };export -f func; bin/parallel func ::: 1' - ) + mkdir -p tmp/bin + cp /bin/bash tmp/bin + cd tmp + export PARALLEL_SHELL=bin/bash + par_nonall 'echo test funcB + funcB() { + cat <(echo bash only B) + } + export -f funcB + export PARALLEL_SHELL=bin/bash + bin/parallel funcB ::: 1' 2>&1 echo echo '### env_parallel echo :::: <(echo OK)' - echo '(bash ksh zsh only)' + echo '(bash ksh mksh zsh only)' echo par_nonall 'bin/env_parallel --install && echo install-OK' 2>&1 par_nonall 'env_parallel echo env_parallel ::: run-OK' 2>&1 - par_nonall 'env_parallel echo reading from process substitution :::: <(echo OK)' | - # csh on NetBSD does not support process substitution + # csh on NetBSD does not support process substitution + par_nonall 'env_parallel echo reading from process substitution :::: <(echo OK)' 2>&1 | grep -v ': /tmp/.*: No such file or directory' + # Test empty command name in process list + test_empty_cmd() { + echo '### Test if empty command name in process list causes problems' + perl -e '$0=" ";sleep 1000' & + pid=$! + parallel echo ::: OK_with_empty_cmd + kill $pid + } + export -f test_empty_cmd + export PARALLEL_SHELL=bin/bash + PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1 + echo echo '### parset arr seq ::: 2 3 4' - echo '(bash ksh zsh only)' + echo '(bash ksh mksh zsh only)' echo par_nonall 'parset arr seq ::: 2 3 4; echo ${arr[*]}' 2>&1 echo '### env_parset arr seq ::: 2 3 4' @@ -114,14 +158,16 @@ doit() { echo echo '### parset var1,var2,var3 seq ::: 2 3 4' - echo '(bash ksh zsh ash dash only)' + echo '(bash ksh mksh zsh ash dash only)' echo par_nonall 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' 2>&1 echo '### env_parset var1,var2,var3 seq ::: 2 3 4' par_nonall 'start=2; env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' 2>&1 +EOF + } -env_parallel -u -Sredhat.polarhome.com doit ::: 1 +env_parallel -u -S$MASTER doit ::: 1 # eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }' # env_parallel myfunc ::: a | wc # OK diff --git a/testsuite/tests-to-run/parallel-remote1.sh b/testsuite/tests-to-run/parallel-remote1.sh index 8663f320..20fb43b4 100644 --- a/testsuite/tests-to-run/parallel-remote1.sh +++ b/testsuite/tests-to-run/parallel-remote1.sh @@ -13,7 +13,7 @@ echo 'ssh "$@"; echo "$@" >>/tmp/myssh2-run' >/tmp/myssh2 chmod 755 /tmp/myssh1 /tmp/myssh2 seq 1 100 | parallel --sshdelay 0.03 --retries 10 --sshlogin "/tmp/myssh1 $SSHLOGIN1,/tmp/myssh2 $SSHLOGIN2" -k echo -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/\;s/\$SSHLOGIN3/$SSHLOGIN3/ | parallel -vj3 -k -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/\;s/\$SSHLOGIN3/$SSHLOGIN3/ | parallel -vj3 -k -L1 -r echo '### test --timeout --retries' parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 $SSHLOGIN1 $SSHLOGIN2 $SSHLOGIN3 diff --git a/testsuite/tests-to-run/parallel-tutorial.sh b/testsuite/tests-to-run/parallel-tutorial.sh index 5ed53572..1eb60ad2 100644 --- a/testsuite/tests-to-run/parallel-tutorial.sh +++ b/testsuite/tests-to-run/parallel-tutorial.sh @@ -48,8 +48,8 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/ s/,[a-z]*,\d+.\d+,\d+.\d+/,:,000000000.000,0.000/g; # /usr/bin/time -f %e s/^(\d+)\.\d+$/$1/; - # Base 64 string - s:[\\+/a-z0-9=]{50,}:BASE64:ig; + # Base 64 string with quotes + s:['"'"'"\\+/a-z0-9=]{50,}:BASE64:ig; # --workdir ... s:parallel/tmp/aspire-\d+-1:TMPWORKDIR:g; # + cat ... | (Bash outputs these in random order) @@ -80,7 +80,11 @@ 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}{}; ' | + perl -ne '/GTK2_RC_FILES/ and next; + /GTK_RC_FILES/ and next; + print' | uniq # 3+3 .par files (from --files), 1 .tms-file from tmux attach find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | wc -l diff --git a/testsuite/tests-to-run/sem01.sh b/testsuite/tests-to-run/sem01.sh index 3dc91041..b6e04115 100755 --- a/testsuite/tests-to-run/sem01.sh +++ b/testsuite/tests-to-run/sem01.sh @@ -1,31 +1,13 @@ #!/bin/bash # -L1 will join lines ending in ' ' -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test mutex. This should not mix output'; parallel --semaphore --id mutex -u seq 1 10 '|' pv -qL 20; parallel --semaphore --id mutex -u seq 11 20 '|' pv -qL 100; 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 @@ -55,4 +37,4 @@ echo '### Test --st +1/-1' stdout sem --id st --wait -EOF \ No newline at end of file +EOF 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/test19.sh b/testsuite/tests-to-run/test19.sh index 874ac855..b7660a12 100644 --- a/testsuite/tests-to-run/test19.sh +++ b/testsuite/tests-to-run/test19.sh @@ -123,7 +123,7 @@ stdout ssh $SSHLOGIN1 ls 'tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK echo 'Input for ssh' cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' | - perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-zA-Z0-9/\\+=]{500,}:base64:;' + perl -pe 's/\S*parallel-server\S*/one-server/;s:\S[a-zA-Z0-9/\\+=]{500,}\S:base64:;' rm /tmp/myssh1-run /tmp/myssh2-run rm -rf /tmp/parallel.file* 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/test30.sh b/testsuite/tests-to-run/test30.sh index e6520d18..679226cc 100644 --- a/testsuite/tests-to-run/test30.sh +++ b/testsuite/tests-to-run/test30.sh @@ -1,6 +1,6 @@ #!/bin/bash -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test of --eta' seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l 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/tests-to-run/test45.sh b/testsuite/tests-to-run/test45.sh index 3434101c..a8ca1e86 100644 --- a/testsuite/tests-to-run/test45.sh +++ b/testsuite/tests-to-run/test45.sh @@ -4,7 +4,7 @@ SERVER1=parallel-server3 SERVER2=parallel-server1 # -L1 will join lines ending in ' ' -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin' seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null" diff --git a/testsuite/tests-to-run/test60.sh b/testsuite/tests-to-run/test60.sh index 534f6101..dc25b90b 100644 --- a/testsuite/tests-to-run/test60.sh +++ b/testsuite/tests-to-run/test60.sh @@ -6,7 +6,7 @@ SSHLOGIN1=parallel@$SERVER1 SSHLOGIN2=parallel@$SERVER2 # -L1 will join lines ending in ' ' -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r echo '### Test --onall'; parallel --onall -S $SSHLOGIN1,$SSHLOGIN2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2 diff --git a/testsuite/tests-to-run/test61.sh b/testsuite/tests-to-run/test61.sh index 8d8b3553..f9d19315 100644 --- a/testsuite/tests-to-run/test61.sh +++ b/testsuite/tests-to-run/test61.sh @@ -3,7 +3,7 @@ SERVER1=parallel-server1 SERVER2=parallel-server2 -cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r | perl -pe 's/(PARALLEL_PID....)\d+/$1XXXXX/g' echo '### Test --return of weirdly named file' stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b' diff --git a/testsuite/wanted-results/parallel-freebsd b/testsuite/wanted-results/parallel-freebsd index 88bc77a0..ada2c66e 100644 --- a/testsuite/wanted-results/parallel-freebsd +++ b/testsuite/wanted-results/parallel-freebsd @@ -64,10 +64,9 @@ par_shebang with par_shebang /usr/bin/perl -w ./shebang-wrap-opt options par_shebang options par_shellshock_bug par_shellshock_bug 2>&1 -par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env _ +par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env name par_shellshock_bug Non-shellshock-hardened to non-shellshock-hardened par_shellshock_bug Function non-shellshock-hardened -par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env _ +par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env name par_shellshock_bug Non-shellshock-hardened to shellshock-hardened -par_shellshock_bug parallel: Warning: Shell functions may not be supported in /bin/sh. par_shellshock_bug Function shellshock-hardened diff --git a/testsuite/wanted-results/parallel-install b/testsuite/wanted-results/parallel-install index 336a1277..e69de29b 100644 --- a/testsuite/wanted-results/parallel-install +++ b/testsuite/wanted-results/parallel-install @@ -1,503 +0,0 @@ -### Test installation missing pod2* -make[0]: Entering directory '~/privat/parallel' -make dist-gzip am__post_remove_distdir='@:' -make[0]: Entering directory '~/privat/parallel' -if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi -test -d "parallel-00000000" || mkdir "parallel-00000000" - (cd src && make top_distdir=../parallel-00000000 distdir=../parallel-00000000/src \ - am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir) -make[0]: Entering directory '~/privat/parallel/src' -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_design.pod > ./parallel_design.7n \ -&& mv ./parallel_design.7n ./parallel_design.7 \ -|| echo "Warning: pod2man not found. Using old parallel_design.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_design.7 -make[0]: Leaving directory '~/privat/parallel/src' -test -n "" \ -|| find "parallel-00000000" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \ -|| chmod -R a+r "parallel-00000000" -tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >parallel-00000000.tar.gz -make[0]: Leaving directory '~/privat/parallel' -if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi -make[0]: Leaving directory '~/privat/parallel' -checking for a BSD-compatible install... /usr/bin/install -c -checking whether build environment is sane... yes -checking for a thread-safe mkdir -p... /bin/mkdir -p -checking for gawk... gawk -checking whether make sets $(MAKE)... yes -checking whether make supports nested variables... yes -checking whether ln -s works... yes -checking that generated files are newer than configure... done -configure: creating ./config.status -config.status: creating Makefile -config.status: creating src/Makefile -config.status: creating config.h -Making install in src -make[0]: Entering directory '/tmp/parallel-00000000/src' -pod2man --release='00000000' --center='parallel' \ - --section=1 ./parallel.pod > ./parallel.1n \ -&& mv ./parallel.1n ./parallel.1 \ -|| echo "Warning: pod2man not found. Using old parallel.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./env_parallel.pod > ./env_parallel.1n \ -&& mv ./env_parallel.1n ./env_parallel.1 \ -|| echo "Warning: pod2man not found. Using old env_parallel.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old env_parallel.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./sem.pod > ./sem.1n \ -&& mv ./sem.1n ./sem.1 \ -|| echo "Warning: pod2man not found. Using old sem.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old sem.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./sql > ./sql.1n \ -&& mv ./sql.1n ./sql.1 \ -|| echo "Warning: pod2man not found. Using old sql.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old sql.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./niceload.pod > ./niceload.1n \ -&& mv ./niceload.1n ./niceload.1 \ -|| echo "Warning: pod2man not found. Using old niceload.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old niceload.1 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \ -&& mv ./parallel_tutorial.7n ./parallel_tutorial.7 \ -|| echo "Warning: pod2man not found. Using old parallel_tutorial.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_tutorial.7 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_book.pod > ./parallel_book.7n \ -&& mv ./parallel_book.7n ./parallel_book.7 \ -|| echo "Warning: pod2man not found. Using old parallel_book.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_book.7 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_design.pod > ./parallel_design.7n \ -&& mv ./parallel_design.7n ./parallel_design.7 \ -|| echo "Warning: pod2man not found. Using old parallel_design.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_design.7 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_alternatives.pod > ./parallel_alternatives.7n \ -&& mv ./parallel_alternatives.7n ./parallel_alternatives.7 \ -|| echo "Warning: pod2man not found. Using old parallel_alternatives.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_alternatives.7 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./parcat.pod > ./parcat.1n \ -&& mv ./parcat.1n ./parcat.1 \ -|| echo "Warning: pod2man not found. Using old parcat.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parcat.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./parset.pod > ./parset.1n \ -&& mv ./parset.1n ./parset.1 \ -|| echo "Warning: pod2man not found. Using old parset.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parset.1 -pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \ -&& mv ./parallel.htmln ./parallel.html \ -|| echo "Warning: pod2html not found. Using old parallel.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel with environment" ./env_parallel.pod > ./env_parallel.htmln \ -&& mv ./env_parallel.htmln ./env_parallel.html \ -|| echo "Warning: pod2html not found. Using old env_parallel.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old env_parallel.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \ -&& mv ./parallel_tutorial.htmln ./parallel_tutorial.html \ -|| echo "Warning: pod2html not found. Using old parallel_tutorial.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_tutorial.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel book" ./parallel_book.pod > ./parallel_book.htmln \ -&& mv ./parallel_book.htmln ./parallel_book.html \ -|| echo "Warning: pod2html not found. Using old parallel_book.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_book.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \ -&& mv ./parallel_design.htmln ./parallel_design.html \ -|| echo "Warning: pod2html not found. Using old parallel_design.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_design.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel alternatives" ./parallel_alternatives.pod > ./parallel_alternatives.htmln \ -&& mv ./parallel_alternatives.htmln ./parallel_alternatives.html \ -|| echo "Warning: pod2html not found. Using old parallel_alternatives.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_alternatives.html -rm -f ./pod2htm* -pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \ -&& mv ./sem.htmln ./sem.html \ -|| echo "Warning: pod2html not found. Using old sem.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old sem.html -rm -f ./pod2htm* -pod2html --title "GNU SQL" ./sql > ./sql.htmln \ -&& mv ./sql.htmln ./sql.html \ -|| echo "Warning: pod2html not found. Using old sql.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old sql.html -rm -f ./pod2htm* -pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \ -&& mv ./niceload.htmln ./niceload.html \ -|| echo "Warning: pod2html not found. Using old niceload.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old niceload.html -rm -f ./pod2htm* -pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \ -&& mv ./parcat.htmln ./parcat.html \ -|| echo "Warning: pod2html not found. Using old parcat.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parcat.html -rm -f ./pod2htm* -pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \ -&& mv ./parset.htmln ./parset.html \ -|| echo "Warning: pod2html not found. Using old parset.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parset.html -rm -f ./pod2htm* -pod2texi --output=./parallel.texi ./parallel.pod \ -|| echo "Warning: pod2texi not found. Using old parallel.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel.texi -pod2texi --output=./env_parallel.texi ./env_parallel.pod \ -|| echo "Warning: pod2texi not found. Using old env_parallel.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old env_parallel.texi -pod2texi --output=./sem.texi ./sem.pod \ -|| echo "Warning: pod2texi not found. Using old sem.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old sem.texi -pod2texi --output=./sql.texi ./sql \ -|| echo "Warning: pod2texi not found. Using old sql.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old sql.texi -pod2texi --output=./niceload.texi ./niceload.pod \ -|| echo "Warning: pod2texi not found. Using old niceload.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old niceload.texi -pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_tutorial.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_tutorial.texi -pod2texi --output=./parallel_book.texi ./parallel_book.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_book.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_book.texi -pod2texi --output=./parallel_design.texi ./parallel_design.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_design.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_design.texi -pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_alternatives.texi -pod2texi --output=./parcat.texi ./parcat.pod \ -|| echo "Warning: pod2texi not found. Using old parcat.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parcat.texi -pod2texi --output=./parset.texi ./parset.pod \ -|| echo "Warning: pod2texi not found. Using old parset.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parset.texi -pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \ -|| echo "Warning: pod2pdf not found. Using old parallel.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel.pdf -pod2pdf --output-file ./env_parallel.pdf ./env_parallel.pod --title "GNU Parallel with environment" \ -|| echo "Warning: pod2pdf not found. Using old env_parallel.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old env_parallel.pdf -pod2pdf --output-file ./sem.pdf ./sem.pod --title "GNU sem" \ -|| echo "Warning: pod2pdf not found. Using old sem.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old sem.pdf -pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \ -|| echo "Warning: pod2pdf not found. Using old sql.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old sql.pdf -pod2pdf --output-file ./niceload.pdf ./niceload.pod --title "GNU niceload" \ -|| echo "Warning: pod2pdf not found. Using old niceload.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old niceload.pdf -pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "GNU Parallel Tutorial" \ -|| echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_tutorial.pdf -pod2pdf --output-file ./parallel_book.pdf ./parallel_book.pod --title "GNU Parallel Book" \ -|| echo "Warning: pod2pdf not found. Using old parallel_book.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_book.pdf -pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \ -|| echo "Warning: pod2pdf not found. Using old parallel_design.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_design.pdf -pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --title "GNU Parallel alternatives" \ -|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_alternatives.pdf -pod2pdf --output-file ./parcat.pdf ./parcat.pod --title "GNU parcat" \ -|| echo "Warning: pod2pdf not found. Using old parcat.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parcat.pdf -pod2pdf --output-file ./parset.pdf ./parset.pod --title "GNU parset" \ -|| echo "Warning: pod2pdf not found. Using old parset.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parset.pdf -make[0]: Entering directory '/tmp/parallel-00000000/src' - /bin/mkdir -p '/usr/local/bin' - /usr/bin/install -c parallel sql niceload parcat parset env_parallel env_parallel.ash env_parallel.bash env_parallel.csh env_parallel.dash env_parallel.fish env_parallel.ksh env_parallel.pdksh env_parallel.sh env_parallel.tcsh env_parallel.zsh '/usr/local/bin' -make install-exec-hook -make[0]: Entering directory '/tmp/parallel-00000000/src' -rm /usr/local/bin/sem || true -ln -s parallel /usr/local/bin/sem -make[0]: Leaving directory '/tmp/parallel-00000000/src' -pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \ -&& mv ./parallel.htmln ./parallel.html \ -|| echo "Warning: pod2html not found. Using old parallel.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel with environment" ./env_parallel.pod > ./env_parallel.htmln \ -&& mv ./env_parallel.htmln ./env_parallel.html \ -|| echo "Warning: pod2html not found. Using old env_parallel.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old env_parallel.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \ -&& mv ./parallel_tutorial.htmln ./parallel_tutorial.html \ -|| echo "Warning: pod2html not found. Using old parallel_tutorial.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_tutorial.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel book" ./parallel_book.pod > ./parallel_book.htmln \ -&& mv ./parallel_book.htmln ./parallel_book.html \ -|| echo "Warning: pod2html not found. Using old parallel_book.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_book.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \ -&& mv ./parallel_design.htmln ./parallel_design.html \ -|| echo "Warning: pod2html not found. Using old parallel_design.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_design.html -rm -f ./pod2htm* -pod2html --title "GNU Parallel alternatives" ./parallel_alternatives.pod > ./parallel_alternatives.htmln \ -&& mv ./parallel_alternatives.htmln ./parallel_alternatives.html \ -|| echo "Warning: pod2html not found. Using old parallel_alternatives.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parallel_alternatives.html -rm -f ./pod2htm* -pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \ -&& mv ./sem.htmln ./sem.html \ -|| echo "Warning: pod2html not found. Using old sem.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old sem.html -rm -f ./pod2htm* -pod2html --title "GNU SQL" ./sql > ./sql.htmln \ -&& mv ./sql.htmln ./sql.html \ -|| echo "Warning: pod2html not found. Using old sql.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old sql.html -rm -f ./pod2htm* -pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \ -&& mv ./niceload.htmln ./niceload.html \ -|| echo "Warning: pod2html not found. Using old niceload.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old niceload.html -rm -f ./pod2htm* -pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \ -&& mv ./parcat.htmln ./parcat.html \ -|| echo "Warning: pod2html not found. Using old parcat.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parcat.html -rm -f ./pod2htm* -pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \ -&& mv ./parset.htmln ./parset.html \ -|| echo "Warning: pod2html not found. Using old parset.html" -/bin/bash: pod2html: command not found -Warning: pod2html not found. Using old parset.html -rm -f ./pod2htm* -pod2texi --output=./parallel.texi ./parallel.pod \ -|| echo "Warning: pod2texi not found. Using old parallel.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel.texi -pod2texi --output=./env_parallel.texi ./env_parallel.pod \ -|| echo "Warning: pod2texi not found. Using old env_parallel.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old env_parallel.texi -pod2texi --output=./sem.texi ./sem.pod \ -|| echo "Warning: pod2texi not found. Using old sem.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old sem.texi -pod2texi --output=./sql.texi ./sql \ -|| echo "Warning: pod2texi not found. Using old sql.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old sql.texi -pod2texi --output=./niceload.texi ./niceload.pod \ -|| echo "Warning: pod2texi not found. Using old niceload.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old niceload.texi -pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_tutorial.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_tutorial.texi -pod2texi --output=./parallel_book.texi ./parallel_book.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_book.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_book.texi -pod2texi --output=./parallel_design.texi ./parallel_design.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_design.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_design.texi -pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \ -|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parallel_alternatives.texi -pod2texi --output=./parcat.texi ./parcat.pod \ -|| echo "Warning: pod2texi not found. Using old parcat.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parcat.texi -pod2texi --output=./parset.texi ./parset.pod \ -|| echo "Warning: pod2texi not found. Using old parset.texi" -/bin/bash: pod2texi: command not found -Warning: pod2texi not found. Using old parset.texi -pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \ -|| echo "Warning: pod2pdf not found. Using old parallel.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel.pdf -pod2pdf --output-file ./env_parallel.pdf ./env_parallel.pod --title "GNU Parallel with environment" \ -|| echo "Warning: pod2pdf not found. Using old env_parallel.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old env_parallel.pdf -pod2pdf --output-file ./sem.pdf ./sem.pod --title "GNU sem" \ -|| echo "Warning: pod2pdf not found. Using old sem.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old sem.pdf -pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \ -|| echo "Warning: pod2pdf not found. Using old sql.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old sql.pdf -pod2pdf --output-file ./niceload.pdf ./niceload.pod --title "GNU niceload" \ -|| echo "Warning: pod2pdf not found. Using old niceload.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old niceload.pdf -pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "GNU Parallel Tutorial" \ -|| echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_tutorial.pdf -pod2pdf --output-file ./parallel_book.pdf ./parallel_book.pod --title "GNU Parallel Book" \ -|| echo "Warning: pod2pdf not found. Using old parallel_book.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_book.pdf -pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \ -|| echo "Warning: pod2pdf not found. Using old parallel_design.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_design.pdf -pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --title "GNU Parallel alternatives" \ -|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parallel_alternatives.pdf -pod2pdf --output-file ./parcat.pdf ./parcat.pod --title "GNU parcat" \ -|| echo "Warning: pod2pdf not found. Using old parcat.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parcat.pdf -pod2pdf --output-file ./parset.pdf ./parset.pod --title "GNU parset" \ -|| echo "Warning: pod2pdf not found. Using old parset.pdf" -/bin/bash: pod2pdf: command not found -Warning: pod2pdf not found. Using old parset.pdf - /bin/mkdir -p '/usr/local/share/doc/parallel' - /usr/bin/install -c -m 644 parallel.html env_parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel_book.html parallel_design.html parallel_alternatives.html parcat.html parset.html parallel.texi env_parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel_book.texi parallel_design.texi parallel_alternatives.texi parcat.texi parset.texi parallel.pdf env_parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_book.pdf parallel_design.pdf parallel_alternatives.pdf parcat.pdf parset.pdf '/usr/local/share/doc/parallel' -pod2man --release='00000000' --center='parallel' \ - --section=1 ./parallel.pod > ./parallel.1n \ -&& mv ./parallel.1n ./parallel.1 \ -|| echo "Warning: pod2man not found. Using old parallel.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./env_parallel.pod > ./env_parallel.1n \ -&& mv ./env_parallel.1n ./env_parallel.1 \ -|| echo "Warning: pod2man not found. Using old env_parallel.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old env_parallel.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./sem.pod > ./sem.1n \ -&& mv ./sem.1n ./sem.1 \ -|| echo "Warning: pod2man not found. Using old sem.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old sem.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./sql > ./sql.1n \ -&& mv ./sql.1n ./sql.1 \ -|| echo "Warning: pod2man not found. Using old sql.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old sql.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./niceload.pod > ./niceload.1n \ -&& mv ./niceload.1n ./niceload.1 \ -|| echo "Warning: pod2man not found. Using old niceload.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old niceload.1 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \ -&& mv ./parallel_tutorial.7n ./parallel_tutorial.7 \ -|| echo "Warning: pod2man not found. Using old parallel_tutorial.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_tutorial.7 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_book.pod > ./parallel_book.7n \ -&& mv ./parallel_book.7n ./parallel_book.7 \ -|| echo "Warning: pod2man not found. Using old parallel_book.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_book.7 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_design.pod > ./parallel_design.7n \ -&& mv ./parallel_design.7n ./parallel_design.7 \ -|| echo "Warning: pod2man not found. Using old parallel_design.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_design.7 -pod2man --release='00000000' --center='parallel' \ - --section=7 ./parallel_alternatives.pod > ./parallel_alternatives.7n \ -&& mv ./parallel_alternatives.7n ./parallel_alternatives.7 \ -|| echo "Warning: pod2man not found. Using old parallel_alternatives.7" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parallel_alternatives.7 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./parcat.pod > ./parcat.1n \ -&& mv ./parcat.1n ./parcat.1 \ -|| echo "Warning: pod2man not found. Using old parcat.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parcat.1 -pod2man --release='00000000' --center='parallel' \ - --section=1 ./parset.pod > ./parset.1n \ -&& mv ./parset.1n ./parset.1 \ -|| echo "Warning: pod2man not found. Using old parset.1" -/bin/bash: pod2man: command not found -Warning: pod2man not found. Using old parset.1 - /bin/mkdir -p '/usr/local/share/man/man1' - /usr/bin/install -c -m 644 parallel.1 env_parallel.1 sem.1 sql.1 niceload.1 parcat.1 parset.1 '/usr/local/share/man/man1' - /bin/mkdir -p '/usr/local/share/man/man7' - /usr/bin/install -c -m 644 parallel_tutorial.7 parallel_book.7 parallel_design.7 parallel_alternatives.7 '/usr/local/share/man/man7' -make[0]: Leaving directory '/tmp/parallel-00000000/src' -make[0]: Leaving directory '/tmp/parallel-00000000/src' -make[0]: Entering directory '/tmp/parallel-00000000' -make[0]: Entering directory '/tmp/parallel-00000000' -make[0]: Nothing to be done for 'install-exec-am'. -make[0]: Nothing to be done for 'install-data-am'. -make[0]: Leaving directory '/tmp/parallel-00000000' -make[0]: Leaving directory '/tmp/parallel-00000000' diff --git a/testsuite/wanted-results/parallel-local-0.3s b/testsuite/wanted-results/parallel-local-0.3s index 99eb67e5..a2ec62ee 100644 --- a/testsuite/wanted-results/parallel-local-0.3s +++ b/testsuite/wanted-results/parallel-local-0.3s @@ -389,7 +389,7 @@ d (echo a_b' ';echo c;echo d) | xargs -L1 echo a_b c d - echo '### xargs -L2 echo' +echo '### xargs -L2 echo' ### xargs -L2 echo (echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo a_b c d @@ -400,7 +400,7 @@ e (echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo a_b c d e - echo '### xargs -l echo' +echo '### xargs -l echo' ### xargs -l echo (echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong a_b c @@ -414,7 +414,7 @@ e a_b c d e - echo '### xargs -l2 echo' +echo '### xargs -l2 echo' ### xargs -l2 echo (echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo a_b c d @@ -425,7 +425,7 @@ e (echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo a_b c d e - echo '### xargs -l1 echo' +echo '### xargs -l1 echo' ### xargs -l1 echo (echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo a_b c @@ -439,7 +439,7 @@ e a_b c d e - echo '### xargs --max-lines=2 echo' +echo '### xargs --max-lines=2 echo' ### xargs --max-lines=2 echo (echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo a_b c d @@ -450,7 +450,7 @@ e (echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo a_b c d e - echo '### xargs --max-lines echo' +echo '### xargs --max-lines echo' ### xargs --max-lines echo (echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong a_b c @@ -464,7 +464,7 @@ e a_b c d e - echo '### test too long args' +echo '### test too long args' ### test too long args perl -e 'print "z"x1000000' | parallel echo 2>&1 parallel: Error: Command line too long (1000005 >= 131049) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... @@ -491,7 +491,7 @@ xargs: argument line too long 7 8 9 10 parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... - echo '### Test -x' +echo '### Test -x' ### Test -x (seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo 1 2 @@ -546,7 +546,7 @@ xargs: argument line too long 5 6 7 8 9 10 - echo '### Test -a and --arg-file: Read input from file instead of stdin' +echo '### Test -a and --arg-file: Read input from file instead of stdin' ### Test -a and --arg-file: Read input from file instead of stdin seq 1 10 >/tmp/parallel_$$-1; parallel -k -a /tmp/parallel_$$-1 echo; rm /tmp/parallel_$$-1 1 @@ -570,7 +570,7 @@ xargs: argument line too long 8 9 10 - echo '### Test -i and --replace: Replace with argument' +echo '### Test -i and --replace: Replace with argument' ### Test -i and --replace: Replace with argument (echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce replace @@ -590,13 +590,13 @@ replace replace (echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce replace - echo '### Test -E: Artificial end-of-file' +echo '### Test -E: Artificial end-of-file' ### Test -E: Artificial end-of-file (echo include this; echo END; echo not this) | parallel -k -E END echo include this (echo include this; echo END; echo not this) | parallel -k -EEND echo include this - echo '### Test -e and --eof: Artificial end-of-file' +echo '### Test -e and --eof: Artificial end-of-file' ### Test -e and --eof: Artificial end-of-file (echo include this; echo END; echo not this) | parallel -k -e END echo include this @@ -606,7 +606,7 @@ include this include this (echo include this; echo END; echo not this) | parallel -k --eof END echo include this - echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)' +echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)' ### Test -n and --max-args: Max number of args per line (only with -X and -m) (echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo line 1 @@ -650,7 +650,7 @@ line 3 (echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo line 1 line 1 line 2 - echo '### Test --max-procs and -P: Number of processes' +echo '### Test --max-procs and -P: Number of processes' ### Test --max-procs and -P: Number of processes seq 1 10 | parallel -k --max-procs +0 echo max proc max proc 1 @@ -674,7 +674,7 @@ max proc 10 200% proc 8 200% proc 9 200% proc 10 - echo '### Test --delimiter and -d: Delimiter instead of newline' +echo '### Test --delimiter and -d: Delimiter instead of newline' ### Test --delimiter and -d: Delimiter instead of newline echo '# Yes there is supposed to be an extra newline for -d N' # Yes there is supposed to be an extra newline for -d N @@ -696,7 +696,7 @@ line 3 delimiter TAB line 1 line 2 line 3 - echo '### Test --max-chars and -s: Max number of chars in a line' +echo '### Test --max-chars and -s: Max number of chars in a line' ### Test --max-chars and -s: Max number of chars in a line (echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo line 1 line 1 @@ -704,11 +704,11 @@ line 2 (echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo line 1 line 1 line 2 - echo '### Test --no-run-if-empty and -r: This should give no output' +echo '### Test --no-run-if-empty and -r: This should give no output' ### Test --no-run-if-empty and -r: This should give no output echo " " | parallel -r echo echo " " | parallel --no-run-if-empty echo - echo '### Test --help and -h: Help output (just check we get the same amount of lines)' +echo '### Test --help and -h: Help output (just check we get the same amount of lines)' ### Test --help and -h: Help output (just check we get the same amount of lines) echo Output from -h and --help Output from -h and --help @@ -716,11 +716,11 @@ Output from -h and --help 37 parallel --help | wc -l 37 - echo '### Test --version: Version output (just check we get the same amount of lines)' +echo '### Test --version: Version output (just check we get the same amount of lines)' ### Test --version: Version output (just check we get the same amount of lines) parallel --version | wc -l -11 - echo '### Test --verbose and -t' +10 +echo '### Test --verbose and -t' ### Test --verbose and -t (echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null echo bar @@ -730,7 +730,7 @@ echo far echo bar echo car echo far - echo '### Test --show-limits' +echo '### Test --show-limits' ### Test --show-limits (echo b; echo c; echo f) | parallel -k --show-limits echo {}ar Maximal size of command: 131049 @@ -750,11 +750,11 @@ Execution of will continue now, and it will try to read its input and run commands; if this is not what you wanted to happen, please press CTRL-D or CTRL-C bar car far - echo '### Test empty line as input' +echo '### Test empty line as input' ### Test empty line as input echo | parallel echo empty input line empty input line - echo '### Tests if (cat | sh) works' +echo '### Tests if (cat | sh) works' ### Tests if (cat | sh) works perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort a 1 @@ -807,7 +807,7 @@ b 6 b 7 b 8 b 9 - echo '### Test if xargs-mode works' +echo '### Test if xargs-mode works' ### Test if xargs-mode works perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort a 1 @@ -860,12 +860,12 @@ b 6 b 7 b 8 b 9 - echo '### Test -q' +echo '### Test -q' ### Test -q parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i" a b h i - echo '### Test -q {#}' +echo '### Test -q {#}' ### Test -q {#} parallel -kq echo {#} ::: a b 1 @@ -876,7 +876,7 @@ h i parallel -kq echo {\\#} ::: a b {\#} a {\#} b - echo '### Test long commands do not take up all memory' +echo '### Test long commands do not take up all memory' ### Test long commands do not take up all memory seq 1 100 | parallel -j0 -qv perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2>/dev/null | sort 1 @@ -1079,7 +1079,7 @@ perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 97 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 98 perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 99 - echo '### Test 0-arguments' +echo '### Test 0-arguments' ### Test 0-arguments seq 1 2 | parallel -k -n0 echo n0 n0 @@ -1090,34 +1090,34 @@ L0 seq 1 2 | parallel -k -N0 echo N0 N0 N0 - echo '### Because of --tollef -l, then -l0 == -l1, sorry' +echo '### Because of --tollef -l, then -l0 == -l1, sorry' ### Because of --tollef -l, then -l0 == -l1, sorry seq 1 2 | parallel -k -l0 echo l0 l0 1 l0 2 - echo '### Test replace {}' +echo '### Test replace {}' ### Test replace {} seq 1 2 | parallel -k -N0 echo replace {} curlies replace curlies replace curlies - echo '### Test arguments on commandline' +echo '### Test arguments on commandline' ### Test arguments on commandline parallel -k -N0 echo args on cmdline ::: 1 2 args on cmdline args on cmdline - echo '### Test --nice locally' +echo '### Test --nice locally' ### Test --nice locally parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b PAR=a bash -c "echo \$PAR b" a b - echo '### Test distribute arguments at EOF to 2 jobslots' +echo '### Test distribute arguments at EOF to 2 jobslots' ### Test distribute arguments at EOF to 2 jobslots seq 1 92 | parallel -j2 -kX -s 100 echo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 - echo '### Test distribute arguments at EOF to 5 jobslots' +echo '### Test distribute arguments at EOF to 5 jobslots' ### Test distribute arguments at EOF to 5 jobslots seq 1 92 | parallel -j5 -kX -s 100 echo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @@ -1127,7 +1127,7 @@ a b 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 - echo '### Test distribute arguments at EOF to infinity jobslots' +echo '### Test distribute arguments at EOF to infinity jobslots' ### Test distribute arguments at EOF to infinity jobslots seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 @@ -1159,26 +1159,26 @@ a b 90 91 92 - echo '### Test -N is not broken by distribution - single line' +echo '### Test -N is not broken by distribution - single line' ### Test -N is not broken by distribution - single line seq 9 | parallel -N 10 echo 1 2 3 4 5 6 7 8 9 - echo '### Test -N is not broken by distribution - two lines' +echo '### Test -N is not broken by distribution - two lines' ### Test -N is not broken by distribution - two lines seq 19 | parallel -k -N 10 echo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - echo '### Test -N context replace' +echo '### Test -N context replace' ### Test -N context replace seq 19 | parallel -k -N 10 echo a{}b a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b a11b a12b a13b a14b a15b a16b a17b a18b a19b - echo '### Test -L context replace' +echo '### Test -L context replace' ### Test -L context replace seq 19 | parallel -k -L 10 echo a{}b a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b a11b a12b a13b a14b a15b a16b a17b a18b a19b - echo '**' +echo '**' ** echo '### Test {} multiple times in different commands' ### Test {} multiple times in different commands @@ -1251,11 +1251,9 @@ par_PARALLEL_ENV OK as file par_PARALLEL_ENV ### PARALLEL_ENV as fifo par_PARALLEL_ENV OK as fifo par_X_eta_div_zero ### bug #34422: parallel -X --eta crashes with div by zero -par_X_eta_div_zero +par_X_eta_div_zero 0 par_X_eta_div_zero Computers / CPU cores / Max jobs to run par_X_eta_div_zero 0:local / 0 / 0 -par_X_eta_div_zero -par_X_eta_div_zero Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete par_append_joblog ### can you append to a joblog using + par_append_joblog 1 par_append_joblog 1 @@ -1313,6 +1311,12 @@ par_dryrun_append_joblog echo 4 par_dryrun_append_joblog 4 par_empty bug #: par_empty true +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 @@ -1479,6 +1483,9 @@ par_slow_pipe_regexp ### bug #53718: --pipe --regexp -N blocks par_slow_pipe_regexp This should take a few ms, but took more than 2 hours par_slow_pipe_regexp 979 980 5875 par_slow_pipe_regexp 25022 25022 150131 +par_space_envvar ### bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu' +par_space_envvar echo 'space in envvar OK' +par_space_envvar space in envvar OK par_tagstring_pipe bug #50228: --pipe --tagstring broken par_tagstring_pipe 1 1000 1000 3893 par_tagstring_pipe 2 1000 1000 5000 @@ -1513,6 +1520,14 @@ par_tee 4 -l 122853 par_tee 4 -c 815290 par_tee 5 -l 122853 par_tee 5 -c 815290 +par_tee_too_many_args ### Fail if there are more arguments than --jobs +par_tee_too_many_args 1 1 +par_tee_too_many_args 1 10 +par_tee_too_many_args 1 11 +par_tee_too_many_args 2 2 +par_tee_too_many_args 3 3 +par_tee_too_many_args 4 4 +par_tee_too_many_args parallel: Error: --tee requres --jobs to be higher. Try --jobs 0. par_testquote ash "#&/ par_testquote ash ()*=?' par_testquote bash "#&/ diff --git a/testsuite/wanted-results/parallel-local-100s b/testsuite/wanted-results/parallel-local-100s index cc723cd3..817eb3dc 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 1 +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 1 +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 @@ -380,7 +380,7 @@ par_test_build_and_install ! -type d ! -perm -444 -links 1 -exec chmod a+r {} par_test_build_and_install ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ par_test_build_and_install ! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \ par_test_build_and_install || chmod -R a+r "parallel-00000000" -par_test_build_and_install tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >parallel-00000000.tar.gz +par_test_build_and_install tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | eval GZIP= gzip --best -c >parallel-00000000.tar.gz par_test_build_and_install make[0]: Leaving directory '~/privat/parallel' par_test_build_and_install if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi par_test_build_and_install make[0]: Leaving directory '~/privat/parallel' diff --git a/testsuite/wanted-results/parallel-local-10s b/testsuite/wanted-results/parallel-local-10s index 179c1191..f71a7713 100644 --- a/testsuite/wanted-results/parallel-local-10s +++ b/testsuite/wanted-results/parallel-local-10s @@ -27,8 +27,8 @@ par_interactive sleep 0.1; echo opt-p 2 ?...n par_interactive sleep 0.1; echo opt-p 3 ?...y par_interactive spawn /tmp/parallel-script-for-expect par_k ### Test -k -par_k parallel: Warning: Only enough file handles to run 9 jobs in parallel. -par_k parallel: Warning: Running 'parallel -j0 -N 9 --pipe parallel -j0' or +par_k parallel: Warning: Only enough file handles to run 8 jobs in parallel. +par_k parallel: Warning: Running 'parallel -j0 -N 8 --pipe parallel -j0' or par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf par_k parallel: Warning: or /proc/sys/fs/file-max may help. par_k begin @@ -243,22 +243,9 @@ par_kill_children_timeout 0 0 0 par_line_buffer ### --line-buffer par_line_buffer 55 55 120 par_line_buffer These must diff: 1 -par_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 2 50 250050 +par_long_line_remote 3 50 250050 par_maxlinelen_X_I ### Test max line length -X -I par_maxlinelen_X_I 3cfc69ee81b0fe7fdbe8eb059ad2da61 - par_maxlinelen_X_I Chars per line (817788/7): 116826 @@ -338,10 +325,10 @@ par_results_compress 0 par_results_compress 1 par_results_csv bug #: --results csv par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr -par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", @@ -366,10 +353,10 @@ par_results_csv --header : --tag ", par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --header : --tag ", par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr -par_results_csv --header : --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --header : --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --header : --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, @@ -394,15 +381,15 @@ par_results_csv --header : ", par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 par_results_csv --header : ", par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr -par_results_csv --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", -par_results_csv --tag --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile", +par_results_csv --tag --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile", par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile", @@ -452,15 +439,15 @@ par_results_csv --tag ", par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12 par_results_csv --tag ", par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr -par_results_csv --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, -par_results_csv --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile, +par_results_csv --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile, par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile, @@ -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 @@ -528,9 +531,9 @@ par_slow_total_jobs 2 par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds. par_sockets_cores_threads ### Test --number-of-sockets/cores/threads par_sockets_cores_threads 1 -par_sockets_cores_threads 2 -par_sockets_cores_threads 2 -par_sockets_cores_threads 2 +par_sockets_cores_threads 4 +par_sockets_cores_threads 8 +par_sockets_cores_threads 4 par_sockets_cores_threads ### Test --use-sockets-instead-of-threads par_sockets_cores_threads threads done par_sockets_cores_threads sockets done 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-mem b/testsuite/wanted-results/parallel-local-mem index 6b3739ea..e556a5cd 100644 --- a/testsuite/wanted-results/parallel-local-mem +++ b/testsuite/wanted-results/parallel-local-mem @@ -15,7 +15,7 @@ par_2gb_record_reading Eats 4.7 GB par_2gb_record_reading parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1. par_2gb_record_reading 2300000004 par_2gb_records_N ### bug #44358: 2 GB records cause problems for -N -par_2gb_records_N 5 GB version: Eats 12.5 GB +par_2gb_records_N 5 GB version: Eats 12.5 GB RAM + 4 GB Swap par_2gb_records_N parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001. par_2gb_records_N parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003. par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647. @@ -28,7 +28,7 @@ par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increa par_2gb_records_N 4600000007 par_2gb_records_N 1000000001 par_2gb_records_N ### -L >4GB -par_2gb_records_N Eats 12.5 GB +par_2gb_records_N Eats 12.5 GB RAM + 6 GB Swap par_2gb_records_N parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001. par_2gb_records_N parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003. par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647. diff --git a/testsuite/wanted-results/parallel-local-race02 b/testsuite/wanted-results/parallel-local-race02 index 0bf4ddcd..831ad3e5 100644 --- a/testsuite/wanted-results/parallel-local-race02 +++ b/testsuite/wanted-results/parallel-local-race02 @@ -11,6 +11,30 @@ Control case: Burn for 2.9 seconds stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | \grep -q CPUTIME=1 1=OK 1 +par_continuous_output Test delayed output with '' +par_continuous_output -u is optimal but hard to reach, due to non-mixing +par_continuous_output 4 +par_continuous_output 0 +par_continuous_output 0 +par_continuous_output 0 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 0 +par_continuous_output Test delayed output with '-u' +par_continuous_output -u is optimal but hard to reach, due to non-mixing +par_continuous_output 4 +par_continuous_output 0 +par_continuous_output 0 +par_continuous_output 0 +par_continuous_output 0 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 1 +par_continuous_output 1 par_hostgroup ### --hostgroup force ncpu par_hostgroup parallel par_hostgroup parallel @@ -80,6 +104,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-sql01 b/testsuite/wanted-results/parallel-local-sql01 index 4ebf4c7b..8a1b3249 100644 --- a/testsuite/wanted-results/parallel-local-sql01 +++ b/testsuite/wanted-results/parallel-local-sql01 @@ -2,266 +2,266 @@ par_append $MYSQL p_wrapper par_append '$MYSQL' par_append $MYSQL Exit=0 par_append $MYSQL Exit=0 par_append $MYSQL Host Command V1 V2 Stdout Stderr -par_append $MYSQL hk sleep .3;echo 1 a 1 a 1 a\n -par_append $MYSQL hk sleep .3;echo 1 b 1 b 1 b\n -par_append $MYSQL hk sleep .3;echo 1 c 1 c 1 c\n -par_append $MYSQL hk sleep .3;echo 1 d 1 d 1 d\n -par_append $MYSQL hk sleep .3;echo 1 e 1 e 1 e\n -par_append $MYSQL hk sleep .3;echo 2 a 2 a 2 a\n -par_append $MYSQL hk sleep .3;echo 2 b 2 b 2 b\n -par_append $MYSQL hk sleep .3;echo 2 c 2 c 2 c\n -par_append $MYSQL hk sleep .3;echo 2 d 2 d 2 d\n -par_append $MYSQL hk sleep .3;echo 2 e 2 e 2 e\n -par_append $MYSQL hk sleep .3;echo 3 a 3 a 3 a\n -par_append $MYSQL hk sleep .3;echo 3 b 3 b 3 b\n -par_append $MYSQL hk sleep .3;echo 3 c 3 c 3 c\n -par_append $MYSQL hk sleep .3;echo 3 d 3 d 3 d\n -par_append $MYSQL hk sleep .3;echo 3 e 3 e 3 e\n -par_append $MYSQL hk sleep .3;echo 4 a 4 a 4 a\n -par_append $MYSQL hk sleep .3;echo 4 b 4 b 4 b\n -par_append $MYSQL hk sleep .3;echo 4 c 4 c 4 c\n -par_append $MYSQL hk sleep .3;echo 4 d 4 d 4 d\n -par_append $MYSQL hk sleep .3;echo 4 e 4 e 4 e\n -par_append $MYSQL hk sleep .3;echo 5 a 5 a 5 a\n -par_append $MYSQL hk sleep .3;echo 5 b 5 b 5 b\n -par_append $MYSQL hk sleep .3;echo 5 c 5 c 5 c\n -par_append $MYSQL hk sleep .3;echo 5 d 5 d 5 d\n -par_append $MYSQL hk sleep .3;echo 5 e 5 e 5 e\n -par_append $MYSQL hk sleep .3;echo 11 A 11 A 11 A\n -par_append $MYSQL hk sleep .3;echo 11 B 11 B 11 B\n -par_append $MYSQL hk sleep .3;echo 11 C 11 C 11 C\n -par_append $MYSQL hk sleep .3;echo 11 D 11 D 11 D\n -par_append $MYSQL hk sleep .3;echo 11 E 11 E 11 E\n -par_append $MYSQL hk sleep .3;echo 12 A 12 A 12 A\n -par_append $MYSQL hk sleep .3;echo 12 B 12 B 12 B\n -par_append $MYSQL hk sleep .3;echo 12 C 12 C 12 C\n -par_append $MYSQL hk sleep .3;echo 12 D 12 D 12 D\n -par_append $MYSQL hk sleep .3;echo 12 E 12 E 12 E\n -par_append $MYSQL hk sleep .3;echo 13 A 13 A 13 A\n -par_append $MYSQL hk sleep .3;echo 13 B 13 B 13 B\n -par_append $MYSQL hk sleep .3;echo 13 C 13 C 13 C\n -par_append $MYSQL hk sleep .3;echo 13 D 13 D 13 D\n -par_append $MYSQL hk sleep .3;echo 13 E 13 E 13 E\n -par_append $MYSQL hk sleep .3;echo 14 A 14 A 14 A\n -par_append $MYSQL hk sleep .3;echo 14 B 14 B 14 B\n -par_append $MYSQL hk sleep .3;echo 14 C 14 C 14 C\n -par_append $MYSQL hk sleep .3;echo 14 D 14 D 14 D\n -par_append $MYSQL hk sleep .3;echo 14 E 14 E 14 E\n -par_append $MYSQL hk sleep .3;echo 15 A 15 A 15 A\n -par_append $MYSQL hk sleep .3;echo 15 B 15 B 15 B\n -par_append $MYSQL hk sleep .3;echo 15 C 15 C 15 C\n -par_append $MYSQL hk sleep .3;echo 15 D 15 D 15 D\n -par_append $MYSQL hk sleep .3;echo 15 E 15 E 15 E\n +par_append $MYSQL hostname sleep .3;echo 1 a 1 a 1 a\n +par_append $MYSQL hostname sleep .3;echo 1 b 1 b 1 b\n +par_append $MYSQL hostname sleep .3;echo 1 c 1 c 1 c\n +par_append $MYSQL hostname sleep .3;echo 1 d 1 d 1 d\n +par_append $MYSQL hostname sleep .3;echo 1 e 1 e 1 e\n +par_append $MYSQL hostname sleep .3;echo 2 a 2 a 2 a\n +par_append $MYSQL hostname sleep .3;echo 2 b 2 b 2 b\n +par_append $MYSQL hostname sleep .3;echo 2 c 2 c 2 c\n +par_append $MYSQL hostname sleep .3;echo 2 d 2 d 2 d\n +par_append $MYSQL hostname sleep .3;echo 2 e 2 e 2 e\n +par_append $MYSQL hostname sleep .3;echo 3 a 3 a 3 a\n +par_append $MYSQL hostname sleep .3;echo 3 b 3 b 3 b\n +par_append $MYSQL hostname sleep .3;echo 3 c 3 c 3 c\n +par_append $MYSQL hostname sleep .3;echo 3 d 3 d 3 d\n +par_append $MYSQL hostname sleep .3;echo 3 e 3 e 3 e\n +par_append $MYSQL hostname sleep .3;echo 4 a 4 a 4 a\n +par_append $MYSQL hostname sleep .3;echo 4 b 4 b 4 b\n +par_append $MYSQL hostname sleep .3;echo 4 c 4 c 4 c\n +par_append $MYSQL hostname sleep .3;echo 4 d 4 d 4 d\n +par_append $MYSQL hostname sleep .3;echo 4 e 4 e 4 e\n +par_append $MYSQL hostname sleep .3;echo 5 a 5 a 5 a\n +par_append $MYSQL hostname sleep .3;echo 5 b 5 b 5 b\n +par_append $MYSQL hostname sleep .3;echo 5 c 5 c 5 c\n +par_append $MYSQL hostname sleep .3;echo 5 d 5 d 5 d\n +par_append $MYSQL hostname sleep .3;echo 5 e 5 e 5 e\n +par_append $MYSQL hostname sleep .3;echo 11 A 11 A 11 A\n +par_append $MYSQL hostname sleep .3;echo 11 B 11 B 11 B\n +par_append $MYSQL hostname sleep .3;echo 11 C 11 C 11 C\n +par_append $MYSQL hostname sleep .3;echo 11 D 11 D 11 D\n +par_append $MYSQL hostname sleep .3;echo 11 E 11 E 11 E\n +par_append $MYSQL hostname sleep .3;echo 12 A 12 A 12 A\n +par_append $MYSQL hostname sleep .3;echo 12 B 12 B 12 B\n +par_append $MYSQL hostname sleep .3;echo 12 C 12 C 12 C\n +par_append $MYSQL hostname sleep .3;echo 12 D 12 D 12 D\n +par_append $MYSQL hostname sleep .3;echo 12 E 12 E 12 E\n +par_append $MYSQL hostname sleep .3;echo 13 A 13 A 13 A\n +par_append $MYSQL hostname sleep .3;echo 13 B 13 B 13 B\n +par_append $MYSQL hostname sleep .3;echo 13 C 13 C 13 C\n +par_append $MYSQL hostname sleep .3;echo 13 D 13 D 13 D\n +par_append $MYSQL hostname sleep .3;echo 13 E 13 E 13 E\n +par_append $MYSQL hostname sleep .3;echo 14 A 14 A 14 A\n +par_append $MYSQL hostname sleep .3;echo 14 B 14 B 14 B\n +par_append $MYSQL hostname sleep .3;echo 14 C 14 C 14 C\n +par_append $MYSQL hostname sleep .3;echo 14 D 14 D 14 D\n +par_append $MYSQL hostname sleep .3;echo 14 E 14 E 14 E\n +par_append $MYSQL hostname sleep .3;echo 15 A 15 A 15 A\n +par_append $MYSQL hostname sleep .3;echo 15 B 15 B 15 B\n +par_append $MYSQL hostname sleep .3;echo 15 C 15 C 15 C\n +par_append $MYSQL hostname sleep .3;echo 15 D 15 D 15 D\n +par_append $MYSQL hostname sleep .3;echo 15 E 15 E 15 E\n par_append $PG p_wrapper par_append '$PG' par_append $PG Exit=0 par_append $PG Exit=0 -par_append $PG host | command | v1 | v2 | stdout | stderr -par_append $PG ------+--------------------+----+----+--------+-------- -par_append $PG hk | sleep .3;echo 1 a | 1 | a | 1 a +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 1 b | 1 | b | 1 b +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 1 c | 1 | c | 1 c +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 1 d | 1 | d | 1 d +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 1 e | 1 | e | 1 e +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 2 a | 2 | a | 2 a +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 2 b | 2 | b | 2 b +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 2 c | 2 | c | 2 c +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 2 d | 2 | d | 2 d +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 2 e | 2 | e | 2 e +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 3 a | 3 | a | 3 a +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 3 b | 3 | b | 3 b +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 3 c | 3 | c | 3 c +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 3 d | 3 | d | 3 d +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 3 e | 3 | e | 3 e +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 4 a | 4 | a | 4 a +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 4 b | 4 | b | 4 b +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 4 c | 4 | c | 4 c +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 4 d | 4 | d | 4 d +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 4 e | 4 | e | 4 e +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 5 a | 5 | a | 5 a +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 5 b | 5 | b | 5 b +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 5 c | 5 | c | 5 c +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 5 d | 5 | d | 5 d +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 5 e | 5 | e | 5 e +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 11 A | 11 | A | 11 A +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 11 B | 11 | B | 11 B +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 11 C | 11 | C | 11 C +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 11 D | 11 | D | 11 D +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 11 E | 11 | E | 11 E +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 12 A | 12 | A | 12 A +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 12 B | 12 | B | 12 B +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 12 C | 12 | C | 12 C +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 12 D | 12 | D | 12 D +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 12 E | 12 | E | 12 E +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 13 A | 13 | A | 13 A +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 13 B | 13 | B | 13 B +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 13 C | 13 | C | 13 C +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 13 D | 13 | D | 13 D +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 13 E | 13 | E | 13 E +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 14 A | 14 | A | 14 A +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 14 B | 14 | B | 14 B +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 14 C | 14 | C | 14 C +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 14 D | 14 | D | 14 D +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 14 E | 14 | E | 14 E +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 15 A | 15 | A | 15 A +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 15 B | 15 | B | 15 B +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 15 C | 15 | C | 15 C +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 15 D | 15 | D | 15 D +| -par_append $PG | | | | | -par_append $PG hk | sleep .3;echo 15 E | 15 | E | 15 E +| -par_append $PG | | | | | +par_append $PG host | command | v1 | v2 | stdout | stderr +par_append $PG --------+--------------------+----+----+--------+-------- +par_append $PG hostname | sleep .3;echo 1 a | 1 | a | 1 a +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 1 b | 1 | b | 1 b +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 1 c | 1 | c | 1 c +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 1 d | 1 | d | 1 d +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 1 e | 1 | e | 1 e +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 2 a | 2 | a | 2 a +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 2 b | 2 | b | 2 b +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 2 c | 2 | c | 2 c +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 2 d | 2 | d | 2 d +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 2 e | 2 | e | 2 e +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 3 a | 3 | a | 3 a +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 3 b | 3 | b | 3 b +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 3 c | 3 | c | 3 c +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 3 d | 3 | d | 3 d +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 3 e | 3 | e | 3 e +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 4 a | 4 | a | 4 a +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 4 b | 4 | b | 4 b +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 4 c | 4 | c | 4 c +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 4 d | 4 | d | 4 d +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 4 e | 4 | e | 4 e +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 5 a | 5 | a | 5 a +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 5 b | 5 | b | 5 b +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 5 c | 5 | c | 5 c +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 5 d | 5 | d | 5 d +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 5 e | 5 | e | 5 e +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 11 A | 11 | A | 11 A +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 11 B | 11 | B | 11 B +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 11 C | 11 | C | 11 C +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 11 D | 11 | D | 11 D +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 11 E | 11 | E | 11 E +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 12 A | 12 | A | 12 A +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 12 B | 12 | B | 12 B +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 12 C | 12 | C | 12 C +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 12 D | 12 | D | 12 D +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 12 E | 12 | E | 12 E +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 13 A | 13 | A | 13 A +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 13 B | 13 | B | 13 B +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 13 C | 13 | C | 13 C +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 13 D | 13 | D | 13 D +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 13 E | 13 | E | 13 E +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 14 A | 14 | A | 14 A +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 14 B | 14 | B | 14 B +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 14 C | 14 | C | 14 C +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 14 D | 14 | D | 14 D +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 14 E | 14 | E | 14 E +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 15 A | 15 | A | 15 A +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 15 B | 15 | B | 15 B +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 15 C | 15 | C | 15 C +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 15 D | 15 | D | 15 D +| +par_append $PG | | | | | +par_append $PG hostname | sleep .3;echo 15 E | 15 | E | 15 E +| +par_append $PG | | | | | par_append $PG (50 rows) par_append $PG par_append $SQLITE p_wrapper par_append '$SQLITE' par_append $SQLITE Exit=0 par_append $SQLITE Exit=0 par_append $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_append $SQLITE hk|sleep .3;echo 1 a|1|a|1 a +par_append $SQLITE hostname|sleep .3;echo 1 a|1|a|1 a par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 1 b|1|b|1 b +par_append $SQLITE hostname|sleep .3;echo 1 b|1|b|1 b par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 1 c|1|c|1 c +par_append $SQLITE hostname|sleep .3;echo 1 c|1|c|1 c par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 1 d|1|d|1 d +par_append $SQLITE hostname|sleep .3;echo 1 d|1|d|1 d par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 1 e|1|e|1 e +par_append $SQLITE hostname|sleep .3;echo 1 e|1|e|1 e par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 2 a|2|a|2 a +par_append $SQLITE hostname|sleep .3;echo 2 a|2|a|2 a par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 2 b|2|b|2 b +par_append $SQLITE hostname|sleep .3;echo 2 b|2|b|2 b par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 2 c|2|c|2 c +par_append $SQLITE hostname|sleep .3;echo 2 c|2|c|2 c par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 2 d|2|d|2 d +par_append $SQLITE hostname|sleep .3;echo 2 d|2|d|2 d par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 2 e|2|e|2 e +par_append $SQLITE hostname|sleep .3;echo 2 e|2|e|2 e par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 3 a|3|a|3 a +par_append $SQLITE hostname|sleep .3;echo 3 a|3|a|3 a par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 3 b|3|b|3 b +par_append $SQLITE hostname|sleep .3;echo 3 b|3|b|3 b par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 3 c|3|c|3 c +par_append $SQLITE hostname|sleep .3;echo 3 c|3|c|3 c par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 3 d|3|d|3 d +par_append $SQLITE hostname|sleep .3;echo 3 d|3|d|3 d par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 3 e|3|e|3 e +par_append $SQLITE hostname|sleep .3;echo 3 e|3|e|3 e par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 4 a|4|a|4 a +par_append $SQLITE hostname|sleep .3;echo 4 a|4|a|4 a par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 4 b|4|b|4 b +par_append $SQLITE hostname|sleep .3;echo 4 b|4|b|4 b par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 4 c|4|c|4 c +par_append $SQLITE hostname|sleep .3;echo 4 c|4|c|4 c par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 4 d|4|d|4 d +par_append $SQLITE hostname|sleep .3;echo 4 d|4|d|4 d par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 4 e|4|e|4 e +par_append $SQLITE hostname|sleep .3;echo 4 e|4|e|4 e par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 5 a|5|a|5 a +par_append $SQLITE hostname|sleep .3;echo 5 a|5|a|5 a par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 5 b|5|b|5 b +par_append $SQLITE hostname|sleep .3;echo 5 b|5|b|5 b par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 5 c|5|c|5 c +par_append $SQLITE hostname|sleep .3;echo 5 c|5|c|5 c par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 5 d|5|d|5 d +par_append $SQLITE hostname|sleep .3;echo 5 d|5|d|5 d par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 5 e|5|e|5 e +par_append $SQLITE hostname|sleep .3;echo 5 e|5|e|5 e par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 11 A|11|A|11 A +par_append $SQLITE hostname|sleep .3;echo 11 A|11|A|11 A par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 11 B|11|B|11 B +par_append $SQLITE hostname|sleep .3;echo 11 B|11|B|11 B par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 11 C|11|C|11 C +par_append $SQLITE hostname|sleep .3;echo 11 C|11|C|11 C par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 11 D|11|D|11 D +par_append $SQLITE hostname|sleep .3;echo 11 D|11|D|11 D par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 11 E|11|E|11 E +par_append $SQLITE hostname|sleep .3;echo 11 E|11|E|11 E par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 12 A|12|A|12 A +par_append $SQLITE hostname|sleep .3;echo 12 A|12|A|12 A par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 12 B|12|B|12 B +par_append $SQLITE hostname|sleep .3;echo 12 B|12|B|12 B par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 12 C|12|C|12 C +par_append $SQLITE hostname|sleep .3;echo 12 C|12|C|12 C par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 12 D|12|D|12 D +par_append $SQLITE hostname|sleep .3;echo 12 D|12|D|12 D par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 12 E|12|E|12 E +par_append $SQLITE hostname|sleep .3;echo 12 E|12|E|12 E par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 13 A|13|A|13 A +par_append $SQLITE hostname|sleep .3;echo 13 A|13|A|13 A par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 13 B|13|B|13 B +par_append $SQLITE hostname|sleep .3;echo 13 B|13|B|13 B par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 13 C|13|C|13 C +par_append $SQLITE hostname|sleep .3;echo 13 C|13|C|13 C par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 13 D|13|D|13 D +par_append $SQLITE hostname|sleep .3;echo 13 D|13|D|13 D par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 13 E|13|E|13 E +par_append $SQLITE hostname|sleep .3;echo 13 E|13|E|13 E par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 14 A|14|A|14 A +par_append $SQLITE hostname|sleep .3;echo 14 A|14|A|14 A par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 14 B|14|B|14 B +par_append $SQLITE hostname|sleep .3;echo 14 B|14|B|14 B par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 14 C|14|C|14 C +par_append $SQLITE hostname|sleep .3;echo 14 C|14|C|14 C par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 14 D|14|D|14 D +par_append $SQLITE hostname|sleep .3;echo 14 D|14|D|14 D par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 14 E|14|E|14 E +par_append $SQLITE hostname|sleep .3;echo 14 E|14|E|14 E par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 15 A|15|A|15 A +par_append $SQLITE hostname|sleep .3;echo 15 A|15|A|15 A par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 15 B|15|B|15 B +par_append $SQLITE hostname|sleep .3;echo 15 B|15|B|15 B par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 15 C|15|C|15 C +par_append $SQLITE hostname|sleep .3;echo 15 C|15|C|15 C par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 15 D|15|D|15 D +par_append $SQLITE hostname|sleep .3;echo 15 D|15|D|15 D par_append $SQLITE | -par_append $SQLITE hk|sleep .3;echo 15 E|15|E|15 E +par_append $SQLITE hostname|sleep .3;echo 15 E|15|E|15 E par_append $SQLITE | par_empty $MYSQL p_wrapper par_empty '$MYSQL' par_empty $MYSQL Exit=0 @@ -271,7 +271,7 @@ par_empty $PG p_wrapper par_empty '$PG' par_empty $PG Exit=0 par_empty $PG Exit=0 par_empty $PG ERROR: relation "TBL99999" does not exist -par_empty $PG LINE 1: select Host,Command,V1,V2,Stdout,Stderr from TBL99999 order ... +par_empty $PG LINE 1: select Host,Command,V1,V2,Stdout,Stderr from TBL99999 order par_empty $PG ^ par_empty $SQLITE p_wrapper par_empty '$SQLITE' par_empty $SQLITE Exit=0 @@ -307,31 +307,31 @@ par_shuf $MYSQL OK: Diff bigger than 2500 char par_shuf $MYSQL Exit=0 par_shuf $MYSQL Exit=0 par_shuf $MYSQL Host Command V1 V2 Stdout Stderr -par_shuf $MYSQL hk sleep .3;echo 1 a 1 a /tmp/parallel-bug49791-c20/1/1/2/a/stdout /tmp/parallel-bug49791-c20/1/1/2/a/stderr -par_shuf $MYSQL hk sleep .3;echo 1 b 1 b /tmp/parallel-bug49791-c20/1/1/2/b/stdout /tmp/parallel-bug49791-c20/1/1/2/b/stderr -par_shuf $MYSQL hk sleep .3;echo 1 c 1 c /tmp/parallel-bug49791-c20/1/1/2/c/stdout /tmp/parallel-bug49791-c20/1/1/2/c/stderr -par_shuf $MYSQL hk sleep .3;echo 1 d 1 d /tmp/parallel-bug49791-c20/1/1/2/d/stdout /tmp/parallel-bug49791-c20/1/1/2/d/stderr -par_shuf $MYSQL hk sleep .3;echo 1 e 1 e /tmp/parallel-bug49791-c20/1/1/2/e/stdout /tmp/parallel-bug49791-c20/1/1/2/e/stderr -par_shuf $MYSQL hk sleep .3;echo 2 a 2 a /tmp/parallel-bug49791-c20/1/2/2/a/stdout /tmp/parallel-bug49791-c20/1/2/2/a/stderr -par_shuf $MYSQL hk sleep .3;echo 2 b 2 b /tmp/parallel-bug49791-c20/1/2/2/b/stdout /tmp/parallel-bug49791-c20/1/2/2/b/stderr -par_shuf $MYSQL hk sleep .3;echo 2 c 2 c /tmp/parallel-bug49791-c20/1/2/2/c/stdout /tmp/parallel-bug49791-c20/1/2/2/c/stderr -par_shuf $MYSQL hk sleep .3;echo 2 d 2 d /tmp/parallel-bug49791-c20/1/2/2/d/stdout /tmp/parallel-bug49791-c20/1/2/2/d/stderr -par_shuf $MYSQL hk sleep .3;echo 2 e 2 e /tmp/parallel-bug49791-c20/1/2/2/e/stdout /tmp/parallel-bug49791-c20/1/2/2/e/stderr -par_shuf $MYSQL hk sleep .3;echo 3 a 3 a /tmp/parallel-bug49791-c20/1/3/2/a/stdout /tmp/parallel-bug49791-c20/1/3/2/a/stderr -par_shuf $MYSQL hk sleep .3;echo 3 b 3 b /tmp/parallel-bug49791-c20/1/3/2/b/stdout /tmp/parallel-bug49791-c20/1/3/2/b/stderr -par_shuf $MYSQL hk sleep .3;echo 3 c 3 c /tmp/parallel-bug49791-c20/1/3/2/c/stdout /tmp/parallel-bug49791-c20/1/3/2/c/stderr -par_shuf $MYSQL hk sleep .3;echo 3 d 3 d /tmp/parallel-bug49791-c20/1/3/2/d/stdout /tmp/parallel-bug49791-c20/1/3/2/d/stderr -par_shuf $MYSQL hk sleep .3;echo 3 e 3 e /tmp/parallel-bug49791-c20/1/3/2/e/stdout /tmp/parallel-bug49791-c20/1/3/2/e/stderr -par_shuf $MYSQL hk sleep .3;echo 4 a 4 a /tmp/parallel-bug49791-c20/1/4/2/a/stdout /tmp/parallel-bug49791-c20/1/4/2/a/stderr -par_shuf $MYSQL hk sleep .3;echo 4 b 4 b /tmp/parallel-bug49791-c20/1/4/2/b/stdout /tmp/parallel-bug49791-c20/1/4/2/b/stderr -par_shuf $MYSQL hk sleep .3;echo 4 c 4 c /tmp/parallel-bug49791-c20/1/4/2/c/stdout /tmp/parallel-bug49791-c20/1/4/2/c/stderr -par_shuf $MYSQL hk sleep .3;echo 4 d 4 d /tmp/parallel-bug49791-c20/1/4/2/d/stdout /tmp/parallel-bug49791-c20/1/4/2/d/stderr -par_shuf $MYSQL hk sleep .3;echo 4 e 4 e /tmp/parallel-bug49791-c20/1/4/2/e/stdout /tmp/parallel-bug49791-c20/1/4/2/e/stderr -par_shuf $MYSQL hk sleep .3;echo 5 a 5 a /tmp/parallel-bug49791-c20/1/5/2/a/stdout /tmp/parallel-bug49791-c20/1/5/2/a/stderr -par_shuf $MYSQL hk sleep .3;echo 5 b 5 b /tmp/parallel-bug49791-c20/1/5/2/b/stdout /tmp/parallel-bug49791-c20/1/5/2/b/stderr -par_shuf $MYSQL hk sleep .3;echo 5 c 5 c /tmp/parallel-bug49791-c20/1/5/2/c/stdout /tmp/parallel-bug49791-c20/1/5/2/c/stderr -par_shuf $MYSQL hk sleep .3;echo 5 d 5 d /tmp/parallel-bug49791-c20/1/5/2/d/stdout /tmp/parallel-bug49791-c20/1/5/2/d/stderr -par_shuf $MYSQL hk sleep .3;echo 5 e 5 e /tmp/parallel-bug49791-c20/1/5/2/e/stdout /tmp/parallel-bug49791-c20/1/5/2/e/stderr +par_shuf $MYSQL hostname sleep .3;echo 1 a 1 a /tmp/parallel-bug49791-c20/1/1/2/a/stdout /tmp/parallel-bug49791-c20/1/1/2/a/stderr +par_shuf $MYSQL hostname sleep .3;echo 1 b 1 b /tmp/parallel-bug49791-c20/1/1/2/b/stdout /tmp/parallel-bug49791-c20/1/1/2/b/stderr +par_shuf $MYSQL hostname sleep .3;echo 1 c 1 c /tmp/parallel-bug49791-c20/1/1/2/c/stdout /tmp/parallel-bug49791-c20/1/1/2/c/stderr +par_shuf $MYSQL hostname sleep .3;echo 1 d 1 d /tmp/parallel-bug49791-c20/1/1/2/d/stdout /tmp/parallel-bug49791-c20/1/1/2/d/stderr +par_shuf $MYSQL hostname sleep .3;echo 1 e 1 e /tmp/parallel-bug49791-c20/1/1/2/e/stdout /tmp/parallel-bug49791-c20/1/1/2/e/stderr +par_shuf $MYSQL hostname sleep .3;echo 2 a 2 a /tmp/parallel-bug49791-c20/1/2/2/a/stdout /tmp/parallel-bug49791-c20/1/2/2/a/stderr +par_shuf $MYSQL hostname sleep .3;echo 2 b 2 b /tmp/parallel-bug49791-c20/1/2/2/b/stdout /tmp/parallel-bug49791-c20/1/2/2/b/stderr +par_shuf $MYSQL hostname sleep .3;echo 2 c 2 c /tmp/parallel-bug49791-c20/1/2/2/c/stdout /tmp/parallel-bug49791-c20/1/2/2/c/stderr +par_shuf $MYSQL hostname sleep .3;echo 2 d 2 d /tmp/parallel-bug49791-c20/1/2/2/d/stdout /tmp/parallel-bug49791-c20/1/2/2/d/stderr +par_shuf $MYSQL hostname sleep .3;echo 2 e 2 e /tmp/parallel-bug49791-c20/1/2/2/e/stdout /tmp/parallel-bug49791-c20/1/2/2/e/stderr +par_shuf $MYSQL hostname sleep .3;echo 3 a 3 a /tmp/parallel-bug49791-c20/1/3/2/a/stdout /tmp/parallel-bug49791-c20/1/3/2/a/stderr +par_shuf $MYSQL hostname sleep .3;echo 3 b 3 b /tmp/parallel-bug49791-c20/1/3/2/b/stdout /tmp/parallel-bug49791-c20/1/3/2/b/stderr +par_shuf $MYSQL hostname sleep .3;echo 3 c 3 c /tmp/parallel-bug49791-c20/1/3/2/c/stdout /tmp/parallel-bug49791-c20/1/3/2/c/stderr +par_shuf $MYSQL hostname sleep .3;echo 3 d 3 d /tmp/parallel-bug49791-c20/1/3/2/d/stdout /tmp/parallel-bug49791-c20/1/3/2/d/stderr +par_shuf $MYSQL hostname sleep .3;echo 3 e 3 e /tmp/parallel-bug49791-c20/1/3/2/e/stdout /tmp/parallel-bug49791-c20/1/3/2/e/stderr +par_shuf $MYSQL hostname sleep .3;echo 4 a 4 a /tmp/parallel-bug49791-c20/1/4/2/a/stdout /tmp/parallel-bug49791-c20/1/4/2/a/stderr +par_shuf $MYSQL hostname sleep .3;echo 4 b 4 b /tmp/parallel-bug49791-c20/1/4/2/b/stdout /tmp/parallel-bug49791-c20/1/4/2/b/stderr +par_shuf $MYSQL hostname sleep .3;echo 4 c 4 c /tmp/parallel-bug49791-c20/1/4/2/c/stdout /tmp/parallel-bug49791-c20/1/4/2/c/stderr +par_shuf $MYSQL hostname sleep .3;echo 4 d 4 d /tmp/parallel-bug49791-c20/1/4/2/d/stdout /tmp/parallel-bug49791-c20/1/4/2/d/stderr +par_shuf $MYSQL hostname sleep .3;echo 4 e 4 e /tmp/parallel-bug49791-c20/1/4/2/e/stdout /tmp/parallel-bug49791-c20/1/4/2/e/stderr +par_shuf $MYSQL hostname sleep .3;echo 5 a 5 a /tmp/parallel-bug49791-c20/1/5/2/a/stdout /tmp/parallel-bug49791-c20/1/5/2/a/stderr +par_shuf $MYSQL hostname sleep .3;echo 5 b 5 b /tmp/parallel-bug49791-c20/1/5/2/b/stdout /tmp/parallel-bug49791-c20/1/5/2/b/stderr +par_shuf $MYSQL hostname sleep .3;echo 5 c 5 c /tmp/parallel-bug49791-c20/1/5/2/c/stdout /tmp/parallel-bug49791-c20/1/5/2/c/stderr +par_shuf $MYSQL hostname sleep .3;echo 5 d 5 d /tmp/parallel-bug49791-c20/1/5/2/d/stdout /tmp/parallel-bug49791-c20/1/5/2/d/stderr +par_shuf $MYSQL hostname sleep .3;echo 5 e 5 e /tmp/parallel-bug49791-c20/1/5/2/e/stdout /tmp/parallel-bug49791-c20/1/5/2/e/stderr par_shuf $PG p_wrapper par_shuf '$PG' par_shuf $PG 1 a par_shuf $PG 1 b @@ -361,33 +361,33 @@ par_shuf $PG 5 e par_shuf $PG OK: Diff bigger than 2500 char par_shuf $PG Exit=0 par_shuf $PG Exit=0 -par_shuf $PG host | command | v1 | v2 | stdout | stderr -par_shuf $PG ------+-------------------+----+----+-------------------------------------------+------------------------------------------- -par_shuf $PG hk | sleep .3;echo 1 a | 1 | a | /tmp/parallel-bug49791-792/1/1/2/a/stdout | /tmp/parallel-bug49791-792/1/1/2/a/stderr -par_shuf $PG hk | sleep .3;echo 1 b | 1 | b | /tmp/parallel-bug49791-792/1/1/2/b/stdout | /tmp/parallel-bug49791-792/1/1/2/b/stderr -par_shuf $PG hk | sleep .3;echo 1 c | 1 | c | /tmp/parallel-bug49791-792/1/1/2/c/stdout | /tmp/parallel-bug49791-792/1/1/2/c/stderr -par_shuf $PG hk | sleep .3;echo 1 d | 1 | d | /tmp/parallel-bug49791-792/1/1/2/d/stdout | /tmp/parallel-bug49791-792/1/1/2/d/stderr -par_shuf $PG hk | sleep .3;echo 1 e | 1 | e | /tmp/parallel-bug49791-792/1/1/2/e/stdout | /tmp/parallel-bug49791-792/1/1/2/e/stderr -par_shuf $PG hk | sleep .3;echo 2 a | 2 | a | /tmp/parallel-bug49791-792/1/2/2/a/stdout | /tmp/parallel-bug49791-792/1/2/2/a/stderr -par_shuf $PG hk | sleep .3;echo 2 b | 2 | b | /tmp/parallel-bug49791-792/1/2/2/b/stdout | /tmp/parallel-bug49791-792/1/2/2/b/stderr -par_shuf $PG hk | sleep .3;echo 2 c | 2 | c | /tmp/parallel-bug49791-792/1/2/2/c/stdout | /tmp/parallel-bug49791-792/1/2/2/c/stderr -par_shuf $PG hk | sleep .3;echo 2 d | 2 | d | /tmp/parallel-bug49791-792/1/2/2/d/stdout | /tmp/parallel-bug49791-792/1/2/2/d/stderr -par_shuf $PG hk | sleep .3;echo 2 e | 2 | e | /tmp/parallel-bug49791-792/1/2/2/e/stdout | /tmp/parallel-bug49791-792/1/2/2/e/stderr -par_shuf $PG hk | sleep .3;echo 3 a | 3 | a | /tmp/parallel-bug49791-792/1/3/2/a/stdout | /tmp/parallel-bug49791-792/1/3/2/a/stderr -par_shuf $PG hk | sleep .3;echo 3 b | 3 | b | /tmp/parallel-bug49791-792/1/3/2/b/stdout | /tmp/parallel-bug49791-792/1/3/2/b/stderr -par_shuf $PG hk | sleep .3;echo 3 c | 3 | c | /tmp/parallel-bug49791-792/1/3/2/c/stdout | /tmp/parallel-bug49791-792/1/3/2/c/stderr -par_shuf $PG hk | sleep .3;echo 3 d | 3 | d | /tmp/parallel-bug49791-792/1/3/2/d/stdout | /tmp/parallel-bug49791-792/1/3/2/d/stderr -par_shuf $PG hk | sleep .3;echo 3 e | 3 | e | /tmp/parallel-bug49791-792/1/3/2/e/stdout | /tmp/parallel-bug49791-792/1/3/2/e/stderr -par_shuf $PG hk | sleep .3;echo 4 a | 4 | a | /tmp/parallel-bug49791-792/1/4/2/a/stdout | /tmp/parallel-bug49791-792/1/4/2/a/stderr -par_shuf $PG hk | sleep .3;echo 4 b | 4 | b | /tmp/parallel-bug49791-792/1/4/2/b/stdout | /tmp/parallel-bug49791-792/1/4/2/b/stderr -par_shuf $PG hk | sleep .3;echo 4 c | 4 | c | /tmp/parallel-bug49791-792/1/4/2/c/stdout | /tmp/parallel-bug49791-792/1/4/2/c/stderr -par_shuf $PG hk | sleep .3;echo 4 d | 4 | d | /tmp/parallel-bug49791-792/1/4/2/d/stdout | /tmp/parallel-bug49791-792/1/4/2/d/stderr -par_shuf $PG hk | sleep .3;echo 4 e | 4 | e | /tmp/parallel-bug49791-792/1/4/2/e/stdout | /tmp/parallel-bug49791-792/1/4/2/e/stderr -par_shuf $PG hk | sleep .3;echo 5 a | 5 | a | /tmp/parallel-bug49791-792/1/5/2/a/stdout | /tmp/parallel-bug49791-792/1/5/2/a/stderr -par_shuf $PG hk | sleep .3;echo 5 b | 5 | b | /tmp/parallel-bug49791-792/1/5/2/b/stdout | /tmp/parallel-bug49791-792/1/5/2/b/stderr -par_shuf $PG hk | sleep .3;echo 5 c | 5 | c | /tmp/parallel-bug49791-792/1/5/2/c/stdout | /tmp/parallel-bug49791-792/1/5/2/c/stderr -par_shuf $PG hk | sleep .3;echo 5 d | 5 | d | /tmp/parallel-bug49791-792/1/5/2/d/stdout | /tmp/parallel-bug49791-792/1/5/2/d/stderr -par_shuf $PG hk | sleep .3;echo 5 e | 5 | e | /tmp/parallel-bug49791-792/1/5/2/e/stdout | /tmp/parallel-bug49791-792/1/5/2/e/stderr +par_shuf $PG host | command | v1 | v2 | stdout | stderr +par_shuf $PG --------+-------------------+----+----+-------------------------------------------+------------------------------------------- +par_shuf $PG hostname | sleep .3;echo 1 a | 1 | a | /tmp/parallel-bug49791-792/1/1/2/a/stdout | /tmp/parallel-bug49791-792/1/1/2/a/stderr +par_shuf $PG hostname | sleep .3;echo 1 b | 1 | b | /tmp/parallel-bug49791-792/1/1/2/b/stdout | /tmp/parallel-bug49791-792/1/1/2/b/stderr +par_shuf $PG hostname | sleep .3;echo 1 c | 1 | c | /tmp/parallel-bug49791-792/1/1/2/c/stdout | /tmp/parallel-bug49791-792/1/1/2/c/stderr +par_shuf $PG hostname | sleep .3;echo 1 d | 1 | d | /tmp/parallel-bug49791-792/1/1/2/d/stdout | /tmp/parallel-bug49791-792/1/1/2/d/stderr +par_shuf $PG hostname | sleep .3;echo 1 e | 1 | e | /tmp/parallel-bug49791-792/1/1/2/e/stdout | /tmp/parallel-bug49791-792/1/1/2/e/stderr +par_shuf $PG hostname | sleep .3;echo 2 a | 2 | a | /tmp/parallel-bug49791-792/1/2/2/a/stdout | /tmp/parallel-bug49791-792/1/2/2/a/stderr +par_shuf $PG hostname | sleep .3;echo 2 b | 2 | b | /tmp/parallel-bug49791-792/1/2/2/b/stdout | /tmp/parallel-bug49791-792/1/2/2/b/stderr +par_shuf $PG hostname | sleep .3;echo 2 c | 2 | c | /tmp/parallel-bug49791-792/1/2/2/c/stdout | /tmp/parallel-bug49791-792/1/2/2/c/stderr +par_shuf $PG hostname | sleep .3;echo 2 d | 2 | d | /tmp/parallel-bug49791-792/1/2/2/d/stdout | /tmp/parallel-bug49791-792/1/2/2/d/stderr +par_shuf $PG hostname | sleep .3;echo 2 e | 2 | e | /tmp/parallel-bug49791-792/1/2/2/e/stdout | /tmp/parallel-bug49791-792/1/2/2/e/stderr +par_shuf $PG hostname | sleep .3;echo 3 a | 3 | a | /tmp/parallel-bug49791-792/1/3/2/a/stdout | /tmp/parallel-bug49791-792/1/3/2/a/stderr +par_shuf $PG hostname | sleep .3;echo 3 b | 3 | b | /tmp/parallel-bug49791-792/1/3/2/b/stdout | /tmp/parallel-bug49791-792/1/3/2/b/stderr +par_shuf $PG hostname | sleep .3;echo 3 c | 3 | c | /tmp/parallel-bug49791-792/1/3/2/c/stdout | /tmp/parallel-bug49791-792/1/3/2/c/stderr +par_shuf $PG hostname | sleep .3;echo 3 d | 3 | d | /tmp/parallel-bug49791-792/1/3/2/d/stdout | /tmp/parallel-bug49791-792/1/3/2/d/stderr +par_shuf $PG hostname | sleep .3;echo 3 e | 3 | e | /tmp/parallel-bug49791-792/1/3/2/e/stdout | /tmp/parallel-bug49791-792/1/3/2/e/stderr +par_shuf $PG hostname | sleep .3;echo 4 a | 4 | a | /tmp/parallel-bug49791-792/1/4/2/a/stdout | /tmp/parallel-bug49791-792/1/4/2/a/stderr +par_shuf $PG hostname | sleep .3;echo 4 b | 4 | b | /tmp/parallel-bug49791-792/1/4/2/b/stdout | /tmp/parallel-bug49791-792/1/4/2/b/stderr +par_shuf $PG hostname | sleep .3;echo 4 c | 4 | c | /tmp/parallel-bug49791-792/1/4/2/c/stdout | /tmp/parallel-bug49791-792/1/4/2/c/stderr +par_shuf $PG hostname | sleep .3;echo 4 d | 4 | d | /tmp/parallel-bug49791-792/1/4/2/d/stdout | /tmp/parallel-bug49791-792/1/4/2/d/stderr +par_shuf $PG hostname | sleep .3;echo 4 e | 4 | e | /tmp/parallel-bug49791-792/1/4/2/e/stdout | /tmp/parallel-bug49791-792/1/4/2/e/stderr +par_shuf $PG hostname | sleep .3;echo 5 a | 5 | a | /tmp/parallel-bug49791-792/1/5/2/a/stdout | /tmp/parallel-bug49791-792/1/5/2/a/stderr +par_shuf $PG hostname | sleep .3;echo 5 b | 5 | b | /tmp/parallel-bug49791-792/1/5/2/b/stdout | /tmp/parallel-bug49791-792/1/5/2/b/stderr +par_shuf $PG hostname | sleep .3;echo 5 c | 5 | c | /tmp/parallel-bug49791-792/1/5/2/c/stdout | /tmp/parallel-bug49791-792/1/5/2/c/stderr +par_shuf $PG hostname | sleep .3;echo 5 d | 5 | d | /tmp/parallel-bug49791-792/1/5/2/d/stdout | /tmp/parallel-bug49791-792/1/5/2/d/stderr +par_shuf $PG hostname | sleep .3;echo 5 e | 5 | e | /tmp/parallel-bug49791-792/1/5/2/e/stdout | /tmp/parallel-bug49791-792/1/5/2/e/stderr par_shuf $PG (25 rows) par_shuf $PG par_shuf $SQLITE p_wrapper par_shuf '$SQLITE' @@ -420,590 +420,590 @@ par_shuf $SQLITE OK: Diff bigger than 2500 char par_shuf $SQLITE Exit=0 par_shuf $SQLITE Exit=0 par_shuf $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_shuf $SQLITE hk|sleep .3;echo 1 a|1|a|/tmp/parallel-bug49791-932/1/1/2/a/stdout|/tmp/parallel-bug49791-932/1/1/2/a/stderr -par_shuf $SQLITE hk|sleep .3;echo 1 b|1|b|/tmp/parallel-bug49791-932/1/1/2/b/stdout|/tmp/parallel-bug49791-932/1/1/2/b/stderr -par_shuf $SQLITE hk|sleep .3;echo 1 c|1|c|/tmp/parallel-bug49791-932/1/1/2/c/stdout|/tmp/parallel-bug49791-932/1/1/2/c/stderr -par_shuf $SQLITE hk|sleep .3;echo 1 d|1|d|/tmp/parallel-bug49791-932/1/1/2/d/stdout|/tmp/parallel-bug49791-932/1/1/2/d/stderr -par_shuf $SQLITE hk|sleep .3;echo 1 e|1|e|/tmp/parallel-bug49791-932/1/1/2/e/stdout|/tmp/parallel-bug49791-932/1/1/2/e/stderr -par_shuf $SQLITE hk|sleep .3;echo 2 a|2|a|/tmp/parallel-bug49791-932/1/2/2/a/stdout|/tmp/parallel-bug49791-932/1/2/2/a/stderr -par_shuf $SQLITE hk|sleep .3;echo 2 b|2|b|/tmp/parallel-bug49791-932/1/2/2/b/stdout|/tmp/parallel-bug49791-932/1/2/2/b/stderr -par_shuf $SQLITE hk|sleep .3;echo 2 c|2|c|/tmp/parallel-bug49791-932/1/2/2/c/stdout|/tmp/parallel-bug49791-932/1/2/2/c/stderr -par_shuf $SQLITE hk|sleep .3;echo 2 d|2|d|/tmp/parallel-bug49791-932/1/2/2/d/stdout|/tmp/parallel-bug49791-932/1/2/2/d/stderr -par_shuf $SQLITE hk|sleep .3;echo 2 e|2|e|/tmp/parallel-bug49791-932/1/2/2/e/stdout|/tmp/parallel-bug49791-932/1/2/2/e/stderr -par_shuf $SQLITE hk|sleep .3;echo 3 a|3|a|/tmp/parallel-bug49791-932/1/3/2/a/stdout|/tmp/parallel-bug49791-932/1/3/2/a/stderr -par_shuf $SQLITE hk|sleep .3;echo 3 b|3|b|/tmp/parallel-bug49791-932/1/3/2/b/stdout|/tmp/parallel-bug49791-932/1/3/2/b/stderr -par_shuf $SQLITE hk|sleep .3;echo 3 c|3|c|/tmp/parallel-bug49791-932/1/3/2/c/stdout|/tmp/parallel-bug49791-932/1/3/2/c/stderr -par_shuf $SQLITE hk|sleep .3;echo 3 d|3|d|/tmp/parallel-bug49791-932/1/3/2/d/stdout|/tmp/parallel-bug49791-932/1/3/2/d/stderr -par_shuf $SQLITE hk|sleep .3;echo 3 e|3|e|/tmp/parallel-bug49791-932/1/3/2/e/stdout|/tmp/parallel-bug49791-932/1/3/2/e/stderr -par_shuf $SQLITE hk|sleep .3;echo 4 a|4|a|/tmp/parallel-bug49791-932/1/4/2/a/stdout|/tmp/parallel-bug49791-932/1/4/2/a/stderr -par_shuf $SQLITE hk|sleep .3;echo 4 b|4|b|/tmp/parallel-bug49791-932/1/4/2/b/stdout|/tmp/parallel-bug49791-932/1/4/2/b/stderr -par_shuf $SQLITE hk|sleep .3;echo 4 c|4|c|/tmp/parallel-bug49791-932/1/4/2/c/stdout|/tmp/parallel-bug49791-932/1/4/2/c/stderr -par_shuf $SQLITE hk|sleep .3;echo 4 d|4|d|/tmp/parallel-bug49791-932/1/4/2/d/stdout|/tmp/parallel-bug49791-932/1/4/2/d/stderr -par_shuf $SQLITE hk|sleep .3;echo 4 e|4|e|/tmp/parallel-bug49791-932/1/4/2/e/stdout|/tmp/parallel-bug49791-932/1/4/2/e/stderr -par_shuf $SQLITE hk|sleep .3;echo 5 a|5|a|/tmp/parallel-bug49791-932/1/5/2/a/stdout|/tmp/parallel-bug49791-932/1/5/2/a/stderr -par_shuf $SQLITE hk|sleep .3;echo 5 b|5|b|/tmp/parallel-bug49791-932/1/5/2/b/stdout|/tmp/parallel-bug49791-932/1/5/2/b/stderr -par_shuf $SQLITE hk|sleep .3;echo 5 c|5|c|/tmp/parallel-bug49791-932/1/5/2/c/stdout|/tmp/parallel-bug49791-932/1/5/2/c/stderr -par_shuf $SQLITE hk|sleep .3;echo 5 d|5|d|/tmp/parallel-bug49791-932/1/5/2/d/stdout|/tmp/parallel-bug49791-932/1/5/2/d/stderr -par_shuf $SQLITE hk|sleep .3;echo 5 e|5|e|/tmp/parallel-bug49791-932/1/5/2/e/stdout|/tmp/parallel-bug49791-932/1/5/2/e/stderr +par_shuf $SQLITE hostname|sleep .3;echo 1 a|1|a|/tmp/parallel-bug49791-932/1/1/2/a/stdout|/tmp/parallel-bug49791-932/1/1/2/a/stderr +par_shuf $SQLITE hostname|sleep .3;echo 1 b|1|b|/tmp/parallel-bug49791-932/1/1/2/b/stdout|/tmp/parallel-bug49791-932/1/1/2/b/stderr +par_shuf $SQLITE hostname|sleep .3;echo 1 c|1|c|/tmp/parallel-bug49791-932/1/1/2/c/stdout|/tmp/parallel-bug49791-932/1/1/2/c/stderr +par_shuf $SQLITE hostname|sleep .3;echo 1 d|1|d|/tmp/parallel-bug49791-932/1/1/2/d/stdout|/tmp/parallel-bug49791-932/1/1/2/d/stderr +par_shuf $SQLITE hostname|sleep .3;echo 1 e|1|e|/tmp/parallel-bug49791-932/1/1/2/e/stdout|/tmp/parallel-bug49791-932/1/1/2/e/stderr +par_shuf $SQLITE hostname|sleep .3;echo 2 a|2|a|/tmp/parallel-bug49791-932/1/2/2/a/stdout|/tmp/parallel-bug49791-932/1/2/2/a/stderr +par_shuf $SQLITE hostname|sleep .3;echo 2 b|2|b|/tmp/parallel-bug49791-932/1/2/2/b/stdout|/tmp/parallel-bug49791-932/1/2/2/b/stderr +par_shuf $SQLITE hostname|sleep .3;echo 2 c|2|c|/tmp/parallel-bug49791-932/1/2/2/c/stdout|/tmp/parallel-bug49791-932/1/2/2/c/stderr +par_shuf $SQLITE hostname|sleep .3;echo 2 d|2|d|/tmp/parallel-bug49791-932/1/2/2/d/stdout|/tmp/parallel-bug49791-932/1/2/2/d/stderr +par_shuf $SQLITE hostname|sleep .3;echo 2 e|2|e|/tmp/parallel-bug49791-932/1/2/2/e/stdout|/tmp/parallel-bug49791-932/1/2/2/e/stderr +par_shuf $SQLITE hostname|sleep .3;echo 3 a|3|a|/tmp/parallel-bug49791-932/1/3/2/a/stdout|/tmp/parallel-bug49791-932/1/3/2/a/stderr +par_shuf $SQLITE hostname|sleep .3;echo 3 b|3|b|/tmp/parallel-bug49791-932/1/3/2/b/stdout|/tmp/parallel-bug49791-932/1/3/2/b/stderr +par_shuf $SQLITE hostname|sleep .3;echo 3 c|3|c|/tmp/parallel-bug49791-932/1/3/2/c/stdout|/tmp/parallel-bug49791-932/1/3/2/c/stderr +par_shuf $SQLITE hostname|sleep .3;echo 3 d|3|d|/tmp/parallel-bug49791-932/1/3/2/d/stdout|/tmp/parallel-bug49791-932/1/3/2/d/stderr +par_shuf $SQLITE hostname|sleep .3;echo 3 e|3|e|/tmp/parallel-bug49791-932/1/3/2/e/stdout|/tmp/parallel-bug49791-932/1/3/2/e/stderr +par_shuf $SQLITE hostname|sleep .3;echo 4 a|4|a|/tmp/parallel-bug49791-932/1/4/2/a/stdout|/tmp/parallel-bug49791-932/1/4/2/a/stderr +par_shuf $SQLITE hostname|sleep .3;echo 4 b|4|b|/tmp/parallel-bug49791-932/1/4/2/b/stdout|/tmp/parallel-bug49791-932/1/4/2/b/stderr +par_shuf $SQLITE hostname|sleep .3;echo 4 c|4|c|/tmp/parallel-bug49791-932/1/4/2/c/stdout|/tmp/parallel-bug49791-932/1/4/2/c/stderr +par_shuf $SQLITE hostname|sleep .3;echo 4 d|4|d|/tmp/parallel-bug49791-932/1/4/2/d/stdout|/tmp/parallel-bug49791-932/1/4/2/d/stderr +par_shuf $SQLITE hostname|sleep .3;echo 4 e|4|e|/tmp/parallel-bug49791-932/1/4/2/e/stdout|/tmp/parallel-bug49791-932/1/4/2/e/stderr +par_shuf $SQLITE hostname|sleep .3;echo 5 a|5|a|/tmp/parallel-bug49791-932/1/5/2/a/stdout|/tmp/parallel-bug49791-932/1/5/2/a/stderr +par_shuf $SQLITE hostname|sleep .3;echo 5 b|5|b|/tmp/parallel-bug49791-932/1/5/2/b/stdout|/tmp/parallel-bug49791-932/1/5/2/b/stderr +par_shuf $SQLITE hostname|sleep .3;echo 5 c|5|c|/tmp/parallel-bug49791-932/1/5/2/c/stdout|/tmp/parallel-bug49791-932/1/5/2/c/stderr +par_shuf $SQLITE hostname|sleep .3;echo 5 d|5|d|/tmp/parallel-bug49791-932/1/5/2/d/stdout|/tmp/parallel-bug49791-932/1/5/2/d/stderr +par_shuf $SQLITE hostname|sleep .3;echo 5 e|5|e|/tmp/parallel-bug49791-932/1/5/2/e/stdout|/tmp/parallel-bug49791-932/1/5/2/e/stderr par_sqlandworker $MYSQL p_wrapper par_sqlandworker '$MYSQL' par_sqlandworker $MYSQL Exit=0 par_sqlandworker $MYSQL Exit=0 par_sqlandworker $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker $MYSQL hk sleep .3;echo 1 a 1 a 1 a\n -par_sqlandworker $MYSQL hk sleep .3;echo 1 b 1 b 1 b\n -par_sqlandworker $MYSQL hk sleep .3;echo 1 c 1 c 1 c\n -par_sqlandworker $MYSQL hk sleep .3;echo 1 d 1 d 1 d\n -par_sqlandworker $MYSQL hk sleep .3;echo 1 e 1 e 1 e\n -par_sqlandworker $MYSQL hk sleep .3;echo 2 a 2 a 2 a\n -par_sqlandworker $MYSQL hk sleep .3;echo 2 b 2 b 2 b\n -par_sqlandworker $MYSQL hk sleep .3;echo 2 c 2 c 2 c\n -par_sqlandworker $MYSQL hk sleep .3;echo 2 d 2 d 2 d\n -par_sqlandworker $MYSQL hk sleep .3;echo 2 e 2 e 2 e\n -par_sqlandworker $MYSQL hk sleep .3;echo 3 a 3 a 3 a\n -par_sqlandworker $MYSQL hk sleep .3;echo 3 b 3 b 3 b\n -par_sqlandworker $MYSQL hk sleep .3;echo 3 c 3 c 3 c\n -par_sqlandworker $MYSQL hk sleep .3;echo 3 d 3 d 3 d\n -par_sqlandworker $MYSQL hk sleep .3;echo 3 e 3 e 3 e\n -par_sqlandworker $MYSQL hk sleep .3;echo 4 a 4 a 4 a\n -par_sqlandworker $MYSQL hk sleep .3;echo 4 b 4 b 4 b\n -par_sqlandworker $MYSQL hk sleep .3;echo 4 c 4 c 4 c\n -par_sqlandworker $MYSQL hk sleep .3;echo 4 d 4 d 4 d\n -par_sqlandworker $MYSQL hk sleep .3;echo 4 e 4 e 4 e\n -par_sqlandworker $MYSQL hk sleep .3;echo 5 a 5 a 5 a\n -par_sqlandworker $MYSQL hk sleep .3;echo 5 b 5 b 5 b\n -par_sqlandworker $MYSQL hk sleep .3;echo 5 c 5 c 5 c\n -par_sqlandworker $MYSQL hk sleep .3;echo 5 d 5 d 5 d\n -par_sqlandworker $MYSQL hk sleep .3;echo 5 e 5 e 5 e\n +par_sqlandworker $MYSQL hostname sleep .3;echo 1 a 1 a 1 a\n +par_sqlandworker $MYSQL hostname sleep .3;echo 1 b 1 b 1 b\n +par_sqlandworker $MYSQL hostname sleep .3;echo 1 c 1 c 1 c\n +par_sqlandworker $MYSQL hostname sleep .3;echo 1 d 1 d 1 d\n +par_sqlandworker $MYSQL hostname sleep .3;echo 1 e 1 e 1 e\n +par_sqlandworker $MYSQL hostname sleep .3;echo 2 a 2 a 2 a\n +par_sqlandworker $MYSQL hostname sleep .3;echo 2 b 2 b 2 b\n +par_sqlandworker $MYSQL hostname sleep .3;echo 2 c 2 c 2 c\n +par_sqlandworker $MYSQL hostname sleep .3;echo 2 d 2 d 2 d\n +par_sqlandworker $MYSQL hostname sleep .3;echo 2 e 2 e 2 e\n +par_sqlandworker $MYSQL hostname sleep .3;echo 3 a 3 a 3 a\n +par_sqlandworker $MYSQL hostname sleep .3;echo 3 b 3 b 3 b\n +par_sqlandworker $MYSQL hostname sleep .3;echo 3 c 3 c 3 c\n +par_sqlandworker $MYSQL hostname sleep .3;echo 3 d 3 d 3 d\n +par_sqlandworker $MYSQL hostname sleep .3;echo 3 e 3 e 3 e\n +par_sqlandworker $MYSQL hostname sleep .3;echo 4 a 4 a 4 a\n +par_sqlandworker $MYSQL hostname sleep .3;echo 4 b 4 b 4 b\n +par_sqlandworker $MYSQL hostname sleep .3;echo 4 c 4 c 4 c\n +par_sqlandworker $MYSQL hostname sleep .3;echo 4 d 4 d 4 d\n +par_sqlandworker $MYSQL hostname sleep .3;echo 4 e 4 e 4 e\n +par_sqlandworker $MYSQL hostname sleep .3;echo 5 a 5 a 5 a\n +par_sqlandworker $MYSQL hostname sleep .3;echo 5 b 5 b 5 b\n +par_sqlandworker $MYSQL hostname sleep .3;echo 5 c 5 c 5 c\n +par_sqlandworker $MYSQL hostname sleep .3;echo 5 d 5 d 5 d\n +par_sqlandworker $MYSQL hostname sleep .3;echo 5 e 5 e 5 e\n par_sqlandworker $PG p_wrapper par_sqlandworker '$PG' par_sqlandworker $PG Exit=0 par_sqlandworker $PG Exit=0 -par_sqlandworker $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker $PG ------+-------------------+----+----+--------+-------- -par_sqlandworker $PG hk | sleep .3;echo 1 a | 1 | a | 1 a +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 1 b | 1 | b | 1 b +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 1 c | 1 | c | 1 c +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 1 d | 1 | d | 1 d +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 1 e | 1 | e | 1 e +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 2 a | 2 | a | 2 a +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 2 b | 2 | b | 2 b +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 2 c | 2 | c | 2 c +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 2 d | 2 | d | 2 d +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 2 e | 2 | e | 2 e +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 3 a | 3 | a | 3 a +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 3 b | 3 | b | 3 b +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 3 c | 3 | c | 3 c +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 3 d | 3 | d | 3 d +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 3 e | 3 | e | 3 e +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 4 a | 4 | a | 4 a +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 4 b | 4 | b | 4 b +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 4 c | 4 | c | 4 c +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 4 d | 4 | d | 4 d +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 4 e | 4 | e | 4 e +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 5 a | 5 | a | 5 a +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 5 b | 5 | b | 5 b +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 5 c | 5 | c | 5 c +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 5 d | 5 | d | 5 d +| -par_sqlandworker $PG | | | | | -par_sqlandworker $PG hk | sleep .3;echo 5 e | 5 | e | 5 e +| -par_sqlandworker $PG | | | | | +par_sqlandworker $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker $PG --------+-------------------+----+----+--------+-------- +par_sqlandworker $PG hostname | sleep .3;echo 1 a | 1 | a | 1 a +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 1 b | 1 | b | 1 b +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 1 c | 1 | c | 1 c +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 1 d | 1 | d | 1 d +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 1 e | 1 | e | 1 e +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 2 a | 2 | a | 2 a +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 2 b | 2 | b | 2 b +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 2 c | 2 | c | 2 c +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 2 d | 2 | d | 2 d +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 2 e | 2 | e | 2 e +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 3 a | 3 | a | 3 a +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 3 b | 3 | b | 3 b +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 3 c | 3 | c | 3 c +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 3 d | 3 | d | 3 d +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 3 e | 3 | e | 3 e +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 4 a | 4 | a | 4 a +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 4 b | 4 | b | 4 b +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 4 c | 4 | c | 4 c +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 4 d | 4 | d | 4 d +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 4 e | 4 | e | 4 e +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 5 a | 5 | a | 5 a +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 5 b | 5 | b | 5 b +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 5 c | 5 | c | 5 c +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 5 d | 5 | d | 5 d +| +par_sqlandworker $PG | | | | | +par_sqlandworker $PG hostname | sleep .3;echo 5 e | 5 | e | 5 e +| +par_sqlandworker $PG | | | | | par_sqlandworker $PG (25 rows) par_sqlandworker $PG par_sqlandworker $SQLITE p_wrapper par_sqlandworker '$SQLITE' par_sqlandworker $SQLITE Exit=0 par_sqlandworker $SQLITE Exit=0 par_sqlandworker $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker $SQLITE hk|sleep .3;echo 1 a|1|a|1 a +par_sqlandworker $SQLITE hostname|sleep .3;echo 1 a|1|a|1 a par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 1 b|1|b|1 b +par_sqlandworker $SQLITE hostname|sleep .3;echo 1 b|1|b|1 b par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 1 c|1|c|1 c +par_sqlandworker $SQLITE hostname|sleep .3;echo 1 c|1|c|1 c par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 1 d|1|d|1 d +par_sqlandworker $SQLITE hostname|sleep .3;echo 1 d|1|d|1 d par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 1 e|1|e|1 e +par_sqlandworker $SQLITE hostname|sleep .3;echo 1 e|1|e|1 e par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 2 a|2|a|2 a +par_sqlandworker $SQLITE hostname|sleep .3;echo 2 a|2|a|2 a par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 2 b|2|b|2 b +par_sqlandworker $SQLITE hostname|sleep .3;echo 2 b|2|b|2 b par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 2 c|2|c|2 c +par_sqlandworker $SQLITE hostname|sleep .3;echo 2 c|2|c|2 c par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 2 d|2|d|2 d +par_sqlandworker $SQLITE hostname|sleep .3;echo 2 d|2|d|2 d par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 2 e|2|e|2 e +par_sqlandworker $SQLITE hostname|sleep .3;echo 2 e|2|e|2 e par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 3 a|3|a|3 a +par_sqlandworker $SQLITE hostname|sleep .3;echo 3 a|3|a|3 a par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 3 b|3|b|3 b +par_sqlandworker $SQLITE hostname|sleep .3;echo 3 b|3|b|3 b par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 3 c|3|c|3 c +par_sqlandworker $SQLITE hostname|sleep .3;echo 3 c|3|c|3 c par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 3 d|3|d|3 d +par_sqlandworker $SQLITE hostname|sleep .3;echo 3 d|3|d|3 d par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 3 e|3|e|3 e +par_sqlandworker $SQLITE hostname|sleep .3;echo 3 e|3|e|3 e par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 4 a|4|a|4 a +par_sqlandworker $SQLITE hostname|sleep .3;echo 4 a|4|a|4 a par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 4 b|4|b|4 b +par_sqlandworker $SQLITE hostname|sleep .3;echo 4 b|4|b|4 b par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 4 c|4|c|4 c +par_sqlandworker $SQLITE hostname|sleep .3;echo 4 c|4|c|4 c par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 4 d|4|d|4 d +par_sqlandworker $SQLITE hostname|sleep .3;echo 4 d|4|d|4 d par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 4 e|4|e|4 e +par_sqlandworker $SQLITE hostname|sleep .3;echo 4 e|4|e|4 e par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 5 a|5|a|5 a +par_sqlandworker $SQLITE hostname|sleep .3;echo 5 a|5|a|5 a par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 5 b|5|b|5 b +par_sqlandworker $SQLITE hostname|sleep .3;echo 5 b|5|b|5 b par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 5 c|5|c|5 c +par_sqlandworker $SQLITE hostname|sleep .3;echo 5 c|5|c|5 c par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 5 d|5|d|5 d +par_sqlandworker $SQLITE hostname|sleep .3;echo 5 d|5|d|5 d par_sqlandworker $SQLITE | -par_sqlandworker $SQLITE hk|sleep .3;echo 5 e|5|e|5 e +par_sqlandworker $SQLITE hostname|sleep .3;echo 5 e|5|e|5 e par_sqlandworker $SQLITE | par_sqlandworker_compress_linebuffer_tag $MYSQL p_wrapper par_sqlandworker_compress_linebuffer_tag '$MYSQL' par_sqlandworker_compress_linebuffer_tag $MYSQL Exit=0 par_sqlandworker_compress_linebuffer_tag $MYSQL Exit=0 par_sqlandworker_compress_linebuffer_tag $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 1 a 1 a 1 a\t1 a\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 1 b 1 b 1 b\t1 b\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 1 c 1 c 1 c\t1 c\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 1 d 1 d 1 d\t1 d\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 1 e 1 e 1 e\t1 e\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 2 a 2 a 2 a\t2 a\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 2 b 2 b 2 b\t2 b\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 2 c 2 c 2 c\t2 c\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 2 d 2 d 2 d\t2 d\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 2 e 2 e 2 e\t2 e\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 3 a 3 a 3 a\t3 a\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 3 b 3 b 3 b\t3 b\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 3 c 3 c 3 c\t3 c\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 3 d 3 d 3 d\t3 d\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 3 e 3 e 3 e\t3 e\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 4 a 4 a 4 a\t4 a\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 4 b 4 b 4 b\t4 b\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 4 c 4 c 4 c\t4 c\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 4 d 4 d 4 d\t4 d\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 4 e 4 e 4 e\t4 e\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 5 a 5 a 5 a\t5 a\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 5 b 5 b 5 b\t5 b\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 5 c 5 c 5 c\t5 c\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 5 d 5 d 5 d\t5 d\n -par_sqlandworker_compress_linebuffer_tag $MYSQL hk sleep .3;echo 5 e 5 e 5 e\t5 e\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 1 a 1 a 1 a\t1 a\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 1 b 1 b 1 b\t1 b\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 1 c 1 c 1 c\t1 c\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 1 d 1 d 1 d\t1 d\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 1 e 1 e 1 e\t1 e\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 2 a 2 a 2 a\t2 a\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 2 b 2 b 2 b\t2 b\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 2 c 2 c 2 c\t2 c\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 2 d 2 d 2 d\t2 d\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 2 e 2 e 2 e\t2 e\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 3 a 3 a 3 a\t3 a\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 3 b 3 b 3 b\t3 b\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 3 c 3 c 3 c\t3 c\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 3 d 3 d 3 d\t3 d\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 3 e 3 e 3 e\t3 e\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 4 a 4 a 4 a\t4 a\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 4 b 4 b 4 b\t4 b\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 4 c 4 c 4 c\t4 c\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 4 d 4 d 4 d\t4 d\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 4 e 4 e 4 e\t4 e\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 5 a 5 a 5 a\t5 a\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 5 b 5 b 5 b\t5 b\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 5 c 5 c 5 c\t5 c\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 5 d 5 d 5 d\t5 d\n +par_sqlandworker_compress_linebuffer_tag $MYSQL hostname sleep .3;echo 5 e 5 e 5 e\t5 e\n par_sqlandworker_compress_linebuffer_tag $PG p_wrapper par_sqlandworker_compress_linebuffer_tag '$PG' par_sqlandworker_compress_linebuffer_tag $PG Exit=0 par_sqlandworker_compress_linebuffer_tag $PG Exit=0 -par_sqlandworker_compress_linebuffer_tag $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_compress_linebuffer_tag $PG ------+-------------------+----+----+-------------+-------- -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 1 a | 1 | a | 1 a 1 a+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 1 b | 1 | b | 1 b 1 b+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 1 c | 1 | c | 1 c 1 c+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 1 d | 1 | d | 1 d 1 d+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 1 e | 1 | e | 1 e 1 e+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 2 a | 2 | a | 2 a 2 a+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 2 b | 2 | b | 2 b 2 b+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 2 c | 2 | c | 2 c 2 c+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 2 d | 2 | d | 2 d 2 d+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 2 e | 2 | e | 2 e 2 e+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 3 a | 3 | a | 3 a 3 a+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 3 b | 3 | b | 3 b 3 b+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 3 c | 3 | c | 3 c 3 c+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 3 d | 3 | d | 3 d 3 d+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 3 e | 3 | e | 3 e 3 e+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 4 a | 4 | a | 4 a 4 a+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 4 b | 4 | b | 4 b 4 b+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 4 c | 4 | c | 4 c 4 c+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 4 d | 4 | d | 4 d 4 d+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 4 e | 4 | e | 4 e 4 e+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 5 a | 5 | a | 5 a 5 a+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 5 b | 5 | b | 5 b 5 b+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 5 c | 5 | c | 5 c 5 c+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 5 d | 5 | d | 5 d 5 d+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | -par_sqlandworker_compress_linebuffer_tag $PG hk | sleep .3;echo 5 e | 5 | e | 5 e 5 e+| -par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_compress_linebuffer_tag $PG --------+-------------------+----+----+-------------+-------- +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 1 a | 1 | a | 1 a 1 a+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 1 b | 1 | b | 1 b 1 b+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 1 c | 1 | c | 1 c 1 c+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 1 d | 1 | d | 1 d 1 d+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 1 e | 1 | e | 1 e 1 e+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 2 a | 2 | a | 2 a 2 a+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 2 b | 2 | b | 2 b 2 b+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 2 c | 2 | c | 2 c 2 c+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 2 d | 2 | d | 2 d 2 d+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 2 e | 2 | e | 2 e 2 e+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 3 a | 3 | a | 3 a 3 a+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 3 b | 3 | b | 3 b 3 b+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 3 c | 3 | c | 3 c 3 c+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 3 d | 3 | d | 3 d 3 d+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 3 e | 3 | e | 3 e 3 e+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 4 a | 4 | a | 4 a 4 a+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 4 b | 4 | b | 4 b 4 b+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 4 c | 4 | c | 4 c 4 c+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 4 d | 4 | d | 4 d 4 d+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 4 e | 4 | e | 4 e 4 e+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 5 a | 5 | a | 5 a 5 a+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 5 b | 5 | b | 5 b 5 b+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 5 c | 5 | c | 5 c 5 c+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 5 d | 5 | d | 5 d 5 d+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | +par_sqlandworker_compress_linebuffer_tag $PG hostname | sleep .3;echo 5 e | 5 | e | 5 e 5 e+| +par_sqlandworker_compress_linebuffer_tag $PG | | | | | par_sqlandworker_compress_linebuffer_tag $PG (25 rows) par_sqlandworker_compress_linebuffer_tag $PG par_sqlandworker_compress_linebuffer_tag $SQLITE p_wrapper par_sqlandworker_compress_linebuffer_tag '$SQLITE' par_sqlandworker_compress_linebuffer_tag $SQLITE Exit=0 par_sqlandworker_compress_linebuffer_tag $SQLITE Exit=0 par_sqlandworker_compress_linebuffer_tag $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 1 a|1|a|1 a 1 a +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 a|1|a|1 a 1 a par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 1 b|1|b|1 b 1 b +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 b|1|b|1 b 1 b par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 1 c|1|c|1 c 1 c +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 c|1|c|1 c 1 c par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 1 d|1|d|1 d 1 d +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 d|1|d|1 d 1 d par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 1 e|1|e|1 e 1 e +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 e|1|e|1 e 1 e par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 2 a|2|a|2 a 2 a +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 a|2|a|2 a 2 a par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 2 b|2|b|2 b 2 b +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 b|2|b|2 b 2 b par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 2 c|2|c|2 c 2 c +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 c|2|c|2 c 2 c par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 2 d|2|d|2 d 2 d +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 d|2|d|2 d 2 d par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 2 e|2|e|2 e 2 e +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 e|2|e|2 e 2 e par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 3 a|3|a|3 a 3 a +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 a|3|a|3 a 3 a par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 3 b|3|b|3 b 3 b +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 b|3|b|3 b 3 b par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 3 c|3|c|3 c 3 c +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 c|3|c|3 c 3 c par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 3 d|3|d|3 d 3 d +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 d|3|d|3 d 3 d par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 3 e|3|e|3 e 3 e +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 e|3|e|3 e 3 e par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 4 a|4|a|4 a 4 a +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 a|4|a|4 a 4 a par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 4 b|4|b|4 b 4 b +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 b|4|b|4 b 4 b par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 4 c|4|c|4 c 4 c +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 c|4|c|4 c 4 c par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 4 d|4|d|4 d 4 d +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 d|4|d|4 d 4 d par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 4 e|4|e|4 e 4 e +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 e|4|e|4 e 4 e par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 5 a|5|a|5 a 5 a +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 a|5|a|5 a 5 a par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 5 b|5|b|5 b 5 b +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 b|5|b|5 b 5 b par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 5 c|5|c|5 c 5 c +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 c|5|c|5 c 5 c par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 5 d|5|d|5 d 5 d +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 d|5|d|5 d 5 d par_sqlandworker_compress_linebuffer_tag $SQLITE | -par_sqlandworker_compress_linebuffer_tag $SQLITE hk|sleep .3;echo 5 e|5|e|5 e 5 e +par_sqlandworker_compress_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 e|5|e|5 e 5 e par_sqlandworker_compress_linebuffer_tag $SQLITE | par_sqlandworker_linebuffer $MYSQL p_wrapper par_sqlandworker_linebuffer '$MYSQL' par_sqlandworker_linebuffer $MYSQL Exit=0 par_sqlandworker_linebuffer $MYSQL Exit=0 par_sqlandworker_linebuffer $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 1 a 1 a 1 a\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 1 b 1 b 1 b\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 1 c 1 c 1 c\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 1 d 1 d 1 d\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 1 e 1 e 1 e\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 2 a 2 a 2 a\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 2 b 2 b 2 b\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 2 c 2 c 2 c\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 2 d 2 d 2 d\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 2 e 2 e 2 e\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 3 a 3 a 3 a\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 3 b 3 b 3 b\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 3 c 3 c 3 c\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 3 d 3 d 3 d\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 3 e 3 e 3 e\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 4 a 4 a 4 a\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 4 b 4 b 4 b\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 4 c 4 c 4 c\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 4 d 4 d 4 d\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 4 e 4 e 4 e\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 5 a 5 a 5 a\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 5 b 5 b 5 b\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 5 c 5 c 5 c\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 5 d 5 d 5 d\n -par_sqlandworker_linebuffer $MYSQL hk sleep .3;echo 5 e 5 e 5 e\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 1 a 1 a 1 a\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 1 b 1 b 1 b\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 1 c 1 c 1 c\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 1 d 1 d 1 d\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 1 e 1 e 1 e\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 2 a 2 a 2 a\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 2 b 2 b 2 b\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 2 c 2 c 2 c\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 2 d 2 d 2 d\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 2 e 2 e 2 e\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 3 a 3 a 3 a\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 3 b 3 b 3 b\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 3 c 3 c 3 c\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 3 d 3 d 3 d\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 3 e 3 e 3 e\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 4 a 4 a 4 a\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 4 b 4 b 4 b\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 4 c 4 c 4 c\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 4 d 4 d 4 d\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 4 e 4 e 4 e\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 5 a 5 a 5 a\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 5 b 5 b 5 b\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 5 c 5 c 5 c\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 5 d 5 d 5 d\n +par_sqlandworker_linebuffer $MYSQL hostname sleep .3;echo 5 e 5 e 5 e\n par_sqlandworker_linebuffer $PG p_wrapper par_sqlandworker_linebuffer '$PG' par_sqlandworker_linebuffer $PG Exit=0 par_sqlandworker_linebuffer $PG Exit=0 -par_sqlandworker_linebuffer $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_linebuffer $PG ------+-------------------+----+----+--------+-------- -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 1 a | 1 | a | 1 a +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 1 b | 1 | b | 1 b +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 1 c | 1 | c | 1 c +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 1 d | 1 | d | 1 d +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 1 e | 1 | e | 1 e +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 2 a | 2 | a | 2 a +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 2 b | 2 | b | 2 b +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 2 c | 2 | c | 2 c +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 2 d | 2 | d | 2 d +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 2 e | 2 | e | 2 e +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 3 a | 3 | a | 3 a +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 3 b | 3 | b | 3 b +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 3 c | 3 | c | 3 c +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 3 d | 3 | d | 3 d +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 3 e | 3 | e | 3 e +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 4 a | 4 | a | 4 a +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 4 b | 4 | b | 4 b +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 4 c | 4 | c | 4 c +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 4 d | 4 | d | 4 d +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 4 e | 4 | e | 4 e +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 5 a | 5 | a | 5 a +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 5 b | 5 | b | 5 b +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 5 c | 5 | c | 5 c +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 5 d | 5 | d | 5 d +| -par_sqlandworker_linebuffer $PG | | | | | -par_sqlandworker_linebuffer $PG hk | sleep .3;echo 5 e | 5 | e | 5 e +| -par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_linebuffer $PG --------+-------------------+----+----+--------+-------- +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 1 a | 1 | a | 1 a +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 1 b | 1 | b | 1 b +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 1 c | 1 | c | 1 c +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 1 d | 1 | d | 1 d +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 1 e | 1 | e | 1 e +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 2 a | 2 | a | 2 a +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 2 b | 2 | b | 2 b +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 2 c | 2 | c | 2 c +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 2 d | 2 | d | 2 d +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 2 e | 2 | e | 2 e +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 3 a | 3 | a | 3 a +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 3 b | 3 | b | 3 b +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 3 c | 3 | c | 3 c +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 3 d | 3 | d | 3 d +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 3 e | 3 | e | 3 e +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 4 a | 4 | a | 4 a +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 4 b | 4 | b | 4 b +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 4 c | 4 | c | 4 c +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 4 d | 4 | d | 4 d +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 4 e | 4 | e | 4 e +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 5 a | 5 | a | 5 a +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 5 b | 5 | b | 5 b +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 5 c | 5 | c | 5 c +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 5 d | 5 | d | 5 d +| +par_sqlandworker_linebuffer $PG | | | | | +par_sqlandworker_linebuffer $PG hostname | sleep .3;echo 5 e | 5 | e | 5 e +| +par_sqlandworker_linebuffer $PG | | | | | par_sqlandworker_linebuffer $PG (25 rows) par_sqlandworker_linebuffer $PG par_sqlandworker_linebuffer $SQLITE p_wrapper par_sqlandworker_linebuffer '$SQLITE' par_sqlandworker_linebuffer $SQLITE Exit=0 par_sqlandworker_linebuffer $SQLITE Exit=0 par_sqlandworker_linebuffer $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 1 a|1|a|1 a +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 1 a|1|a|1 a par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 1 b|1|b|1 b +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 1 b|1|b|1 b par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 1 c|1|c|1 c +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 1 c|1|c|1 c par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 1 d|1|d|1 d +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 1 d|1|d|1 d par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 1 e|1|e|1 e +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 1 e|1|e|1 e par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 2 a|2|a|2 a +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 2 a|2|a|2 a par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 2 b|2|b|2 b +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 2 b|2|b|2 b par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 2 c|2|c|2 c +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 2 c|2|c|2 c par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 2 d|2|d|2 d +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 2 d|2|d|2 d par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 2 e|2|e|2 e +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 2 e|2|e|2 e par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 3 a|3|a|3 a +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 3 a|3|a|3 a par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 3 b|3|b|3 b +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 3 b|3|b|3 b par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 3 c|3|c|3 c +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 3 c|3|c|3 c par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 3 d|3|d|3 d +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 3 d|3|d|3 d par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 3 e|3|e|3 e +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 3 e|3|e|3 e par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 4 a|4|a|4 a +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 4 a|4|a|4 a par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 4 b|4|b|4 b +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 4 b|4|b|4 b par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 4 c|4|c|4 c +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 4 c|4|c|4 c par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 4 d|4|d|4 d +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 4 d|4|d|4 d par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 4 e|4|e|4 e +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 4 e|4|e|4 e par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 5 a|5|a|5 a +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 5 a|5|a|5 a par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 5 b|5|b|5 b +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 5 b|5|b|5 b par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 5 c|5|c|5 c +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 5 c|5|c|5 c par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 5 d|5|d|5 d +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 5 d|5|d|5 d par_sqlandworker_linebuffer $SQLITE | -par_sqlandworker_linebuffer $SQLITE hk|sleep .3;echo 5 e|5|e|5 e +par_sqlandworker_linebuffer $SQLITE hostname|sleep .3;echo 5 e|5|e|5 e par_sqlandworker_linebuffer $SQLITE | par_sqlandworker_linebuffer_tag $MYSQL p_wrapper par_sqlandworker_linebuffer_tag '$MYSQL' par_sqlandworker_linebuffer_tag $MYSQL Exit=0 par_sqlandworker_linebuffer_tag $MYSQL Exit=0 par_sqlandworker_linebuffer_tag $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 1 a 1 a 1 a\t1 a\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 1 b 1 b 1 b\t1 b\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 1 c 1 c 1 c\t1 c\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 1 d 1 d 1 d\t1 d\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 1 e 1 e 1 e\t1 e\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 2 a 2 a 2 a\t2 a\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 2 b 2 b 2 b\t2 b\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 2 c 2 c 2 c\t2 c\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 2 d 2 d 2 d\t2 d\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 2 e 2 e 2 e\t2 e\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 3 a 3 a 3 a\t3 a\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 3 b 3 b 3 b\t3 b\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 3 c 3 c 3 c\t3 c\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 3 d 3 d 3 d\t3 d\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 3 e 3 e 3 e\t3 e\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 4 a 4 a 4 a\t4 a\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 4 b 4 b 4 b\t4 b\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 4 c 4 c 4 c\t4 c\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 4 d 4 d 4 d\t4 d\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 4 e 4 e 4 e\t4 e\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 5 a 5 a 5 a\t5 a\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 5 b 5 b 5 b\t5 b\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 5 c 5 c 5 c\t5 c\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 5 d 5 d 5 d\t5 d\n -par_sqlandworker_linebuffer_tag $MYSQL hk sleep .3;echo 5 e 5 e 5 e\t5 e\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 1 a 1 a 1 a\t1 a\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 1 b 1 b 1 b\t1 b\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 1 c 1 c 1 c\t1 c\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 1 d 1 d 1 d\t1 d\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 1 e 1 e 1 e\t1 e\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 2 a 2 a 2 a\t2 a\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 2 b 2 b 2 b\t2 b\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 2 c 2 c 2 c\t2 c\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 2 d 2 d 2 d\t2 d\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 2 e 2 e 2 e\t2 e\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 3 a 3 a 3 a\t3 a\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 3 b 3 b 3 b\t3 b\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 3 c 3 c 3 c\t3 c\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 3 d 3 d 3 d\t3 d\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 3 e 3 e 3 e\t3 e\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 4 a 4 a 4 a\t4 a\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 4 b 4 b 4 b\t4 b\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 4 c 4 c 4 c\t4 c\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 4 d 4 d 4 d\t4 d\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 4 e 4 e 4 e\t4 e\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 5 a 5 a 5 a\t5 a\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 5 b 5 b 5 b\t5 b\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 5 c 5 c 5 c\t5 c\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 5 d 5 d 5 d\t5 d\n +par_sqlandworker_linebuffer_tag $MYSQL hostname sleep .3;echo 5 e 5 e 5 e\t5 e\n par_sqlandworker_linebuffer_tag $PG p_wrapper par_sqlandworker_linebuffer_tag '$PG' par_sqlandworker_linebuffer_tag $PG Exit=0 par_sqlandworker_linebuffer_tag $PG Exit=0 -par_sqlandworker_linebuffer_tag $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_linebuffer_tag $PG ------+-------------------+----+----+-------------+-------- -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 1 a | 1 | a | 1 a 1 a+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 1 b | 1 | b | 1 b 1 b+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 1 c | 1 | c | 1 c 1 c+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 1 d | 1 | d | 1 d 1 d+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 1 e | 1 | e | 1 e 1 e+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 2 a | 2 | a | 2 a 2 a+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 2 b | 2 | b | 2 b 2 b+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 2 c | 2 | c | 2 c 2 c+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 2 d | 2 | d | 2 d 2 d+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 2 e | 2 | e | 2 e 2 e+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 3 a | 3 | a | 3 a 3 a+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 3 b | 3 | b | 3 b 3 b+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 3 c | 3 | c | 3 c 3 c+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 3 d | 3 | d | 3 d 3 d+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 3 e | 3 | e | 3 e 3 e+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 4 a | 4 | a | 4 a 4 a+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 4 b | 4 | b | 4 b 4 b+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 4 c | 4 | c | 4 c 4 c+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 4 d | 4 | d | 4 d 4 d+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 4 e | 4 | e | 4 e 4 e+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 5 a | 5 | a | 5 a 5 a+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 5 b | 5 | b | 5 b 5 b+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 5 c | 5 | c | 5 c 5 c+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 5 d | 5 | d | 5 d 5 d+| -par_sqlandworker_linebuffer_tag $PG | | | | | -par_sqlandworker_linebuffer_tag $PG hk | sleep .3;echo 5 e | 5 | e | 5 e 5 e+| -par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_linebuffer_tag $PG --------+-------------------+----+----+-------------+-------- +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 1 a | 1 | a | 1 a 1 a+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 1 b | 1 | b | 1 b 1 b+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 1 c | 1 | c | 1 c 1 c+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 1 d | 1 | d | 1 d 1 d+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 1 e | 1 | e | 1 e 1 e+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 2 a | 2 | a | 2 a 2 a+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 2 b | 2 | b | 2 b 2 b+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 2 c | 2 | c | 2 c 2 c+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 2 d | 2 | d | 2 d 2 d+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 2 e | 2 | e | 2 e 2 e+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 3 a | 3 | a | 3 a 3 a+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 3 b | 3 | b | 3 b 3 b+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 3 c | 3 | c | 3 c 3 c+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 3 d | 3 | d | 3 d 3 d+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 3 e | 3 | e | 3 e 3 e+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 4 a | 4 | a | 4 a 4 a+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 4 b | 4 | b | 4 b 4 b+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 4 c | 4 | c | 4 c 4 c+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 4 d | 4 | d | 4 d 4 d+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 4 e | 4 | e | 4 e 4 e+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 5 a | 5 | a | 5 a 5 a+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 5 b | 5 | b | 5 b 5 b+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 5 c | 5 | c | 5 c 5 c+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 5 d | 5 | d | 5 d 5 d+| +par_sqlandworker_linebuffer_tag $PG | | | | | +par_sqlandworker_linebuffer_tag $PG hostname | sleep .3;echo 5 e | 5 | e | 5 e 5 e+| +par_sqlandworker_linebuffer_tag $PG | | | | | par_sqlandworker_linebuffer_tag $PG (25 rows) par_sqlandworker_linebuffer_tag $PG par_sqlandworker_linebuffer_tag $SQLITE p_wrapper par_sqlandworker_linebuffer_tag '$SQLITE' par_sqlandworker_linebuffer_tag $SQLITE Exit=0 par_sqlandworker_linebuffer_tag $SQLITE Exit=0 par_sqlandworker_linebuffer_tag $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 1 a|1|a|1 a 1 a +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 a|1|a|1 a 1 a par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 1 b|1|b|1 b 1 b +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 b|1|b|1 b 1 b par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 1 c|1|c|1 c 1 c +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 c|1|c|1 c 1 c par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 1 d|1|d|1 d 1 d +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 d|1|d|1 d 1 d par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 1 e|1|e|1 e 1 e +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 1 e|1|e|1 e 1 e par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 2 a|2|a|2 a 2 a +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 a|2|a|2 a 2 a par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 2 b|2|b|2 b 2 b +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 b|2|b|2 b 2 b par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 2 c|2|c|2 c 2 c +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 c|2|c|2 c 2 c par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 2 d|2|d|2 d 2 d +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 d|2|d|2 d 2 d par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 2 e|2|e|2 e 2 e +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 2 e|2|e|2 e 2 e par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 3 a|3|a|3 a 3 a +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 a|3|a|3 a 3 a par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 3 b|3|b|3 b 3 b +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 b|3|b|3 b 3 b par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 3 c|3|c|3 c 3 c +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 c|3|c|3 c 3 c par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 3 d|3|d|3 d 3 d +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 d|3|d|3 d 3 d par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 3 e|3|e|3 e 3 e +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 3 e|3|e|3 e 3 e par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 4 a|4|a|4 a 4 a +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 a|4|a|4 a 4 a par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 4 b|4|b|4 b 4 b +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 b|4|b|4 b 4 b par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 4 c|4|c|4 c 4 c +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 c|4|c|4 c 4 c par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 4 d|4|d|4 d 4 d +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 d|4|d|4 d 4 d par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 4 e|4|e|4 e 4 e +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 4 e|4|e|4 e 4 e par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 5 a|5|a|5 a 5 a +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 a|5|a|5 a 5 a par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 5 b|5|b|5 b 5 b +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 b|5|b|5 b 5 b par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 5 c|5|c|5 c 5 c +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 c|5|c|5 c 5 c par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 5 d|5|d|5 d 5 d +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 d|5|d|5 d 5 d par_sqlandworker_linebuffer_tag $SQLITE | -par_sqlandworker_linebuffer_tag $SQLITE hk|sleep .3;echo 5 e|5|e|5 e 5 e +par_sqlandworker_linebuffer_tag $SQLITE hostname|sleep .3;echo 5 e|5|e|5 e 5 e par_sqlandworker_linebuffer_tag $SQLITE | par_sqlandworker_lo $MYSQL p_wrapper par_sqlandworker_lo '$MYSQL' par_sqlandworker_lo $MYSQL Exit=0 @@ -1149,509 +1149,509 @@ par_sqlandworker_results $MYSQL p_wrapper par_sqlandworker_results '$MYSQL' par_sqlandworker_results $MYSQL Exit=0 par_sqlandworker_results $MYSQL Exit=0 par_sqlandworker_results $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 1 a 1 a /tmp/out--sql/1/1/2/a/stdout /tmp/out--sql/1/1/2/a/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 1 b 1 b /tmp/out--sql/1/1/2/b/stdout /tmp/out--sql/1/1/2/b/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 1 c 1 c /tmp/out--sql/1/1/2/c/stdout /tmp/out--sql/1/1/2/c/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 1 d 1 d /tmp/out--sql/1/1/2/d/stdout /tmp/out--sql/1/1/2/d/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 1 e 1 e /tmp/out--sql/1/1/2/e/stdout /tmp/out--sql/1/1/2/e/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 2 a 2 a /tmp/out--sql/1/2/2/a/stdout /tmp/out--sql/1/2/2/a/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 2 b 2 b /tmp/out--sql/1/2/2/b/stdout /tmp/out--sql/1/2/2/b/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 2 c 2 c /tmp/out--sql/1/2/2/c/stdout /tmp/out--sql/1/2/2/c/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 2 d 2 d /tmp/out--sql/1/2/2/d/stdout /tmp/out--sql/1/2/2/d/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 2 e 2 e /tmp/out--sql/1/2/2/e/stdout /tmp/out--sql/1/2/2/e/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 3 a 3 a /tmp/out--sql/1/3/2/a/stdout /tmp/out--sql/1/3/2/a/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 3 b 3 b /tmp/out--sql/1/3/2/b/stdout /tmp/out--sql/1/3/2/b/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 3 c 3 c /tmp/out--sql/1/3/2/c/stdout /tmp/out--sql/1/3/2/c/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 3 d 3 d /tmp/out--sql/1/3/2/d/stdout /tmp/out--sql/1/3/2/d/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 3 e 3 e /tmp/out--sql/1/3/2/e/stdout /tmp/out--sql/1/3/2/e/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 4 a 4 a /tmp/out--sql/1/4/2/a/stdout /tmp/out--sql/1/4/2/a/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 4 b 4 b /tmp/out--sql/1/4/2/b/stdout /tmp/out--sql/1/4/2/b/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 4 c 4 c /tmp/out--sql/1/4/2/c/stdout /tmp/out--sql/1/4/2/c/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 4 d 4 d /tmp/out--sql/1/4/2/d/stdout /tmp/out--sql/1/4/2/d/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 4 e 4 e /tmp/out--sql/1/4/2/e/stdout /tmp/out--sql/1/4/2/e/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 5 a 5 a /tmp/out--sql/1/5/2/a/stdout /tmp/out--sql/1/5/2/a/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 5 b 5 b /tmp/out--sql/1/5/2/b/stdout /tmp/out--sql/1/5/2/b/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 5 c 5 c /tmp/out--sql/1/5/2/c/stdout /tmp/out--sql/1/5/2/c/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 5 d 5 d /tmp/out--sql/1/5/2/d/stdout /tmp/out--sql/1/5/2/d/stderr -par_sqlandworker_results $MYSQL hk sleep .3;echo 5 e 5 e /tmp/out--sql/1/5/2/e/stdout /tmp/out--sql/1/5/2/e/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 1 a 1 a /tmp/out--sql/1/1/2/a/stdout /tmp/out--sql/1/1/2/a/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 1 b 1 b /tmp/out--sql/1/1/2/b/stdout /tmp/out--sql/1/1/2/b/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 1 c 1 c /tmp/out--sql/1/1/2/c/stdout /tmp/out--sql/1/1/2/c/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 1 d 1 d /tmp/out--sql/1/1/2/d/stdout /tmp/out--sql/1/1/2/d/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 1 e 1 e /tmp/out--sql/1/1/2/e/stdout /tmp/out--sql/1/1/2/e/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 2 a 2 a /tmp/out--sql/1/2/2/a/stdout /tmp/out--sql/1/2/2/a/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 2 b 2 b /tmp/out--sql/1/2/2/b/stdout /tmp/out--sql/1/2/2/b/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 2 c 2 c /tmp/out--sql/1/2/2/c/stdout /tmp/out--sql/1/2/2/c/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 2 d 2 d /tmp/out--sql/1/2/2/d/stdout /tmp/out--sql/1/2/2/d/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 2 e 2 e /tmp/out--sql/1/2/2/e/stdout /tmp/out--sql/1/2/2/e/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 3 a 3 a /tmp/out--sql/1/3/2/a/stdout /tmp/out--sql/1/3/2/a/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 3 b 3 b /tmp/out--sql/1/3/2/b/stdout /tmp/out--sql/1/3/2/b/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 3 c 3 c /tmp/out--sql/1/3/2/c/stdout /tmp/out--sql/1/3/2/c/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 3 d 3 d /tmp/out--sql/1/3/2/d/stdout /tmp/out--sql/1/3/2/d/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 3 e 3 e /tmp/out--sql/1/3/2/e/stdout /tmp/out--sql/1/3/2/e/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 4 a 4 a /tmp/out--sql/1/4/2/a/stdout /tmp/out--sql/1/4/2/a/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 4 b 4 b /tmp/out--sql/1/4/2/b/stdout /tmp/out--sql/1/4/2/b/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 4 c 4 c /tmp/out--sql/1/4/2/c/stdout /tmp/out--sql/1/4/2/c/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 4 d 4 d /tmp/out--sql/1/4/2/d/stdout /tmp/out--sql/1/4/2/d/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 4 e 4 e /tmp/out--sql/1/4/2/e/stdout /tmp/out--sql/1/4/2/e/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 5 a 5 a /tmp/out--sql/1/5/2/a/stdout /tmp/out--sql/1/5/2/a/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 5 b 5 b /tmp/out--sql/1/5/2/b/stdout /tmp/out--sql/1/5/2/b/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 5 c 5 c /tmp/out--sql/1/5/2/c/stdout /tmp/out--sql/1/5/2/c/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 5 d 5 d /tmp/out--sql/1/5/2/d/stdout /tmp/out--sql/1/5/2/d/stderr +par_sqlandworker_results $MYSQL hostname sleep .3;echo 5 e 5 e /tmp/out--sql/1/5/2/e/stdout /tmp/out--sql/1/5/2/e/stderr par_sqlandworker_results $PG p_wrapper par_sqlandworker_results '$PG' par_sqlandworker_results $PG Exit=0 par_sqlandworker_results $PG Exit=0 -par_sqlandworker_results $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_results $PG ------+-------------------+----+----+------------------------------+------------------------------ -par_sqlandworker_results $PG hk | sleep .3;echo 1 a | 1 | a | /tmp/out--sql/1/1/2/a/stdout | /tmp/out--sql/1/1/2/a/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 1 b | 1 | b | /tmp/out--sql/1/1/2/b/stdout | /tmp/out--sql/1/1/2/b/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 1 c | 1 | c | /tmp/out--sql/1/1/2/c/stdout | /tmp/out--sql/1/1/2/c/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 1 d | 1 | d | /tmp/out--sql/1/1/2/d/stdout | /tmp/out--sql/1/1/2/d/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 1 e | 1 | e | /tmp/out--sql/1/1/2/e/stdout | /tmp/out--sql/1/1/2/e/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 2 a | 2 | a | /tmp/out--sql/1/2/2/a/stdout | /tmp/out--sql/1/2/2/a/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 2 b | 2 | b | /tmp/out--sql/1/2/2/b/stdout | /tmp/out--sql/1/2/2/b/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 2 c | 2 | c | /tmp/out--sql/1/2/2/c/stdout | /tmp/out--sql/1/2/2/c/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 2 d | 2 | d | /tmp/out--sql/1/2/2/d/stdout | /tmp/out--sql/1/2/2/d/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 2 e | 2 | e | /tmp/out--sql/1/2/2/e/stdout | /tmp/out--sql/1/2/2/e/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 3 a | 3 | a | /tmp/out--sql/1/3/2/a/stdout | /tmp/out--sql/1/3/2/a/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 3 b | 3 | b | /tmp/out--sql/1/3/2/b/stdout | /tmp/out--sql/1/3/2/b/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 3 c | 3 | c | /tmp/out--sql/1/3/2/c/stdout | /tmp/out--sql/1/3/2/c/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 3 d | 3 | d | /tmp/out--sql/1/3/2/d/stdout | /tmp/out--sql/1/3/2/d/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 3 e | 3 | e | /tmp/out--sql/1/3/2/e/stdout | /tmp/out--sql/1/3/2/e/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 4 a | 4 | a | /tmp/out--sql/1/4/2/a/stdout | /tmp/out--sql/1/4/2/a/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 4 b | 4 | b | /tmp/out--sql/1/4/2/b/stdout | /tmp/out--sql/1/4/2/b/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 4 c | 4 | c | /tmp/out--sql/1/4/2/c/stdout | /tmp/out--sql/1/4/2/c/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 4 d | 4 | d | /tmp/out--sql/1/4/2/d/stdout | /tmp/out--sql/1/4/2/d/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 4 e | 4 | e | /tmp/out--sql/1/4/2/e/stdout | /tmp/out--sql/1/4/2/e/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 5 a | 5 | a | /tmp/out--sql/1/5/2/a/stdout | /tmp/out--sql/1/5/2/a/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 5 b | 5 | b | /tmp/out--sql/1/5/2/b/stdout | /tmp/out--sql/1/5/2/b/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 5 c | 5 | c | /tmp/out--sql/1/5/2/c/stdout | /tmp/out--sql/1/5/2/c/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 5 d | 5 | d | /tmp/out--sql/1/5/2/d/stdout | /tmp/out--sql/1/5/2/d/stderr -par_sqlandworker_results $PG hk | sleep .3;echo 5 e | 5 | e | /tmp/out--sql/1/5/2/e/stdout | /tmp/out--sql/1/5/2/e/stderr +par_sqlandworker_results $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_results $PG --------+-------------------+----+----+------------------------------+------------------------------ +par_sqlandworker_results $PG hostname | sleep .3;echo 1 a | 1 | a | /tmp/out--sql/1/1/2/a/stdout | /tmp/out--sql/1/1/2/a/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 1 b | 1 | b | /tmp/out--sql/1/1/2/b/stdout | /tmp/out--sql/1/1/2/b/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 1 c | 1 | c | /tmp/out--sql/1/1/2/c/stdout | /tmp/out--sql/1/1/2/c/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 1 d | 1 | d | /tmp/out--sql/1/1/2/d/stdout | /tmp/out--sql/1/1/2/d/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 1 e | 1 | e | /tmp/out--sql/1/1/2/e/stdout | /tmp/out--sql/1/1/2/e/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 2 a | 2 | a | /tmp/out--sql/1/2/2/a/stdout | /tmp/out--sql/1/2/2/a/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 2 b | 2 | b | /tmp/out--sql/1/2/2/b/stdout | /tmp/out--sql/1/2/2/b/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 2 c | 2 | c | /tmp/out--sql/1/2/2/c/stdout | /tmp/out--sql/1/2/2/c/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 2 d | 2 | d | /tmp/out--sql/1/2/2/d/stdout | /tmp/out--sql/1/2/2/d/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 2 e | 2 | e | /tmp/out--sql/1/2/2/e/stdout | /tmp/out--sql/1/2/2/e/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 3 a | 3 | a | /tmp/out--sql/1/3/2/a/stdout | /tmp/out--sql/1/3/2/a/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 3 b | 3 | b | /tmp/out--sql/1/3/2/b/stdout | /tmp/out--sql/1/3/2/b/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 3 c | 3 | c | /tmp/out--sql/1/3/2/c/stdout | /tmp/out--sql/1/3/2/c/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 3 d | 3 | d | /tmp/out--sql/1/3/2/d/stdout | /tmp/out--sql/1/3/2/d/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 3 e | 3 | e | /tmp/out--sql/1/3/2/e/stdout | /tmp/out--sql/1/3/2/e/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 4 a | 4 | a | /tmp/out--sql/1/4/2/a/stdout | /tmp/out--sql/1/4/2/a/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 4 b | 4 | b | /tmp/out--sql/1/4/2/b/stdout | /tmp/out--sql/1/4/2/b/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 4 c | 4 | c | /tmp/out--sql/1/4/2/c/stdout | /tmp/out--sql/1/4/2/c/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 4 d | 4 | d | /tmp/out--sql/1/4/2/d/stdout | /tmp/out--sql/1/4/2/d/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 4 e | 4 | e | /tmp/out--sql/1/4/2/e/stdout | /tmp/out--sql/1/4/2/e/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 5 a | 5 | a | /tmp/out--sql/1/5/2/a/stdout | /tmp/out--sql/1/5/2/a/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 5 b | 5 | b | /tmp/out--sql/1/5/2/b/stdout | /tmp/out--sql/1/5/2/b/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 5 c | 5 | c | /tmp/out--sql/1/5/2/c/stdout | /tmp/out--sql/1/5/2/c/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 5 d | 5 | d | /tmp/out--sql/1/5/2/d/stdout | /tmp/out--sql/1/5/2/d/stderr +par_sqlandworker_results $PG hostname | sleep .3;echo 5 e | 5 | e | /tmp/out--sql/1/5/2/e/stdout | /tmp/out--sql/1/5/2/e/stderr par_sqlandworker_results $PG (25 rows) par_sqlandworker_results $PG par_sqlandworker_results $SQLITE p_wrapper par_sqlandworker_results '$SQLITE' par_sqlandworker_results $SQLITE Exit=0 par_sqlandworker_results $SQLITE Exit=0 par_sqlandworker_results $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 1 a|1|a|/tmp/out--sql/1/1/2/a/stdout|/tmp/out--sql/1/1/2/a/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 1 b|1|b|/tmp/out--sql/1/1/2/b/stdout|/tmp/out--sql/1/1/2/b/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 1 c|1|c|/tmp/out--sql/1/1/2/c/stdout|/tmp/out--sql/1/1/2/c/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 1 d|1|d|/tmp/out--sql/1/1/2/d/stdout|/tmp/out--sql/1/1/2/d/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 1 e|1|e|/tmp/out--sql/1/1/2/e/stdout|/tmp/out--sql/1/1/2/e/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 2 a|2|a|/tmp/out--sql/1/2/2/a/stdout|/tmp/out--sql/1/2/2/a/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 2 b|2|b|/tmp/out--sql/1/2/2/b/stdout|/tmp/out--sql/1/2/2/b/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 2 c|2|c|/tmp/out--sql/1/2/2/c/stdout|/tmp/out--sql/1/2/2/c/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 2 d|2|d|/tmp/out--sql/1/2/2/d/stdout|/tmp/out--sql/1/2/2/d/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 2 e|2|e|/tmp/out--sql/1/2/2/e/stdout|/tmp/out--sql/1/2/2/e/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 3 a|3|a|/tmp/out--sql/1/3/2/a/stdout|/tmp/out--sql/1/3/2/a/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 3 b|3|b|/tmp/out--sql/1/3/2/b/stdout|/tmp/out--sql/1/3/2/b/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 3 c|3|c|/tmp/out--sql/1/3/2/c/stdout|/tmp/out--sql/1/3/2/c/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 3 d|3|d|/tmp/out--sql/1/3/2/d/stdout|/tmp/out--sql/1/3/2/d/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 3 e|3|e|/tmp/out--sql/1/3/2/e/stdout|/tmp/out--sql/1/3/2/e/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 4 a|4|a|/tmp/out--sql/1/4/2/a/stdout|/tmp/out--sql/1/4/2/a/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 4 b|4|b|/tmp/out--sql/1/4/2/b/stdout|/tmp/out--sql/1/4/2/b/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 4 c|4|c|/tmp/out--sql/1/4/2/c/stdout|/tmp/out--sql/1/4/2/c/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 4 d|4|d|/tmp/out--sql/1/4/2/d/stdout|/tmp/out--sql/1/4/2/d/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 4 e|4|e|/tmp/out--sql/1/4/2/e/stdout|/tmp/out--sql/1/4/2/e/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 5 a|5|a|/tmp/out--sql/1/5/2/a/stdout|/tmp/out--sql/1/5/2/a/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 5 b|5|b|/tmp/out--sql/1/5/2/b/stdout|/tmp/out--sql/1/5/2/b/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 5 c|5|c|/tmp/out--sql/1/5/2/c/stdout|/tmp/out--sql/1/5/2/c/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 5 d|5|d|/tmp/out--sql/1/5/2/d/stdout|/tmp/out--sql/1/5/2/d/stderr -par_sqlandworker_results $SQLITE hk|sleep .3;echo 5 e|5|e|/tmp/out--sql/1/5/2/e/stdout|/tmp/out--sql/1/5/2/e/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 1 a|1|a|/tmp/out--sql/1/1/2/a/stdout|/tmp/out--sql/1/1/2/a/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 1 b|1|b|/tmp/out--sql/1/1/2/b/stdout|/tmp/out--sql/1/1/2/b/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 1 c|1|c|/tmp/out--sql/1/1/2/c/stdout|/tmp/out--sql/1/1/2/c/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 1 d|1|d|/tmp/out--sql/1/1/2/d/stdout|/tmp/out--sql/1/1/2/d/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 1 e|1|e|/tmp/out--sql/1/1/2/e/stdout|/tmp/out--sql/1/1/2/e/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 2 a|2|a|/tmp/out--sql/1/2/2/a/stdout|/tmp/out--sql/1/2/2/a/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 2 b|2|b|/tmp/out--sql/1/2/2/b/stdout|/tmp/out--sql/1/2/2/b/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 2 c|2|c|/tmp/out--sql/1/2/2/c/stdout|/tmp/out--sql/1/2/2/c/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 2 d|2|d|/tmp/out--sql/1/2/2/d/stdout|/tmp/out--sql/1/2/2/d/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 2 e|2|e|/tmp/out--sql/1/2/2/e/stdout|/tmp/out--sql/1/2/2/e/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 3 a|3|a|/tmp/out--sql/1/3/2/a/stdout|/tmp/out--sql/1/3/2/a/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 3 b|3|b|/tmp/out--sql/1/3/2/b/stdout|/tmp/out--sql/1/3/2/b/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 3 c|3|c|/tmp/out--sql/1/3/2/c/stdout|/tmp/out--sql/1/3/2/c/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 3 d|3|d|/tmp/out--sql/1/3/2/d/stdout|/tmp/out--sql/1/3/2/d/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 3 e|3|e|/tmp/out--sql/1/3/2/e/stdout|/tmp/out--sql/1/3/2/e/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 4 a|4|a|/tmp/out--sql/1/4/2/a/stdout|/tmp/out--sql/1/4/2/a/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 4 b|4|b|/tmp/out--sql/1/4/2/b/stdout|/tmp/out--sql/1/4/2/b/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 4 c|4|c|/tmp/out--sql/1/4/2/c/stdout|/tmp/out--sql/1/4/2/c/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 4 d|4|d|/tmp/out--sql/1/4/2/d/stdout|/tmp/out--sql/1/4/2/d/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 4 e|4|e|/tmp/out--sql/1/4/2/e/stdout|/tmp/out--sql/1/4/2/e/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 5 a|5|a|/tmp/out--sql/1/5/2/a/stdout|/tmp/out--sql/1/5/2/a/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 5 b|5|b|/tmp/out--sql/1/5/2/b/stdout|/tmp/out--sql/1/5/2/b/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 5 c|5|c|/tmp/out--sql/1/5/2/c/stdout|/tmp/out--sql/1/5/2/c/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 5 d|5|d|/tmp/out--sql/1/5/2/d/stdout|/tmp/out--sql/1/5/2/d/stderr +par_sqlandworker_results $SQLITE hostname|sleep .3;echo 5 e|5|e|/tmp/out--sql/1/5/2/e/stdout|/tmp/out--sql/1/5/2/e/stderr par_sqlandworker_tag $MYSQL p_wrapper par_sqlandworker_tag '$MYSQL' par_sqlandworker_tag $MYSQL Exit=0 par_sqlandworker_tag $MYSQL Exit=0 par_sqlandworker_tag $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_tag $MYSQL hk sleep .3;echo 1 a 1 a 1 a\t1 a\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 1 b 1 b 1 b\t1 b\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 1 c 1 c 1 c\t1 c\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 1 d 1 d 1 d\t1 d\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 1 e 1 e 1 e\t1 e\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 2 a 2 a 2 a\t2 a\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 2 b 2 b 2 b\t2 b\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 2 c 2 c 2 c\t2 c\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 2 d 2 d 2 d\t2 d\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 2 e 2 e 2 e\t2 e\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 3 a 3 a 3 a\t3 a\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 3 b 3 b 3 b\t3 b\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 3 c 3 c 3 c\t3 c\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 3 d 3 d 3 d\t3 d\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 3 e 3 e 3 e\t3 e\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 4 a 4 a 4 a\t4 a\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 4 b 4 b 4 b\t4 b\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 4 c 4 c 4 c\t4 c\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 4 d 4 d 4 d\t4 d\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 4 e 4 e 4 e\t4 e\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 5 a 5 a 5 a\t5 a\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 5 b 5 b 5 b\t5 b\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 5 c 5 c 5 c\t5 c\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 5 d 5 d 5 d\t5 d\n -par_sqlandworker_tag $MYSQL hk sleep .3;echo 5 e 5 e 5 e\t5 e\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 1 a 1 a 1 a\t1 a\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 1 b 1 b 1 b\t1 b\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 1 c 1 c 1 c\t1 c\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 1 d 1 d 1 d\t1 d\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 1 e 1 e 1 e\t1 e\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 2 a 2 a 2 a\t2 a\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 2 b 2 b 2 b\t2 b\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 2 c 2 c 2 c\t2 c\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 2 d 2 d 2 d\t2 d\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 2 e 2 e 2 e\t2 e\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 3 a 3 a 3 a\t3 a\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 3 b 3 b 3 b\t3 b\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 3 c 3 c 3 c\t3 c\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 3 d 3 d 3 d\t3 d\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 3 e 3 e 3 e\t3 e\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 4 a 4 a 4 a\t4 a\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 4 b 4 b 4 b\t4 b\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 4 c 4 c 4 c\t4 c\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 4 d 4 d 4 d\t4 d\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 4 e 4 e 4 e\t4 e\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 5 a 5 a 5 a\t5 a\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 5 b 5 b 5 b\t5 b\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 5 c 5 c 5 c\t5 c\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 5 d 5 d 5 d\t5 d\n +par_sqlandworker_tag $MYSQL hostname sleep .3;echo 5 e 5 e 5 e\t5 e\n par_sqlandworker_tag $PG p_wrapper par_sqlandworker_tag '$PG' par_sqlandworker_tag $PG Exit=0 par_sqlandworker_tag $PG Exit=0 -par_sqlandworker_tag $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_tag $PG ------+-------------------+----+----+-------------+-------- -par_sqlandworker_tag $PG hk | sleep .3;echo 1 a | 1 | a | 1 a 1 a+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 1 b | 1 | b | 1 b 1 b+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 1 c | 1 | c | 1 c 1 c+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 1 d | 1 | d | 1 d 1 d+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 1 e | 1 | e | 1 e 1 e+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 2 a | 2 | a | 2 a 2 a+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 2 b | 2 | b | 2 b 2 b+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 2 c | 2 | c | 2 c 2 c+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 2 d | 2 | d | 2 d 2 d+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 2 e | 2 | e | 2 e 2 e+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 3 a | 3 | a | 3 a 3 a+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 3 b | 3 | b | 3 b 3 b+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 3 c | 3 | c | 3 c 3 c+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 3 d | 3 | d | 3 d 3 d+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 3 e | 3 | e | 3 e 3 e+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 4 a | 4 | a | 4 a 4 a+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 4 b | 4 | b | 4 b 4 b+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 4 c | 4 | c | 4 c 4 c+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 4 d | 4 | d | 4 d 4 d+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 4 e | 4 | e | 4 e 4 e+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 5 a | 5 | a | 5 a 5 a+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 5 b | 5 | b | 5 b 5 b+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 5 c | 5 | c | 5 c 5 c+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 5 d | 5 | d | 5 d 5 d+| -par_sqlandworker_tag $PG | | | | | -par_sqlandworker_tag $PG hk | sleep .3;echo 5 e | 5 | e | 5 e 5 e+| -par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_tag $PG --------+-------------------+----+----+-------------+-------- +par_sqlandworker_tag $PG hostname | sleep .3;echo 1 a | 1 | a | 1 a 1 a+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 1 b | 1 | b | 1 b 1 b+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 1 c | 1 | c | 1 c 1 c+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 1 d | 1 | d | 1 d 1 d+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 1 e | 1 | e | 1 e 1 e+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 2 a | 2 | a | 2 a 2 a+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 2 b | 2 | b | 2 b 2 b+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 2 c | 2 | c | 2 c 2 c+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 2 d | 2 | d | 2 d 2 d+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 2 e | 2 | e | 2 e 2 e+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 3 a | 3 | a | 3 a 3 a+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 3 b | 3 | b | 3 b 3 b+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 3 c | 3 | c | 3 c 3 c+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 3 d | 3 | d | 3 d 3 d+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 3 e | 3 | e | 3 e 3 e+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 4 a | 4 | a | 4 a 4 a+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 4 b | 4 | b | 4 b 4 b+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 4 c | 4 | c | 4 c 4 c+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 4 d | 4 | d | 4 d 4 d+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 4 e | 4 | e | 4 e 4 e+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 5 a | 5 | a | 5 a 5 a+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 5 b | 5 | b | 5 b 5 b+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 5 c | 5 | c | 5 c 5 c+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 5 d | 5 | d | 5 d 5 d+| +par_sqlandworker_tag $PG | | | | | +par_sqlandworker_tag $PG hostname | sleep .3;echo 5 e | 5 | e | 5 e 5 e+| +par_sqlandworker_tag $PG | | | | | par_sqlandworker_tag $PG (25 rows) par_sqlandworker_tag $PG par_sqlandworker_tag $SQLITE p_wrapper par_sqlandworker_tag '$SQLITE' par_sqlandworker_tag $SQLITE Exit=0 par_sqlandworker_tag $SQLITE Exit=0 par_sqlandworker_tag $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 1 a|1|a|1 a 1 a +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 1 a|1|a|1 a 1 a par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 1 b|1|b|1 b 1 b +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 1 b|1|b|1 b 1 b par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 1 c|1|c|1 c 1 c +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 1 c|1|c|1 c 1 c par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 1 d|1|d|1 d 1 d +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 1 d|1|d|1 d 1 d par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 1 e|1|e|1 e 1 e +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 1 e|1|e|1 e 1 e par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 2 a|2|a|2 a 2 a +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 2 a|2|a|2 a 2 a par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 2 b|2|b|2 b 2 b +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 2 b|2|b|2 b 2 b par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 2 c|2|c|2 c 2 c +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 2 c|2|c|2 c 2 c par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 2 d|2|d|2 d 2 d +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 2 d|2|d|2 d 2 d par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 2 e|2|e|2 e 2 e +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 2 e|2|e|2 e 2 e par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 3 a|3|a|3 a 3 a +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 3 a|3|a|3 a 3 a par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 3 b|3|b|3 b 3 b +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 3 b|3|b|3 b 3 b par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 3 c|3|c|3 c 3 c +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 3 c|3|c|3 c 3 c par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 3 d|3|d|3 d 3 d +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 3 d|3|d|3 d 3 d par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 3 e|3|e|3 e 3 e +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 3 e|3|e|3 e 3 e par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 4 a|4|a|4 a 4 a +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 4 a|4|a|4 a 4 a par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 4 b|4|b|4 b 4 b +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 4 b|4|b|4 b 4 b par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 4 c|4|c|4 c 4 c +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 4 c|4|c|4 c 4 c par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 4 d|4|d|4 d 4 d +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 4 d|4|d|4 d 4 d par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 4 e|4|e|4 e 4 e +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 4 e|4|e|4 e 4 e par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 5 a|5|a|5 a 5 a +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 5 a|5|a|5 a 5 a par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 5 b|5|b|5 b 5 b +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 5 b|5|b|5 b 5 b par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 5 c|5|c|5 c 5 c +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 5 c|5|c|5 c 5 c par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 5 d|5|d|5 d 5 d +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 5 d|5|d|5 d 5 d par_sqlandworker_tag $SQLITE | -par_sqlandworker_tag $SQLITE hk|sleep .3;echo 5 e|5|e|5 e 5 e +par_sqlandworker_tag $SQLITE hostname|sleep .3;echo 5 e|5|e|5 e 5 e par_sqlandworker_tag $SQLITE | par_sqlandworker_total_jobs $MYSQL p_wrapper par_sqlandworker_total_jobs '$MYSQL' par_sqlandworker_total_jobs $MYSQL Exit=0 par_sqlandworker_total_jobs $MYSQL Exit=0 par_sqlandworker_total_jobs $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_total_jobs $MYSQL hk echo 1 of 25; sleep .3;echo 1 a 1 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 2 of 25; sleep .3;echo 1 b 2 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 3 of 25; sleep .3;echo 1 c 3 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 4 of 25; sleep .3;echo 1 d 4 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 5 of 25; sleep .3;echo 1 e 5 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 6 of 25; sleep .3;echo 2 a 6 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 7 of 25; sleep .3;echo 2 b 7 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 8 of 25; sleep .3;echo 2 c 8 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 9 of 25; sleep .3;echo 2 d 9 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 10 of 25; sleep .3;echo 2 e 10 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 11 of 25; sleep .3;echo 3 a 11 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 12 of 25; sleep .3;echo 3 b 12 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 13 of 25; sleep .3;echo 3 c 13 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 14 of 25; sleep .3;echo 3 d 14 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 15 of 25; sleep .3;echo 3 e 15 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 16 of 25; sleep .3;echo 4 a 16 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 17 of 25; sleep .3;echo 4 b 17 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 18 of 25; sleep .3;echo 4 c 18 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 19 of 25; sleep .3;echo 4 d 19 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 20 of 25; sleep .3;echo 4 e 20 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 21 of 25; sleep .3;echo 5 a 21 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 22 of 25; sleep .3;echo 5 b 22 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 23 of 25; sleep .3;echo 5 c 23 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 24 of 25; sleep .3;echo 5 d 24 of 25\n\n -par_sqlandworker_total_jobs $MYSQL hk echo 25 of 25; sleep .3;echo 5 e 25 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 1 of 25; sleep .3;echo 1 a 1 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 2 of 25; sleep .3;echo 1 b 2 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 3 of 25; sleep .3;echo 1 c 3 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 4 of 25; sleep .3;echo 1 d 4 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 5 of 25; sleep .3;echo 1 e 5 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 6 of 25; sleep .3;echo 2 a 6 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 7 of 25; sleep .3;echo 2 b 7 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 8 of 25; sleep .3;echo 2 c 8 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 9 of 25; sleep .3;echo 2 d 9 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 10 of 25; sleep .3;echo 2 e 10 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 11 of 25; sleep .3;echo 3 a 11 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 12 of 25; sleep .3;echo 3 b 12 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 13 of 25; sleep .3;echo 3 c 13 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 14 of 25; sleep .3;echo 3 d 14 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 15 of 25; sleep .3;echo 3 e 15 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 16 of 25; sleep .3;echo 4 a 16 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 17 of 25; sleep .3;echo 4 b 17 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 18 of 25; sleep .3;echo 4 c 18 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 19 of 25; sleep .3;echo 4 d 19 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 20 of 25; sleep .3;echo 4 e 20 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 21 of 25; sleep .3;echo 5 a 21 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 22 of 25; sleep .3;echo 5 b 22 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 23 of 25; sleep .3;echo 5 c 23 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 24 of 25; sleep .3;echo 5 d 24 of 25\n\n +par_sqlandworker_total_jobs $MYSQL hostname echo 25 of 25; sleep .3;echo 5 e 25 of 25\n\n par_sqlandworker_total_jobs $PG p_wrapper par_sqlandworker_total_jobs '$PG' par_sqlandworker_total_jobs $PG Exit=0 par_sqlandworker_total_jobs $PG Exit=0 -par_sqlandworker_total_jobs $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_total_jobs $PG ------+------------------------------+----+----+----------+-------- -par_sqlandworker_total_jobs $PG hk | echo 1 of 25; sleep .3;echo | 1 | a | 1 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 2 of 25; sleep .3;echo | 1 | b | 2 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 3 of 25; sleep .3;echo | 1 | c | 3 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 4 of 25; sleep .3;echo | 1 | d | 4 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 5 of 25; sleep .3;echo | 1 | e | 5 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 6 of 25; sleep .3;echo | 2 | a | 6 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 7 of 25; sleep .3;echo | 2 | b | 7 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 8 of 25; sleep .3;echo | 2 | c | 8 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 9 of 25; sleep .3;echo | 2 | d | 9 of 25 +| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 10 of 25; sleep .3;echo | 2 | e | 10 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 11 of 25; sleep .3;echo | 3 | a | 11 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 12 of 25; sleep .3;echo | 3 | b | 12 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 13 of 25; sleep .3;echo | 3 | c | 13 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 14 of 25; sleep .3;echo | 3 | d | 14 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 15 of 25; sleep .3;echo | 3 | e | 15 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 16 of 25; sleep .3;echo | 4 | a | 16 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 17 of 25; sleep .3;echo | 4 | b | 17 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 18 of 25; sleep .3;echo | 4 | c | 18 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 19 of 25; sleep .3;echo | 4 | d | 19 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 20 of 25; sleep .3;echo | 4 | e | 20 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 21 of 25; sleep .3;echo | 5 | a | 21 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 22 of 25; sleep .3;echo | 5 | b | 22 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 23 of 25; sleep .3;echo | 5 | c | 23 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 24 of 25; sleep .3;echo | 5 | d | 24 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | -par_sqlandworker_total_jobs $PG hk | echo 25 of 25; sleep .3;echo | 5 | e | 25 of 25+| -par_sqlandworker_total_jobs $PG | | | | +| -par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_total_jobs $PG --------+------------------------------+----+----+----------+-------- +par_sqlandworker_total_jobs $PG hostname | echo 1 of 25; sleep .3;echo | 1 | a | 1 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 2 of 25; sleep .3;echo | 1 | b | 2 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 3 of 25; sleep .3;echo | 1 | c | 3 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 4 of 25; sleep .3;echo | 1 | d | 4 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 5 of 25; sleep .3;echo | 1 | e | 5 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 6 of 25; sleep .3;echo | 2 | a | 6 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 7 of 25; sleep .3;echo | 2 | b | 7 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 8 of 25; sleep .3;echo | 2 | c | 8 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 9 of 25; sleep .3;echo | 2 | d | 9 of 25 +| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 10 of 25; sleep .3;echo | 2 | e | 10 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 11 of 25; sleep .3;echo | 3 | a | 11 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 12 of 25; sleep .3;echo | 3 | b | 12 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 13 of 25; sleep .3;echo | 3 | c | 13 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 14 of 25; sleep .3;echo | 3 | d | 14 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 15 of 25; sleep .3;echo | 3 | e | 15 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 16 of 25; sleep .3;echo | 4 | a | 16 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 17 of 25; sleep .3;echo | 4 | b | 17 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 18 of 25; sleep .3;echo | 4 | c | 18 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 19 of 25; sleep .3;echo | 4 | d | 19 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 20 of 25; sleep .3;echo | 4 | e | 20 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 21 of 25; sleep .3;echo | 5 | a | 21 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 22 of 25; sleep .3;echo | 5 | b | 22 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 23 of 25; sleep .3;echo | 5 | c | 23 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 24 of 25; sleep .3;echo | 5 | d | 24 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | +par_sqlandworker_total_jobs $PG hostname | echo 25 of 25; sleep .3;echo | 5 | e | 25 of 25+| +par_sqlandworker_total_jobs $PG | | | | +| +par_sqlandworker_total_jobs $PG | | | | | par_sqlandworker_total_jobs $PG (25 rows) par_sqlandworker_total_jobs $PG par_sqlandworker_total_jobs $SQLITE p_wrapper par_sqlandworker_total_jobs '$SQLITE' par_sqlandworker_total_jobs $SQLITE Exit=0 par_sqlandworker_total_jobs $SQLITE Exit=0 par_sqlandworker_total_jobs $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_total_jobs $SQLITE hk|echo 1 of 25; sleep .3;echo|1|a|1 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 1 of 25; sleep .3;echo|1|a|1 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 2 of 25; sleep .3;echo|1|b|2 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 2 of 25; sleep .3;echo|1|b|2 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 3 of 25; sleep .3;echo|1|c|3 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 3 of 25; sleep .3;echo|1|c|3 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 4 of 25; sleep .3;echo|1|d|4 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 4 of 25; sleep .3;echo|1|d|4 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 5 of 25; sleep .3;echo|1|e|5 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 5 of 25; sleep .3;echo|1|e|5 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 6 of 25; sleep .3;echo|2|a|6 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 6 of 25; sleep .3;echo|2|a|6 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 7 of 25; sleep .3;echo|2|b|7 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 7 of 25; sleep .3;echo|2|b|7 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 8 of 25; sleep .3;echo|2|c|8 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 8 of 25; sleep .3;echo|2|c|8 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 9 of 25; sleep .3;echo|2|d|9 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 9 of 25; sleep .3;echo|2|d|9 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 10 of 25; sleep .3;echo|2|e|10 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 10 of 25; sleep .3;echo|2|e|10 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 11 of 25; sleep .3;echo|3|a|11 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 11 of 25; sleep .3;echo|3|a|11 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 12 of 25; sleep .3;echo|3|b|12 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 12 of 25; sleep .3;echo|3|b|12 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 13 of 25; sleep .3;echo|3|c|13 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 13 of 25; sleep .3;echo|3|c|13 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 14 of 25; sleep .3;echo|3|d|14 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 14 of 25; sleep .3;echo|3|d|14 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 15 of 25; sleep .3;echo|3|e|15 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 15 of 25; sleep .3;echo|3|e|15 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 16 of 25; sleep .3;echo|4|a|16 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 16 of 25; sleep .3;echo|4|a|16 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 17 of 25; sleep .3;echo|4|b|17 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 17 of 25; sleep .3;echo|4|b|17 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 18 of 25; sleep .3;echo|4|c|18 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 18 of 25; sleep .3;echo|4|c|18 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 19 of 25; sleep .3;echo|4|d|19 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 19 of 25; sleep .3;echo|4|d|19 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 20 of 25; sleep .3;echo|4|e|20 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 20 of 25; sleep .3;echo|4|e|20 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 21 of 25; sleep .3;echo|5|a|21 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 21 of 25; sleep .3;echo|5|a|21 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 22 of 25; sleep .3;echo|5|b|22 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 22 of 25; sleep .3;echo|5|b|22 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 23 of 25; sleep .3;echo|5|c|23 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 23 of 25; sleep .3;echo|5|c|23 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 24 of 25; sleep .3;echo|5|d|24 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 24 of 25; sleep .3;echo|5|d|24 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | -par_sqlandworker_total_jobs $SQLITE hk|echo 25 of 25; sleep .3;echo|5|e|25 of 25 +par_sqlandworker_total_jobs $SQLITE hostname|echo 25 of 25; sleep .3;echo|5|e|25 of 25 par_sqlandworker_total_jobs $SQLITE par_sqlandworker_total_jobs $SQLITE | par_sqlandworker_unbuffer $MYSQL p_wrapper par_sqlandworker_unbuffer '$MYSQL' par_sqlandworker_unbuffer $MYSQL Exit=0 par_sqlandworker_unbuffer $MYSQL Exit=0 par_sqlandworker_unbuffer $MYSQL Host Command V1 V2 Stdout Stderr -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 1 a 1 a -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 1 b 1 b -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 1 c 1 c -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 1 d 1 d -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 1 e 1 e -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 2 a 2 a -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 2 b 2 b -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 2 c 2 c -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 2 d 2 d -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 2 e 2 e -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 3 a 3 a -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 3 b 3 b -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 3 c 3 c -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 3 d 3 d -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 3 e 3 e -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 4 a 4 a -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 4 b 4 b -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 4 c 4 c -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 4 d 4 d -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 4 e 4 e -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 5 a 5 a -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 5 b 5 b -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 5 c 5 c -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 5 d 5 d -par_sqlandworker_unbuffer $MYSQL hk sleep .3;echo 5 e 5 e +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 1 a 1 a +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 1 b 1 b +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 1 c 1 c +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 1 d 1 d +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 1 e 1 e +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 2 a 2 a +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 2 b 2 b +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 2 c 2 c +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 2 d 2 d +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 2 e 2 e +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 3 a 3 a +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 3 b 3 b +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 3 c 3 c +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 3 d 3 d +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 3 e 3 e +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 4 a 4 a +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 4 b 4 b +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 4 c 4 c +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 4 d 4 d +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 4 e 4 e +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 5 a 5 a +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 5 b 5 b +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 5 c 5 c +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 5 d 5 d +par_sqlandworker_unbuffer $MYSQL hostname sleep .3;echo 5 e 5 e par_sqlandworker_unbuffer $PG p_wrapper par_sqlandworker_unbuffer '$PG' par_sqlandworker_unbuffer $PG Exit=0 par_sqlandworker_unbuffer $PG Exit=0 -par_sqlandworker_unbuffer $PG host | command | v1 | v2 | stdout | stderr -par_sqlandworker_unbuffer $PG ------+-------------------+----+----+--------+-------- -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 1 a | 1 | a | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 1 b | 1 | b | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 1 c | 1 | c | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 1 d | 1 | d | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 1 e | 1 | e | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 2 a | 2 | a | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 2 b | 2 | b | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 2 c | 2 | c | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 2 d | 2 | d | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 2 e | 2 | e | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 3 a | 3 | a | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 3 b | 3 | b | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 3 c | 3 | c | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 3 d | 3 | d | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 3 e | 3 | e | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 4 a | 4 | a | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 4 b | 4 | b | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 4 c | 4 | c | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 4 d | 4 | d | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 4 e | 4 | e | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 5 a | 5 | a | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 5 b | 5 | b | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 5 c | 5 | c | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 5 d | 5 | d | | -par_sqlandworker_unbuffer $PG hk | sleep .3;echo 5 e | 5 | e | | +par_sqlandworker_unbuffer $PG host | command | v1 | v2 | stdout | stderr +par_sqlandworker_unbuffer $PG --------+-------------------+----+----+--------+-------- +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 1 a | 1 | a | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 1 b | 1 | b | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 1 c | 1 | c | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 1 d | 1 | d | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 1 e | 1 | e | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 2 a | 2 | a | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 2 b | 2 | b | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 2 c | 2 | c | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 2 d | 2 | d | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 2 e | 2 | e | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 3 a | 3 | a | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 3 b | 3 | b | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 3 c | 3 | c | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 3 d | 3 | d | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 3 e | 3 | e | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 4 a | 4 | a | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 4 b | 4 | b | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 4 c | 4 | c | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 4 d | 4 | d | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 4 e | 4 | e | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 5 a | 5 | a | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 5 b | 5 | b | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 5 c | 5 | c | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 5 d | 5 | d | | +par_sqlandworker_unbuffer $PG hostname | sleep .3;echo 5 e | 5 | e | | par_sqlandworker_unbuffer $PG (25 rows) par_sqlandworker_unbuffer $PG par_sqlandworker_unbuffer $SQLITE p_wrapper par_sqlandworker_unbuffer '$SQLITE' par_sqlandworker_unbuffer $SQLITE Exit=0 par_sqlandworker_unbuffer $SQLITE Exit=0 par_sqlandworker_unbuffer $SQLITE Host|Command|V1|V2|Stdout|Stderr -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 1 a|1|a|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 1 b|1|b|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 1 c|1|c|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 1 d|1|d|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 1 e|1|e|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 2 a|2|a|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 2 b|2|b|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 2 c|2|c|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 2 d|2|d|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 2 e|2|e|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 3 a|3|a|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 3 b|3|b|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 3 c|3|c|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 3 d|3|d|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 3 e|3|e|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 4 a|4|a|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 4 b|4|b|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 4 c|4|c|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 4 d|4|d|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 4 e|4|e|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 5 a|5|a|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 5 b|5|b|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 5 c|5|c|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 5 d|5|d|| -par_sqlandworker_unbuffer $SQLITE hk|sleep .3;echo 5 e|5|e|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 1 a|1|a|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 1 b|1|b|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 1 c|1|c|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 1 d|1|d|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 1 e|1|e|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 2 a|2|a|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 2 b|2|b|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 2 c|2|c|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 2 d|2|d|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 2 e|2|e|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 3 a|3|a|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 3 b|3|b|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 3 c|3|c|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 3 d|3|d|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 3 e|3|e|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 4 a|4|a|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 4 b|4|b|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 4 c|4|c|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 4 d|4|d|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 4 e|4|e|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 5 a|5|a|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 5 b|5|b|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 5 c|5|c|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 5 d|5|d|| +par_sqlandworker_unbuffer $SQLITE hostname|sleep .3;echo 5 e|5|e|| diff --git a/testsuite/wanted-results/parallel-local-ssh1 b/testsuite/wanted-results/parallel-local-ssh1 index a12928e0..d1e61ca6 100644 --- a/testsuite/wanted-results/parallel-local-ssh1 +++ b/testsuite/wanted-results/parallel-local-ssh1 @@ -28,36 +28,12 @@ echo '### Stop if all hosts are filtered and there are no hosts left to run on' ### Stop if all hosts are filtered and there are no hosts left to run on stdout parallel --filter-hosts -S no-such.host echo ::: 1 parallel: Warning: Removed no-such.host. -parallel: Error: There are no hosts left to run on. +parallel: Error: Cannot run any jobs. echo '### Can csh propagate a variable containing \n'; export A=$(seq 3); parallel -S csh@lo --env A bash -c \''echo "$A"'\' ::: dummy ### Can csh propagate a variable containing \n 1 2 3 -echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores' -### bug #41805: Idea: propagate --env for parallel --number-of-cores - echo '** test_zsh' -** test_zsh - FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' -FOO=test_zsh -HOME=~ - echo '** test_zsh_filter' -** test_zsh_filter - FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' -FOO=test_zsh_filter -HOME=~ - echo '** test_csh' -** test_csh - FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' -FOO=test_csh -HOME=~ - echo '** test_csh_filter' -** test_csh_filter - FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME' -FOO=test_csh_filter -HOME=~ - echo '** bug #41805 done' -** bug #41805 done echo '### Test bug #34241: --pipe should not spawn unneeded processes' ### Test bug #34241: --pipe should not spawn unneeded processes seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end @@ -171,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-ssh2 b/testsuite/wanted-results/parallel-local-ssh2 index 43d38e4b..828abba6 100644 --- a/testsuite/wanted-results/parallel-local-ssh2 +++ b/testsuite/wanted-results/parallel-local-ssh2 @@ -90,14 +90,14 @@ par_tee_ssh 2 par_tee_ssh 3 par_tee_ssh 3 par_wd_no_such_dir ### --wd no-such-dir - csh -par_wd_no_such_dir mkdir: cannot create directory ‘/no-such-dir’: Permission denied +par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir Exit code 1 par_wd_no_such_dir ### --wd no-such-dir - tcsh -par_wd_no_such_dir mkdir: cannot create directory ‘/no-such-dir’: Permission denied +par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir Exit code 1 par_wd_no_such_dir ### --wd no-such-dir - bash -par_wd_no_such_dir mkdir: cannot create directory ‘/no-such-dir’: Permission denied +par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir par_wd_no_such_dir Exit code 1 diff --git a/testsuite/wanted-results/parallel-local-ssh3 b/testsuite/wanted-results/parallel-local-ssh3 index 6de7dda2..39e084f3 100644 --- a/testsuite/wanted-results/parallel-local-ssh3 +++ b/testsuite/wanted-results/parallel-local-ssh3 @@ -20,10 +20,6 @@ echo '### bug #45906: {= in header =}' ### bug #45906: {= in header =} rm -f returnfile45906; parallel --rpl '{G} $_=lc($_)' -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: RETURNFILE45906; ls returnfile45906 returnfile45906 -echo '### bug #45907: --header : + --return {header}' -### bug #45907: --header : + --return {header} - rm returnfile45907; ppar --header : -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: G returnfile45907; ls returnfile45907 -returnfile45907 echo "### bug #47608: parallel --nonall -S lo 'echo ::: ' blocks" ### bug #47608: parallel --nonall -S lo 'echo ::: ' blocks parallel --nonall -S lo 'echo ::: ' @@ -39,6 +35,8 @@ echo '### bug #49404: "Max jobs to run" does not equal the number of jobs specif should give 10 running jobs stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10 1:lo / 16 / 10 +par_header_in_return ### bug #45907: --header : + --return {header} +par_header_in_return returnfile45907 par_hostgroup_only_on_args ### Auto add hostgroup if given on on argument par_hostgroup_only_on_args parallel: Warning: Adding hostgroups: sh@lo par_hostgroup_only_on_args sh 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 d0537eb5..8b070a93 100644 --- a/testsuite/wanted-results/parallel-local-ssh5 +++ b/testsuite/wanted-results/parallel-local-ssh5 @@ -12,6 +12,9 @@ par_lsh parallel: Warning: Could not figure out number of cpus on lo (). Using 1 par_lsh OK par_input_loss_pipe ### bug #36595: silent loss of input with --pipe and --sshlogin par_input_loss_pipe 1 10000 48894 +par_env_parallel_onall bug #54352: env_parallel -Slo --nonall myfunc broken in 20180722 +par_env_parallel_onall Myfunc works +par_env_parallel_onall Myfunc works par_controlmaster_eats bug #36707: --controlmaster eats jobs par_controlmaster_eats OK1 par_controlmaster_eats OK2 diff --git a/testsuite/wanted-results/parallel-local-ssh7 b/testsuite/wanted-results/parallel-local-ssh7 index 31c57c99..5a972bb6 100644 --- a/testsuite/wanted-results/parallel-local-ssh7 +++ b/testsuite/wanted-results/parallel-local-ssh7 @@ -66,6 +66,8 @@ par_zsh_parset 2 par_zsh_parset 3 par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz par_zsh_parset myecho myvar myarr 0 myfun foo myecho myvar myarr 0 myfun bar myecho myvar myarr 0 myfun baz +par_zsh_parset Exit value 2 = 2 +par_zsh_parset Exit value 2 = 2 par_zsh_man ### zsh par_zsh_man ### From man env_parallel par_zsh_man aliases with = & " ! ' work @@ -127,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 @@ -368,7 +368,7 @@ par_tcsh_funky par_tcsh_funky 3 arg alias_works par_tcsh_funky 3 arg alias_works_over_ssh par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky alias_var_works -par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funky alias_var_works_over_ssh +par_tcsh_funky Funky-  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky alias_var_works_over_ssh par_tcsh_funky \\\\\\\\ \ \ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<\=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ par_tcsh_funky func_echo: Command not found. par_tcsh_funky func_echo: Command not found. @@ -438,6 +438,8 @@ par_sh_parset newline2 par_sh_parset 1 par_sh_parset 2 par_sh_parset 3 +par_sh_parset Exit value 2 = 2 +par_sh_parset Exit value 2 = 2 par_sh_man ### sh par_sh_man ### From man env_parallel par_sh_man aliases with = & " ! ' work @@ -483,27 +485,11 @@ par_sh_environment_too_big OK_bigvar par_sh_environment_too_big OK_bigvar_remote par_sh_environment_too_big OK_bigvar_quote par_sh_environment_too_big OK_bigvar_quote_remote -par_sh_environment_too_big Rest should fail -par_sh_environment_too_big sh: XXX: perl: Argument list too long -par_sh_environment_too_big env_parallel: Error: Your environment is too big. -par_sh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_sh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_sh_environment_too_big env_parallel: Error: variables or define functions. -par_sh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_sh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_sh_environment_too_big env_parallel: Error: env_parallel --record-env -par_sh_environment_too_big env_parallel: Error: And then use '--env _' -par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_sh_environment_too_big sh: XXX: perl: Argument list too long -par_sh_environment_too_big env_parallel: Error: Your environment is too big. -par_sh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_sh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_sh_environment_too_big env_parallel: Error: variables or define functions. -par_sh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_sh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_sh_environment_too_big env_parallel: Error: env_parallel --record-env -par_sh_environment_too_big env_parallel: Error: And then use '--env _' -par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_sh_environment_too_big OK_bigfunc +par_sh_environment_too_big OK_bigfunc_remote +par_sh_environment_too_big OK_bigfunc_quote +par_sh_environment_too_big OK_bigfunc_quote_remote +par_sh_environment_too_big Rest should fail - functions not supported in sh par_sh_environment_too_big sh: XXX: perl: Argument list too long par_sh_environment_too_big env_parallel: Error: Your environment is too big. par_sh_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -514,6 +500,7 @@ par_sh_environment_too_big env_parallel: Error: 3. Try running this in a clean e par_sh_environment_too_big env_parallel: Error: env_parallel --record-env par_sh_environment_too_big env_parallel: Error: And then use '--env _' par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_sh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote par_sh_environment_too_big sh: XXX: perl: Argument list too long par_sh_environment_too_big env_parallel: Error: Your environment is too big. par_sh_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -524,6 +511,11 @@ par_sh_environment_too_big env_parallel: Error: 3. Try running this in a clean e par_sh_environment_too_big env_parallel: Error: env_parallel --record-env par_sh_environment_too_big env_parallel: Error: And then use '--env _' par_sh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_sh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote +par_sh_environment_too_big fail_bigfunc-not-supported +par_sh_environment_too_big fail_bigfunc_remote-not-supported +par_sh_environment_too_big fail_bigfunc_quote-not-supported +par_sh_environment_too_big fail_bigfunc_quote_remote-not-supported par_sh_env_parallel_session ### Test env_parallel --session par_sh_env_parallel_session /bin/sh: XXX: aliasbefore: not found par_sh_env_parallel_session /bin/sh: XXX: aliasbefore: not found @@ -593,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 @@ -608,6 +600,8 @@ par_mksh_parset 2 par_mksh_parset 3 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 Exit value 2 = 2 +par_mksh_parset Exit value 2 = 2 par_mksh_man ### mksh par_mksh_man ### From man env_parallel par_mksh_man aliases with = & " ! ' work @@ -705,86 +699,14 @@ par_mksh_environment_too_big OK_bigfunc_remote par_mksh_environment_too_big OK_bigfunc_quote par_mksh_environment_too_big OK_bigfunc_quote_remote par_mksh_environment_too_big Rest should fail -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_mksh_environment_too_big mksh: /usr/bin/perl: Argument list too long -par_mksh_environment_too_big env_parallel: Error: Your environment is too big. -par_mksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_mksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_mksh_environment_too_big env_parallel: Error: variables or define functions. -par_mksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_mksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_mksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_mksh_environment_too_big env_parallel: Error: And then use '--env _' -par_mksh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_remote +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_quote +par_mksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_quote_remote par_mksh_env_parallel_session ### Test env_parallel --session par_mksh_env_parallel_session /bin/mksh: aliasbefore: not found par_mksh_env_parallel_session /bin/mksh: aliasbefore: not found @@ -874,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 @@ -889,6 +811,8 @@ par_ksh_parset 2 par_ksh_parset 3 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 Exit value 2 = 2 +par_ksh_parset Exit value 2 = 2 par_ksh_man ### ksh par_ksh_man ### From man env_parallel par_ksh_man aliases with = & " ! ' work @@ -957,9 +881,9 @@ par_ksh_man work, par_ksh_man too par_ksh_man This may never work par_ksh_man https://unix.stackexchange.com/questions/457031/extract-full-function-definitions -par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched -par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched -par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `{' unmatched +par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `(' unexpected +par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `(' unexpected +par_ksh_man /usr/bin/ksh: line 21: syntax error at line XXX: `(' unexpected par_ksh_man exit value 2 should be 2 par_ksh_man Unknown option: no-such-option par_ksh_man exit value 255 should be 255 @@ -1000,6 +924,7 @@ par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env par_ksh_environment_too_big env_parallel: Error: And then use '--env _' par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long] par_ksh_environment_too_big env_parallel: Error: Your environment is too big. par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1010,6 +935,7 @@ par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env par_ksh_environment_too_big env_parallel: Error: And then use '--env _' par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long] par_ksh_environment_too_big env_parallel: Error: Your environment is too big. par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1020,36 +946,7 @@ par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env par_ksh_environment_too_big env_parallel: Error: And then use '--env _' par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long] -par_ksh_environment_too_big env_parallel: Error: Your environment is too big. -par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_ksh_environment_too_big env_parallel: Error: variables or define functions. -par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_ksh_environment_too_big env_parallel: Error: And then use '--env _' -par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long] -par_ksh_environment_too_big env_parallel: Error: Your environment is too big. -par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_ksh_environment_too_big env_parallel: Error: variables or define functions. -par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_ksh_environment_too_big env_parallel: Error: And then use '--env _' -par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel -par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long] -par_ksh_environment_too_big env_parallel: Error: Your environment is too big. -par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_ksh_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_ksh_environment_too_big env_parallel: Error: variables or define functions. -par_ksh_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_ksh_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_ksh_environment_too_big env_parallel: Error: env_parallel --record-env -par_ksh_environment_too_big env_parallel: Error: And then use '--env _' -par_ksh_environment_too_big env_parallel: Error: For details see: man env_parallel +par_ksh_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_remote par_ksh_environment_too_big ksh[XXX]: perl: /usr/bin/perl: cannot execute [Argument list too long] par_ksh_environment_too_big env_parallel: Error: Your environment is too big. par_ksh_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1114,36 +1011,41 @@ par_ksh_env_parallel env_parallel: Warning: See BUGS in "man env_parallel". par_ksh_env_parallel env_parallel: Warning: See BUGS in "man env_parallel". par_ksh_env_parallel env_parallel: Warning: See BUGS in "man env_parallel". par_fish_underscore ### fish +par_fish_underscore Fish is broken par_fish_underscore ### Testing of --env _ par_fish_underscore variables in aliases and arrays in functions work par_fish_underscore variables in aliases and arrays in functions work par_fish_underscore variables in aliases and arrays in functions work par_fish_underscore variables in aliases and arrays in functions work -par_fish_underscore variables in aliases and arrays in functions work -par_fish_underscore variables in aliases and arrays in functions work -par_fish_underscore ^ -par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore not_copied_alias 'error=OK' +par_fish_underscore ^ +par_fish_underscore not_copied_func 'error=OK' +par_fish_underscore ^ par_fish_underscore error=OK par_fish_underscore error=OK -par_fish_underscore aliases and arrays in functions work -par_fish_underscore aliases and arrays in functions work -par_fish_underscore aliases functions work -par_fish_underscore aliases functions work -par_fish_underscore ^ -par_fish_underscore in function “myfunc” -par_fish_underscore called on standard input -par_fish_underscore with parameter list “work” -par_fish_underscore +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho -par_fish_underscore ^ -par_fish_underscore in function “myfunc” -par_fish_underscore called on standard input -par_fish_underscore with parameter list “work” -par_fish_underscore +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myecho -par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc -par_fish_underscore ^ +par_fish_underscore myfunc work +par_fish_underscore ^ par_fish_underscore OK if ^^^^^^^^^^^^^^^^^ no myfunc par_fish_parset Not implemented par_fish_man ### fish @@ -1192,6 +1094,8 @@ par_fish_man env_parallel par_fish_man exit value 2 should be 2 par_fish_man Unknown option: no-such-option par_fish_man exit value 255 should be 255 `sleep 1` +par_fish_funky Fish is broken +par_fish_funky setenv: Too many arguments par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported par_fish_funky 3 arg alias_works par_fish_funky env_parallel: Warning: ASCII value 1 in variables is not supported @@ -1203,7 +1107,7 @@ par_fish_funky par_fish_funky par_fish_funky par_fish_funky Funky-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky -par_fish_funky Funkyenv-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funkyenv +par_fish_funky Funkyenv--funkyenv par_fish_funky par_fish_funky par_fish_funky @@ -1218,7 +1122,7 @@ par_fish_funky par_fish_funky par_fish_funky par_fish_funky Funky-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funky -par_fish_funky Funkyenv-   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~-funkyenv +par_fish_funky Funkyenv--funkyenv par_fish_funky par_fish_funky par_fish_funky @@ -1226,16 +1130,11 @@ par_fish_funky par_fish_funky '   !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' par_fish_environment_too_big Not implemented par_fish_env_parallel_session Not implemented +par_fish_env_parallel Fish is broken par_fish_env_parallel bug #50435: Remote fifo broke in 20150522 par_fish_env_parallel TODO fix env_parallel --fifo -par_fish_env_parallel 'end' outside of a block -par_fish_env_parallel fish: end -par_fish_env_parallel ^ -par_fish_env_parallel data from stdin -par_fish_env_parallel OK -par_fish_env_parallel $? is not the exit status. In fish, please use $status. -par_fish_env_parallel fish: cat $PARALLEL_TMP; and echo $OK;perl -e '$bash=shift;$csh=shift;for(@ARGV){unlink;rmdir;}if($bash=~s/h//){exit$bash;}exit$csh;' "$?h" "$status" $PARALLEL_TMP -par_fish_env_parallel ^ +par_fish_env_parallel parallel: Error: Command line too long (XXX >= XXX) at input 0: $PARALLEL_TMP +par_fish_env_parallel parallel: Error: Command line too long (XXX >= XXX) at input 0: $PARALLEL_TMP par_dash_underscore ### dash par_dash_underscore ### Testing of --env _ par_dash_underscore variables in aliases work @@ -1277,6 +1176,8 @@ par_dash_parset newline2 par_dash_parset 1 par_dash_parset 2 par_dash_parset 3 +par_dash_parset Exit value 2 = 2 +par_dash_parset Exit value 2 = 2 par_dash_man ### dash par_dash_man ### From man env_parallel par_dash_man aliases with = & " ! ' work @@ -1322,27 +1223,11 @@ par_dash_environment_too_big OK_bigvar par_dash_environment_too_big OK_bigvar_remote par_dash_environment_too_big OK_bigvar_quote par_dash_environment_too_big OK_bigvar_quote_remote -par_dash_environment_too_big Rest should fail -par_dash_environment_too_big dash: XXX: perl: Argument list too long -par_dash_environment_too_big env_parallel: Error: Your environment is too big. -par_dash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_dash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_dash_environment_too_big env_parallel: Error: variables or define functions. -par_dash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_dash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_dash_environment_too_big env_parallel: Error: env_parallel --record-env -par_dash_environment_too_big env_parallel: Error: And then use '--env _' -par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_dash_environment_too_big dash: XXX: perl: Argument list too long -par_dash_environment_too_big env_parallel: Error: Your environment is too big. -par_dash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_dash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_dash_environment_too_big env_parallel: Error: variables or define functions. -par_dash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_dash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_dash_environment_too_big env_parallel: Error: env_parallel --record-env -par_dash_environment_too_big env_parallel: Error: And then use '--env _' -par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_dash_environment_too_big OK_bigfunc +par_dash_environment_too_big OK_bigfunc_remote +par_dash_environment_too_big OK_bigfunc_quote +par_dash_environment_too_big OK_bigfunc_quote_remote +par_dash_environment_too_big Rest should fail - functions not supported in dash par_dash_environment_too_big dash: XXX: perl: Argument list too long par_dash_environment_too_big env_parallel: Error: Your environment is too big. par_dash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1353,6 +1238,7 @@ par_dash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_dash_environment_too_big env_parallel: Error: env_parallel --record-env par_dash_environment_too_big env_parallel: Error: And then use '--env _' par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_dash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote par_dash_environment_too_big dash: XXX: perl: Argument list too long par_dash_environment_too_big env_parallel: Error: Your environment is too big. par_dash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1363,6 +1249,11 @@ par_dash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_dash_environment_too_big env_parallel: Error: env_parallel --record-env par_dash_environment_too_big env_parallel: Error: And then use '--env _' par_dash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_dash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote +par_dash_environment_too_big fail_bigfunc-not-supported +par_dash_environment_too_big fail_bigfunc_remote-not-supported +par_dash_environment_too_big fail_bigfunc_quote-not-supported +par_dash_environment_too_big fail_bigfunc_quote_remote-not-supported par_dash_env_parallel_session ### Test env_parallel --session par_dash_env_parallel_session /bin/dash: XXX: aliasbefore: not found par_dash_env_parallel_session /bin/dash: XXX: aliasbefore: not found @@ -1451,8 +1342,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))... @@ -1477,15 +1368,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 @@ -1538,7 +1432,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 @@ -1553,6 +1447,8 @@ par_bash_parset 2 par_bash_parset 3 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 Exit value 2 = 2 +par_bash_parset Exit value 2 = 2 par_bash_man ### bash par_bash_man ### From man env_parallel par_bash_man aliases with = & " ! ' work @@ -1671,6 +1567,7 @@ par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And then use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1681,6 +1578,7 @@ par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And then use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1691,36 +1589,7 @@ par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And then use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long -par_bash_environment_too_big env_parallel: Error: Your environment is too big. -par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_bash_environment_too_big env_parallel: Error: variables or define functions. -par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_bash_environment_too_big env_parallel: Error: env_parallel --record-env -par_bash_environment_too_big env_parallel: Error: And then use '--env _' -par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long -par_bash_environment_too_big env_parallel: Error: Your environment is too big. -par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_bash_environment_too_big env_parallel: Error: variables or define functions. -par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_bash_environment_too_big env_parallel: Error: env_parallel --record-env -par_bash_environment_too_big env_parallel: Error: And then use '--env _' -par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long -par_bash_environment_too_big env_parallel: Error: Your environment is too big. -par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_bash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_bash_environment_too_big env_parallel: Error: variables or define functions. -par_bash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_bash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_bash_environment_too_big env_parallel: Error: env_parallel --record-env -par_bash_environment_too_big env_parallel: Error: And then use '--env _' -par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_bash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigfunc_remote par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1819,6 +1688,8 @@ par_ash_parset newline2 par_ash_parset 1 par_ash_parset 2 par_ash_parset 3 +par_ash_parset Exit value 2 = 2 +par_ash_parset Exit value 2 = 2 par_ash_man ### ash par_ash_man ### From man env_parallel par_ash_man aliases with = & " ! ' work @@ -1864,27 +1735,11 @@ par_ash_environment_too_big OK_bigvar par_ash_environment_too_big OK_bigvar_remote par_ash_environment_too_big OK_bigvar_quote par_ash_environment_too_big OK_bigvar_quote_remote -par_ash_environment_too_big Rest should fail -par_ash_environment_too_big ash: XXX: perl: Argument list too long -par_ash_environment_too_big env_parallel: Error: Your environment is too big. -par_ash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_ash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_ash_environment_too_big env_parallel: Error: variables or define functions. -par_ash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_ash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_ash_environment_too_big env_parallel: Error: env_parallel --record-env -par_ash_environment_too_big env_parallel: Error: And then use '--env _' -par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_ash_environment_too_big ash: XXX: perl: Argument list too long -par_ash_environment_too_big env_parallel: Error: Your environment is too big. -par_ash_environment_too_big env_parallel: Error: You can try 3 different approaches: -par_ash_environment_too_big env_parallel: Error: 1. Run 'env_parallel --session' before you set -par_ash_environment_too_big env_parallel: Error: variables or define functions. -par_ash_environment_too_big env_parallel: Error: 2. Use --env and only mention the names to copy. -par_ash_environment_too_big env_parallel: Error: 3. Try running this in a clean environment once: -par_ash_environment_too_big env_parallel: Error: env_parallel --record-env -par_ash_environment_too_big env_parallel: Error: And then use '--env _' -par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_ash_environment_too_big OK_bigfunc +par_ash_environment_too_big OK_bigfunc_remote +par_ash_environment_too_big OK_bigfunc_quote +par_ash_environment_too_big OK_bigfunc_quote_remote +par_ash_environment_too_big Rest should fail - functions not supported in ash par_ash_environment_too_big ash: XXX: perl: Argument list too long par_ash_environment_too_big env_parallel: Error: Your environment is too big. par_ash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1895,6 +1750,7 @@ par_ash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_ash_environment_too_big env_parallel: Error: env_parallel --record-env par_ash_environment_too_big env_parallel: Error: And then use '--env _' par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_ash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_remote par_ash_environment_too_big ash: XXX: perl: Argument list too long par_ash_environment_too_big env_parallel: Error: Your environment is too big. par_ash_environment_too_big env_parallel: Error: You can try 3 different approaches: @@ -1905,6 +1761,11 @@ par_ash_environment_too_big env_parallel: Error: 3. Try running this in a clean par_ash_environment_too_big env_parallel: Error: env_parallel --record-env par_ash_environment_too_big env_parallel: Error: And then use '--env _' par_ash_environment_too_big env_parallel: Error: For details see: man env_parallel +par_ash_environment_too_big parallel: Error: Command line too long (XXX >= XXX) at input 0: fail_bigvar_quote_remote +par_ash_environment_too_big fail_bigfunc-not-supported +par_ash_environment_too_big fail_bigfunc_remote-not-supported +par_ash_environment_too_big fail_bigfunc_quote-not-supported +par_ash_environment_too_big fail_bigfunc_quote_remote-not-supported par_ash_env_parallel_session ### Test env_parallel --session par_ash_env_parallel_session /bin/ash: XXX: aliasbefore: not found par_ash_env_parallel_session /bin/ash: XXX: aliasbefore: not found diff --git a/testsuite/wanted-results/parallel-local-ssh8 b/testsuite/wanted-results/parallel-local-ssh8 index 7ada847d..672f8034 100644 --- a/testsuite/wanted-results/parallel-local-ssh8 +++ b/testsuite/wanted-results/parallel-local-ssh8 @@ -15,19 +15,19 @@ 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 par_path_remote_csh parallel: Warning: Removed lo. -par_path_remote_csh parallel: Error: There are no hosts left to run on. +par_path_remote_csh parallel: Error: Cannot run any jobs. par_path_remote_csh Right now it seems csh does not respect /bin:/usr/bin:/tmp if set from Perl par_path_remote_csh Done par_retries_1 ### Test of --retries - it should run 13 jobs in total diff --git a/testsuite/wanted-results/parallel-local-ssh9 b/testsuite/wanted-results/parallel-local-ssh9 index 6d763281..c2e167d6 100644 --- a/testsuite/wanted-results/parallel-local-ssh9 +++ b/testsuite/wanted-results/parallel-local-ssh9 @@ -40,6 +40,28 @@ par_sh_embed your par_sh_embed code par_sh_embed here par_sh_embed Put your code here +par_propagate_env ### bug #41805: Idea: propagate --env for parallel --number-of-cores +par_propagate_env ** test_zsh +par_propagate_env FOO=test_zsh +par_propagate_env HOME=~ +par_propagate_env ** test_zsh_filter +par_propagate_env FOO=test_zsh_filter +par_propagate_env HOME=~ +par_propagate_env ** test_csh +par_propagate_env FOO=test_csh +par_propagate_env HOME=~ +par_propagate_env ** test_csh_filter +par_propagate_env FOO=test_csh_filter +par_propagate_env HOME=~ +par_propagate_env ** bug #41805 done +par_no_route_to_host ### no route to host with | and -j0 causes inf loop +par_no_route_to_host ssh: connect to host 192.168.1.199 port 22: No route to host +par_no_route_to_host parallel: Warning: ssh to 192.168.1.199 only allows for 0 simultaneous logins. +par_no_route_to_host parallel: Warning: You may raise this by changing +par_no_route_to_host parallel: Warning: /etc/ssh/sshd_config:MaxStartups and MaxSessions on 192.168.1.199. +par_no_route_to_host parallel: Warning: You can also try --sshdelay 0.1 +par_no_route_to_host parallel: Warning: Using only -1 connections to avoid race conditions. +par_no_route_to_host parallel: Error: Cannot run any jobs. par_ksh_embed --embed par_ksh_embed Redirect the output to a file and add your changes at the end: par_ksh_embed /usr/local/bin/parallel --embed > new_script @@ -66,6 +88,9 @@ par_ksh_embed code par_ksh_embed here par_ksh_embed Put your code here par_fish_embed Not implemented +par_env_parallel_big_env ### bug #54128: command too long when exporting big env +par_env_parallel_big_env should not fail +par_env_parallel_big_env OK par_csh_embed Not implemented par_bash_embed --embed par_bash_embed Redirect the output to a file and add your changes at the end: diff --git a/testsuite/wanted-results/parallel-local12 b/testsuite/wanted-results/parallel-local12 index b0ca1f42..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-local13 b/testsuite/wanted-results/parallel-local13 index 26024b73..4959fd87 100644 --- a/testsuite/wanted-results/parallel-local13 +++ b/testsuite/wanted-results/parallel-local13 @@ -1342,9 +1342,9 @@ echo '### -t echo this plus that < space.xi' stdout xargs -t echo this plus that < space.xi echo this plus that this plus that -stdout parallel -k -t echo this plus that < space.xi -echo this plus that '' +stdout parallel -k -t echo this plus that < space.xi | sort echo this plus that ' ' +echo this plus that '' this plus that this plus that echo '### -n1 printf "@%s@\n" < empty.xi' @@ -1365,7 +1365,7 @@ echo foo bar foo bar echo baz ugh baz ugh -stdout parallel -k -n2 -t echo < foobar.xi +stdout parallel -k -n2 -t echo < foobar.xi | sort echo 'foo bar' 'baz ' echo ugh foo bar baz 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..c266210b 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' @@ -314,8 +314,3 @@ bug #34241: --pipe should not spawn unneeded processes - part 2 2 No .par should exist ls: cannot access '*.par': No such file or directory -echo "bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'" -bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu' - export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK' -echo 'space in envvar OK' -space in envvar OK diff --git a/testsuite/wanted-results/parallel-local18 b/testsuite/wanted-results/parallel-local18 index fa006ba9..0b59c140 100644 --- a/testsuite/wanted-results/parallel-local18 +++ b/testsuite/wanted-results/parallel-local18 @@ -7,8 +7,6 @@ par_env_newline_backslash_bash 8 par_env_newline_backslash_csh ### Test --env for \n and \\ - single and double (*csh only) - no output is good but csh fails par_env_newline_backslash_csh 2 2\ \92V2=\ \92 par_env_newline_backslash_csh 2 2\\ \92V2=\\ \92 -par_env_newline_backslash_csh 2 Unmatched ". -par_env_newline_backslash_csh 2 Unmatched '"'. par_env_newline_backslash_onall_bash ### Test --env for \n and \\ - single and double --onall (bash only) - no output is good par_env_newline_backslash_onall_bash 16 par_env_newline_backslash_onall_bash 16 @@ -17,6 +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_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-local19 b/testsuite/wanted-results/parallel-local19 index a23f0ef2..8da77eaa 100644 --- a/testsuite/wanted-results/parallel-local19 +++ b/testsuite/wanted-results/parallel-local19 @@ -135,7 +135,7 @@ a13.gifb13c13 a14.gifb14c14 a15.gifb15c15 a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7 a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13 a14.gif 15.gifb14 15c14 15 - echo '### Test -I with shell meta chars' +echo '### Test -I with shell meta chars' ### Test -I with shell meta chars seq 10000 | parallel -j1 -I :: -X echo a::b::c:: | wc -l 2 @@ -145,7 +145,7 @@ a14.gif 15.gifb14 15c14 15 2 seq 10000 | parallel -j1 -I '>' -X echo 'a>b>c>' | wc -l 2 - echo '### Test {.}' +echo '### Test {.}' ### Test {.} echo a | parallel -qX echo "'"{.}"' " 'a' 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 c3511d92..a2543d8d 100644 --- a/testsuite/wanted-results/parallel-local23 +++ b/testsuite/wanted-results/parallel-local23 @@ -61,8 +61,8 @@ 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 -Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018 -Ole Tange and Free Software Foundation, Inc. +GNU parallel 20181124 +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. GNU parallel comes with no warranty. diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index ce31257a..92c2ecfe 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -1,963 +1,1405 @@ -MAXTIME=25 RETRIES=4 +MAXTIME=50 RETRIES=2 MAXPROC=11 MAXINNERPROC=3 +### Filter out working servers +1d0 +< openstep +4d2 +< alpha +7d4 +< syllable +28,29d24 +< dragonfly +< vax +31d25 +< minix +34,35d27 +< beaglebone +< cubieboard2 ### Copy commands to servers -bin/parallel openbsd.polarhome.com copy openbsd.polarhome.com bin/parallel parallel -bin/parallel tru64.polarhome.com copy tru64.polarhome.com bin/parallel parallel -bin/parallel debian.polarhome.com copy debian.polarhome.com bin/parallel parallel -bin/parallel redhat.polarhome.com copy redhat.polarhome.com bin/parallel parallel -bin/parallel netbsd.polarhome.com copy netbsd.polarhome.com bin/parallel parallel -bin/parallel macosx.polarhome.com copy macosx.polarhome.com bin/parallel parallel -bin/parallel miros.polarhome.com copy miros.polarhome.com bin/parallel parallel -bin/parallel centos.polarhome.com copy centos.polarhome.com bin/parallel parallel -bin/parallel unixware.polarhome.com copy unixware.polarhome.com bin/parallel parallel -bin/parallel pidora.polarhome.com copy pidora.polarhome.com bin/parallel parallel -bin/parallel scosysv.polarhome.com copy scosysv.polarhome.com bin/parallel parallel -bin/parallel raspbian.polarhome.com copy raspbian.polarhome.com bin/parallel parallel -bin/parallel solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/parallel parallel -bin/parallel aix.polarhome.com copy aix.polarhome.com bin/parallel parallel -bin/parallel mandriva.polarhome.com copy mandriva.polarhome.com bin/parallel parallel -bin/parallel debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/parallel parallel -bin/parallel suse.polarhome.com copy suse.polarhome.com bin/parallel parallel -bin/parallel solaris.polarhome.com copy solaris.polarhome.com bin/parallel parallel -bin/parallel hpux.polarhome.com copy hpux.polarhome.com bin/parallel parallel -bin/parallel hurd.polarhome.com copy hurd.polarhome.com bin/parallel parallel -bin/parallel freebsd.polarhome.com copy freebsd.polarhome.com bin/parallel parallel -bin/parallel ubuntu.polarhome.com copy ubuntu.polarhome.com bin/parallel parallel -bin/parallel openindiana.polarhome.com copy openindiana.polarhome.com bin/parallel parallel -bin/env_parallel openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel env_parallel -bin/env_parallel tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel env_parallel -bin/env_parallel debian.polarhome.com copy debian.polarhome.com bin/env_parallel env_parallel -bin/env_parallel redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel env_parallel -bin/env_parallel netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel env_parallel -bin/env_parallel macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel env_parallel -bin/env_parallel miros.polarhome.com copy miros.polarhome.com bin/env_parallel env_parallel -bin/env_parallel centos.polarhome.com copy centos.polarhome.com bin/env_parallel env_parallel -bin/env_parallel unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel env_parallel -bin/env_parallel pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel env_parallel -bin/env_parallel scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel env_parallel -bin/env_parallel raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel env_parallel -bin/env_parallel solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel env_parallel -bin/env_parallel aix.polarhome.com copy aix.polarhome.com bin/env_parallel env_parallel -bin/env_parallel mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel env_parallel -bin/env_parallel debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel env_parallel -bin/env_parallel suse.polarhome.com copy suse.polarhome.com bin/env_parallel env_parallel -bin/env_parallel solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel env_parallel -bin/env_parallel hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel env_parallel -bin/env_parallel hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel env_parallel -bin/env_parallel freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel env_parallel -bin/env_parallel ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel env_parallel -bin/env_parallel openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel env_parallel -bin/env_parallel.ash openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash debian.polarhome.com copy debian.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash miros.polarhome.com copy miros.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash centos.polarhome.com copy centos.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash aix.polarhome.com copy aix.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash suse.polarhome.com copy suse.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.ash openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.ash env_parallel.ash -bin/env_parallel.bash openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash debian.polarhome.com copy debian.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash miros.polarhome.com copy miros.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash centos.polarhome.com copy centos.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash aix.polarhome.com copy aix.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash suse.polarhome.com copy suse.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.bash openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.bash env_parallel.bash -bin/env_parallel.csh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.csh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.csh env_parallel.csh -bin/env_parallel.dash openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash debian.polarhome.com copy debian.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash miros.polarhome.com copy miros.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash centos.polarhome.com copy centos.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash aix.polarhome.com copy aix.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash suse.polarhome.com copy suse.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.dash openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.dash env_parallel.dash -bin/env_parallel.fish openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish debian.polarhome.com copy debian.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish miros.polarhome.com copy miros.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish centos.polarhome.com copy centos.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish aix.polarhome.com copy aix.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish suse.polarhome.com copy suse.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.fish openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.fish env_parallel.fish -bin/env_parallel.ksh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.ksh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.ksh env_parallel.ksh -bin/env_parallel.mksh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.mksh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.mksh env_parallel.mksh -bin/env_parallel.pdksh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.pdksh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.pdksh env_parallel.pdksh -bin/env_parallel.sh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.sh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.sh env_parallel.sh -bin/env_parallel.tcsh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.tcsh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.tcsh env_parallel.tcsh -bin/env_parallel.zsh openbsd.polarhome.com copy openbsd.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh tru64.polarhome.com copy tru64.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh debian.polarhome.com copy debian.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh redhat.polarhome.com copy redhat.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh netbsd.polarhome.com copy netbsd.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh macosx.polarhome.com copy macosx.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh miros.polarhome.com copy miros.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh centos.polarhome.com copy centos.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh unixware.polarhome.com copy unixware.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh pidora.polarhome.com copy pidora.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh scosysv.polarhome.com copy scosysv.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh raspbian.polarhome.com copy raspbian.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh aix.polarhome.com copy aix.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh mandriva.polarhome.com copy mandriva.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh suse.polarhome.com copy suse.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh solaris.polarhome.com copy solaris.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh hpux.polarhome.com copy hpux.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh hurd.polarhome.com copy hurd.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh freebsd.polarhome.com copy freebsd.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh ubuntu.polarhome.com copy ubuntu.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/env_parallel.zsh openindiana.polarhome.com copy openindiana.polarhome.com bin/env_parallel.zsh env_parallel.zsh -bin/parcat openbsd.polarhome.com copy openbsd.polarhome.com bin/parcat parcat -bin/parcat tru64.polarhome.com copy tru64.polarhome.com bin/parcat parcat -bin/parcat debian.polarhome.com copy debian.polarhome.com bin/parcat parcat -bin/parcat redhat.polarhome.com copy redhat.polarhome.com bin/parcat parcat -bin/parcat netbsd.polarhome.com copy netbsd.polarhome.com bin/parcat parcat -bin/parcat macosx.polarhome.com copy macosx.polarhome.com bin/parcat parcat -bin/parcat miros.polarhome.com copy miros.polarhome.com bin/parcat parcat -bin/parcat centos.polarhome.com copy centos.polarhome.com bin/parcat parcat -bin/parcat unixware.polarhome.com copy unixware.polarhome.com bin/parcat parcat -bin/parcat pidora.polarhome.com copy pidora.polarhome.com bin/parcat parcat -bin/parcat scosysv.polarhome.com copy scosysv.polarhome.com bin/parcat parcat -bin/parcat raspbian.polarhome.com copy raspbian.polarhome.com bin/parcat parcat -bin/parcat solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/parcat parcat -bin/parcat aix.polarhome.com copy aix.polarhome.com bin/parcat parcat -bin/parcat mandriva.polarhome.com copy mandriva.polarhome.com bin/parcat parcat -bin/parcat debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/parcat parcat -bin/parcat suse.polarhome.com copy suse.polarhome.com bin/parcat parcat -bin/parcat solaris.polarhome.com copy solaris.polarhome.com bin/parcat parcat -bin/parcat hpux.polarhome.com copy hpux.polarhome.com bin/parcat parcat -bin/parcat hurd.polarhome.com copy hurd.polarhome.com bin/parcat parcat -bin/parcat freebsd.polarhome.com copy freebsd.polarhome.com bin/parcat parcat -bin/parcat ubuntu.polarhome.com copy ubuntu.polarhome.com bin/parcat parcat -bin/parcat openindiana.polarhome.com copy openindiana.polarhome.com bin/parcat parcat -bin/stdout openbsd.polarhome.com copy openbsd.polarhome.com bin/stdout stdout -bin/stdout tru64.polarhome.com copy tru64.polarhome.com bin/stdout stdout -bin/stdout debian.polarhome.com copy debian.polarhome.com bin/stdout stdout -bin/stdout redhat.polarhome.com copy redhat.polarhome.com bin/stdout stdout -bin/stdout netbsd.polarhome.com copy netbsd.polarhome.com bin/stdout stdout -bin/stdout macosx.polarhome.com copy macosx.polarhome.com bin/stdout stdout -bin/stdout miros.polarhome.com copy miros.polarhome.com bin/stdout stdout -bin/stdout centos.polarhome.com copy centos.polarhome.com bin/stdout stdout -bin/stdout unixware.polarhome.com copy unixware.polarhome.com bin/stdout stdout -bin/stdout pidora.polarhome.com copy pidora.polarhome.com bin/stdout stdout -bin/stdout scosysv.polarhome.com copy scosysv.polarhome.com bin/stdout stdout -bin/stdout raspbian.polarhome.com copy raspbian.polarhome.com bin/stdout stdout -bin/stdout solaris-x86.polarhome.com copy solaris-x86.polarhome.com bin/stdout stdout -bin/stdout aix.polarhome.com copy aix.polarhome.com bin/stdout stdout -bin/stdout mandriva.polarhome.com copy mandriva.polarhome.com bin/stdout stdout -bin/stdout debian-ppc.polarhome.com copy debian-ppc.polarhome.com bin/stdout stdout -bin/stdout suse.polarhome.com copy suse.polarhome.com bin/stdout stdout -bin/stdout solaris.polarhome.com copy solaris.polarhome.com bin/stdout stdout -bin/stdout hpux.polarhome.com copy hpux.polarhome.com bin/stdout stdout -bin/stdout hurd.polarhome.com copy hurd.polarhome.com bin/stdout stdout -bin/stdout freebsd.polarhome.com copy freebsd.polarhome.com bin/stdout stdout -bin/stdout ubuntu.polarhome.com copy ubuntu.polarhome.com bin/stdout stdout -bin/stdout openindiana.polarhome.com copy openindiana.polarhome.com bin/stdout stdout +bin/parallel qnx copy qnx bin/parallel parallel +bin/parallel pidora copy pidora bin/parallel parallel +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 debian-ppc copy debian-ppc 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 +bin/parallel miros copy miros bin/parallel parallel +bin/parallel macosx copy macosx bin/parallel parallel +bin/parallel redhat copy redhat bin/parallel parallel +bin/parallel netbsd copy netbsd bin/parallel parallel +bin/parallel openbsd copy openbsd bin/parallel parallel +bin/parallel freebsd copy freebsd bin/parallel parallel +bin/parallel debian copy debian bin/parallel parallel +bin/parallel ultrix copy ultrix bin/parallel parallel +bin/parallel irix copy irix bin/parallel parallel +bin/parallel hurd copy hurd bin/parallel parallel +bin/parallel minix copy minix bin/parallel parallel +bin/env_parallel qnx copy qnx bin/env_parallel env_parallel +bin/env_parallel pidora copy pidora bin/env_parallel env_parallel +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 debian-ppc copy debian-ppc 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 +bin/env_parallel miros copy miros bin/env_parallel env_parallel +bin/env_parallel macosx copy macosx bin/env_parallel env_parallel +bin/env_parallel redhat copy redhat bin/env_parallel env_parallel +bin/env_parallel netbsd copy netbsd bin/env_parallel env_parallel +bin/env_parallel openbsd copy openbsd bin/env_parallel env_parallel +bin/env_parallel freebsd copy freebsd bin/env_parallel env_parallel +bin/env_parallel debian copy debian bin/env_parallel env_parallel +bin/env_parallel ultrix copy ultrix bin/env_parallel env_parallel +bin/env_parallel irix copy irix bin/env_parallel env_parallel +bin/env_parallel hurd copy hurd bin/env_parallel env_parallel +bin/env_parallel minix copy minix bin/env_parallel env_parallel +bin/env_parallel.ash qnx copy qnx bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash pidora copy pidora bin/env_parallel.ash env_parallel.ash +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.ash miros copy miros bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash macosx copy macosx bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash redhat copy redhat bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash netbsd copy netbsd bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash openbsd copy openbsd bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash freebsd copy freebsd bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash debian copy debian bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash ultrix copy ultrix bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash irix copy irix bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash hurd copy hurd bin/env_parallel.ash env_parallel.ash +bin/env_parallel.ash minix copy minix bin/env_parallel.ash env_parallel.ash +bin/env_parallel.bash qnx copy qnx bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash pidora copy pidora bin/env_parallel.bash env_parallel.bash +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.bash miros copy miros bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash macosx copy macosx bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash redhat copy redhat bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash netbsd copy netbsd bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash openbsd copy openbsd bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash freebsd copy freebsd bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash debian copy debian bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash ultrix copy ultrix bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash irix copy irix bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash hurd copy hurd bin/env_parallel.bash env_parallel.bash +bin/env_parallel.bash minix copy minix bin/env_parallel.bash env_parallel.bash +bin/env_parallel.csh qnx copy qnx bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh pidora copy pidora bin/env_parallel.csh env_parallel.csh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.csh miros copy miros bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh macosx copy macosx bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh redhat copy redhat bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh netbsd copy netbsd bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh openbsd copy openbsd bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh freebsd copy freebsd bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh debian copy debian bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh ultrix copy ultrix bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh irix copy irix bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh hurd copy hurd bin/env_parallel.csh env_parallel.csh +bin/env_parallel.csh minix copy minix bin/env_parallel.csh env_parallel.csh +bin/env_parallel.dash qnx copy qnx bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash pidora copy pidora bin/env_parallel.dash env_parallel.dash +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.dash miros copy miros bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash macosx copy macosx bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash redhat copy redhat bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash netbsd copy netbsd bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash openbsd copy openbsd bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash freebsd copy freebsd bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash debian copy debian bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash ultrix copy ultrix bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash irix copy irix bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash hurd copy hurd bin/env_parallel.dash env_parallel.dash +bin/env_parallel.dash minix copy minix bin/env_parallel.dash env_parallel.dash +bin/env_parallel.fish qnx copy qnx bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish pidora copy pidora bin/env_parallel.fish env_parallel.fish +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.fish miros copy miros bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish macosx copy macosx bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish redhat copy redhat bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish netbsd copy netbsd bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish openbsd copy openbsd bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish freebsd copy freebsd bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish debian copy debian bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish ultrix copy ultrix bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish irix copy irix bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish hurd copy hurd bin/env_parallel.fish env_parallel.fish +bin/env_parallel.fish minix copy minix bin/env_parallel.fish env_parallel.fish +bin/env_parallel.ksh qnx copy qnx bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh pidora copy pidora bin/env_parallel.ksh env_parallel.ksh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.ksh miros copy miros bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh macosx copy macosx bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh redhat copy redhat bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh netbsd copy netbsd bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh openbsd copy openbsd bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh freebsd copy freebsd bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh debian copy debian bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh ultrix copy ultrix bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh irix copy irix bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh hurd copy hurd bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.ksh minix copy minix bin/env_parallel.ksh env_parallel.ksh +bin/env_parallel.mksh qnx copy qnx bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh pidora copy pidora bin/env_parallel.mksh env_parallel.mksh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.mksh miros copy miros bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh macosx copy macosx bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh redhat copy redhat bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh netbsd copy netbsd bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh openbsd copy openbsd bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh freebsd copy freebsd bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh debian copy debian bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh ultrix copy ultrix bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh irix copy irix bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh hurd copy hurd bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.mksh minix copy minix bin/env_parallel.mksh env_parallel.mksh +bin/env_parallel.pdksh qnx copy qnx bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh pidora copy pidora bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh tru64 copy tru64 bin/env_parallel.pdksh env_parallel.pdksh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.pdksh miros copy miros bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh macosx copy macosx bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh redhat copy redhat bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh netbsd copy netbsd bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh openbsd copy openbsd bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh freebsd copy freebsd bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh debian copy debian bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh ultrix copy ultrix bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh irix copy irix bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh hurd copy hurd bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.pdksh minix copy minix bin/env_parallel.pdksh env_parallel.pdksh +bin/env_parallel.sh qnx copy qnx bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh pidora copy pidora bin/env_parallel.sh env_parallel.sh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.sh miros copy miros bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh macosx copy macosx bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh redhat copy redhat bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh netbsd copy netbsd bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh openbsd copy openbsd bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh freebsd copy freebsd bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh debian copy debian bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh ultrix copy ultrix bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh irix copy irix bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh hurd copy hurd bin/env_parallel.sh env_parallel.sh +bin/env_parallel.sh minix copy minix bin/env_parallel.sh env_parallel.sh +bin/env_parallel.tcsh qnx copy qnx bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh pidora copy pidora bin/env_parallel.tcsh env_parallel.tcsh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.tcsh miros copy miros bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh macosx copy macosx bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh redhat copy redhat bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh netbsd copy netbsd bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh openbsd copy openbsd bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh freebsd copy freebsd bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh debian copy debian bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh ultrix copy ultrix bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh irix copy irix bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh hurd copy hurd bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.tcsh minix copy minix bin/env_parallel.tcsh env_parallel.tcsh +bin/env_parallel.zsh qnx copy qnx bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh pidora copy pidora bin/env_parallel.zsh env_parallel.zsh +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 debian-ppc copy debian-ppc 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 +bin/env_parallel.zsh miros copy miros bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh macosx copy macosx bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh redhat copy redhat bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh netbsd copy netbsd bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh openbsd copy openbsd bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh freebsd copy freebsd bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh debian copy debian bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh ultrix copy ultrix bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh irix copy irix bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh hurd copy hurd bin/env_parallel.zsh env_parallel.zsh +bin/env_parallel.zsh minix copy minix bin/env_parallel.zsh env_parallel.zsh +bin/parcat qnx copy qnx bin/parcat parcat +bin/parcat pidora copy pidora bin/parcat parcat +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 debian-ppc copy debian-ppc 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 +bin/parcat miros copy miros bin/parcat parcat +bin/parcat macosx copy macosx bin/parcat parcat +bin/parcat redhat copy redhat bin/parcat parcat +bin/parcat netbsd copy netbsd bin/parcat parcat +bin/parcat openbsd copy openbsd bin/parcat parcat +bin/parcat freebsd copy freebsd bin/parcat parcat +bin/parcat debian copy debian bin/parcat parcat +bin/parcat ultrix copy ultrix bin/parcat parcat +bin/parcat irix copy irix bin/parcat parcat +bin/parcat hurd copy hurd bin/parcat parcat +bin/parcat minix copy minix bin/parcat parcat +bin/stdout qnx copy qnx bin/stdout stdout +bin/stdout pidora copy pidora bin/stdout stdout +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 debian-ppc copy debian-ppc 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 +bin/stdout miros copy miros bin/stdout stdout +bin/stdout macosx copy macosx bin/stdout stdout +bin/stdout redhat copy redhat bin/stdout stdout +bin/stdout netbsd copy netbsd bin/stdout stdout +bin/stdout openbsd copy openbsd bin/stdout stdout +bin/stdout freebsd copy freebsd bin/stdout stdout +bin/stdout debian copy debian bin/stdout stdout +bin/stdout ultrix copy ultrix bin/stdout stdout +bin/stdout irix copy irix bin/stdout stdout +bin/stdout hurd copy hurd bin/stdout stdout +bin/stdout minix copy minix bin/stdout stdout Done copying -aix.polarhome.com ### Test if empty command in process list causes problems -aix.polarhome.com OK_with_empty_cmd -centos.polarhome.com ### Test if empty command in process list causes problems -centos.polarhome.com OK_with_empty_cmd -debian-ppc.polarhome.com ### Test if empty command in process list causes problems -debian-ppc.polarhome.com OK_with_empty_cmd -debian.polarhome.com ### Test if empty command in process list causes problems -debian.polarhome.com OK_with_empty_cmd -freebsd.polarhome.com export: Illegal option -f -hpux.polarhome.com ### Test if empty command in process list causes problems -hpux.polarhome.com OK_with_empty_cmd -macosx.polarhome.com ### Test if empty command in process list causes problems -macosx.polarhome.com OK_with_empty_cmd -mandriva.polarhome.com ### Test if empty command in process list causes problems -mandriva.polarhome.com OK_with_empty_cmd -miros.polarhome.com ### Test if empty command in process list causes problems -miros.polarhome.com OK_with_empty_cmd -netbsd.polarhome.com CSH/TCSH DO NOT SUPPORT newlines IN VARIABLES/FUNCTIONS. Unset test_empty_cmd test_empty_cmd -openbsd.polarhome.com ### Test if empty command in process list causes problems -openbsd.polarhome.com OK_with_empty_cmd -openindiana.polarhome.com ### Test if empty command in process list causes problems -openindiana.polarhome.com OK_with_empty_cmd -pidora.polarhome.com ### Test if empty command in process list causes problems -pidora.polarhome.com OK_with_empty_cmd -raspbian.polarhome.com ### Test if empty command in process list causes problems -raspbian.polarhome.com OK_with_empty_cmd -redhat.polarhome.com ### Test if empty command in process list causes problems -redhat.polarhome.com OK_with_empty_cmd -scosysv.polarhome.com ### Test if empty command in process list causes problems -scosysv.polarhome.com OK_with_empty_cmd -solaris-x86.polarhome.com ### Test if empty command in process list causes problems -solaris-x86.polarhome.com OK_with_empty_cmd -solaris.polarhome.com ### Test if empty command in process list causes problems -solaris.polarhome.com OK_with_empty_cmd -suse.polarhome.com ### Test if empty command in process list causes problems -suse.polarhome.com OK_with_empty_cmd -tru64.polarhome.com ### Test if empty command in process list causes problems -tru64.polarhome.com OK_with_empty_cmd -ubuntu.polarhome.com ### Test if empty command in process list causes problems -ubuntu.polarhome.com OK_with_empty_cmd -unixware.polarhome.com UX:sh (/bin/sh): ERROR: -f: is not an identifier -aix.polarhome.com Works on aix7 -centos.polarhome.com Works on centos.polarhome.com -debian-ppc.polarhome.com Works on debian-ppc -debian.polarhome.com Works on debian -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com Works on hpux64 -macosx.polarhome.com Works on macosx.polarhome.com -mandriva.polarhome.com Works on mandriva.polarhome.com -miros.polarhome.com Works on miros.polarhome.com -netbsd.polarhome.com Works on netbsd.polarhome.com -openbsd.polarhome.com Works on openbsd.polarhome.com -openindiana.polarhome.com Works on openindiana -pidora.polarhome.com Works on pidora -raspbian.polarhome.com Works on raspbian -redhat.polarhome.com Works on redhat.polarhome.com -scosysv.polarhome.com Works on scosysv.polarhome.com -solaris-x86.polarhome.com Works on solaris-x86 -solaris.polarhome.com Works on solaris -suse.polarhome.com Works on suse -tru64.polarhome.com Works on tru64.polarhome.com -ubuntu.polarhome.com Works on ubuntu -unixware.polarhome.com Works on unixware.polarhome.com -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -aix.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: The file access permissions do not allow the specified action. at /home/t/tange/bin/parallel line 0000 -aix.polarhome.com OK readonly tmp -centos.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable -centos.polarhome.com at /home/t/tange/bin/parallel line 0000 -centos.polarhome.com OK readonly tmp -debian-ppc.polarhome.com Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -debian-ppc.polarhome.com OK readonly tmp -debian.polarhome.com Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -debian.polarhome.com OK readonly tmp -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com No such file or directory: bash -macosx.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /Users/tange/bin/parallel line 0000 -macosx.polarhome.com OK readonly tmp -mandriva.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 -mandriva.polarhome.com OK readonly tmp -miros.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable -miros.polarhome.com at /home/t/tange/bin/parallel line 0000 -miros.polarhome.com OK readonly tmp -netbsd.polarhome.com Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -openbsd.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 -openbsd.polarhome.com OK readonly tmp -openindiana.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /u/t/tange/bin/parallel line 0000 -openindiana.polarhome.com OK readonly tmp -pidora.polarhome.com Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -pidora.polarhome.com OK readonly tmp -raspbian.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 -raspbian.polarhome.com OK readonly tmp -redhat.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 -redhat.polarhome.com OK readonly tmp -scosysv.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable -scosysv.polarhome.com at /home/t/tange/bin/parallel line 0000 -scosysv.polarhome.com OK readonly tmp -solaris-x86.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at ~/bin/parallel line 0000 -solaris-x86.polarhome.com OK readonly tmp -solaris.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable -solaris.polarhome.com at /home/t/tange/bin/parallel line 0000 -solaris.polarhome.com OK readonly tmp -suse.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -suse.polarhome.com OK readonly tmp -tru64.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable -tru64.polarhome.com at /home/t/tange/bin/parallel line 0000 -tru64.polarhome.com OK readonly tmp -ubuntu.polarhome.com Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. -ubuntu.polarhome.com OK readonly tmp -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -unixware.polarhome.com UX:env: ERROR: No such file or directory: bash + + echo + echo '### Works on ...' + echo + par_nonall parallel echo Works on {} ::: '`hostname`' 2>&1 + +### Works on ... + +aix Works on aix7 +centos Works on centos.polarhome.com +debian Works on debian +debian-ppc Works on debian-ppc +freebsd Syntax error: Bad fd number +hpux Works on hpux64 +hpux-ia64 Works on hpux-ia64 +hurd Works on hurd +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix Unknown open() mode '>&' at /home/t/tange/bin/parallel line 2458. +macosx Works on macosx.polarhome.com +mandriva Works on mandriva.polarhome.com +miros Works on miros.polarhome.com +netbsd Works on netbsd.polarhome.com +openbsd Works on openbsd.polarhome.com +openindiana Works on openindiana +pidora Works on pidora +qnx Works on qnx +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian Works on raspbian +redhat Works on redhat.polarhome.com +scosysv Works on scosysv.polarhome.com +solaris Works on solaris +solaris-x86 Works on solaris-x86 +sshwithpass minix Works on minix +suse Works on suse +tru64 Works on tru64.polarhome.com +ubuntu Works on ubuntu +unixware Works on unixware.polarhome.com +unixware UX:sh (/bin/sh): ERROR: source: Not found + echo + echo '### --number-of-cores/--number-of-cpus should work with no error' + echo + par_nonall 'parallel --number-of-sockets; parallel --number-of-cores' 2>&1 + par_nonall 'parallel --number-of-threads; parallel --number-of-cpus' 2>&1 ### --number-of-cores/--number-of-cpus should work with no error -aix.polarhome.com 1 -centos.polarhome.com 1 -debian-ppc.polarhome.com 1 -debian.polarhome.com 1 -freebsd.polarhome.com Syntax error: Bad fd number -macosx.polarhome.com 2 -mandriva.polarhome.com 1 -miros.polarhome.com 1 -netbsd.polarhome.com 1 -openbsd.polarhome.com 1 -openindiana.polarhome.com 1 -pidora.polarhome.com 1 -raspbian.polarhome.com 1 -redhat.polarhome.com 1 -scosysv.polarhome.com 1 -solaris-x86.polarhome.com -solaris.polarhome.com -suse.polarhome.com 1 -tru64.polarhome.com 1 -ubuntu.polarhome.com 1 -unixware.polarhome.com 1 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -aix.polarhome.com 1 -centos.polarhome.com 1 -debian-ppc.polarhome.com 1 -debian.polarhome.com 2 -freebsd.polarhome.com Syntax error: Bad fd number -macosx.polarhome.com 2 -mandriva.polarhome.com 1 -miros.polarhome.com 1 -netbsd.polarhome.com 1 -openbsd.polarhome.com 1 -openindiana.polarhome.com 1 -pidora.polarhome.com 1 -raspbian.polarhome.com 1 -redhat.polarhome.com 2 -scosysv.polarhome.com 1 -solaris-x86.polarhome.com 1 -solaris.polarhome.com 2 -suse.polarhome.com 1 -tru64.polarhome.com 1 -ubuntu.polarhome.com 2 -unixware.polarhome.com 1 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -aix.polarhome.com 1 -centos.polarhome.com 1 -debian-ppc.polarhome.com 1 -debian.polarhome.com 2 -freebsd.polarhome.com Syntax error: Bad fd number -macosx.polarhome.com 2 -mandriva.polarhome.com 1 -miros.polarhome.com 1 -netbsd.polarhome.com 1 -openbsd.polarhome.com 1 -openindiana.polarhome.com 1 -pidora.polarhome.com 1 -raspbian.polarhome.com 1 -redhat.polarhome.com 2 -scosysv.polarhome.com 1 -solaris-x86.polarhome.com 1 -solaris.polarhome.com 2 -suse.polarhome.com 1 -tru64.polarhome.com 1 -ubuntu.polarhome.com 2 -unixware.polarhome.com 1 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -aix.polarhome.com 1 -centos.polarhome.com 1 -debian-ppc.polarhome.com 1 -debian.polarhome.com 2 -freebsd.polarhome.com Syntax error: Bad fd number -macosx.polarhome.com 2 -mandriva.polarhome.com 1 -miros.polarhome.com 1 -netbsd.polarhome.com 1 -openbsd.polarhome.com 1 -openindiana.polarhome.com 1 -pidora.polarhome.com 1 -raspbian.polarhome.com 1 -redhat.polarhome.com 2 -scosysv.polarhome.com 1 -solaris-x86.polarhome.com 1 -solaris.polarhome.com 2 -suse.polarhome.com 1 -tru64.polarhome.com 1 -ubuntu.polarhome.com 2 -unixware.polarhome.com 1 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +aix 1 +aix 1 +centos 1 +centos 1 +debian 1 +debian 2 +debian-ppc 1 +debian-ppc 1 +freebsd Syntax error: Bad fd number +hpux 1 +hpux 1 +hpux-ia64 1 +hpux-ia64 1 +hurd +hurd 1 +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix Unknown open() mode '>&' at /home/t/tange/bin/parallel line 2458. +irix Unknown open() mode '>&' at /home/t/tange/bin/parallel line 2458. +macosx 2 +macosx 2 +mandriva 1 +mandriva 1 +miros 1 +miros 1 +netbsd 1 +netbsd 1 +openbsd 1 +openbsd 1 +openindiana 1 +openindiana 1 +pidora 1 +pidora 1 +qnx 1 +qnx 1 +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian 1 +raspbian 1 +redhat 1 +redhat 2 +scosysv 1 +scosysv 1 +solaris +solaris 2 +solaris-x86 +solaris-x86 1 +sshwithpass minix 1 +sshwithpass minix 1 +suse 1 +suse 1 +tru64 1 +tru64 1 +ubuntu 1 +ubuntu 2 +unixware 1 +unixware 1 +unixware UX:sh (/bin/sh): ERROR: source: Not found +aix 1 +aix 1 +centos 1 +centos 1 +debian 2 +debian 2 +debian-ppc 1 +debian-ppc 1 +freebsd Syntax error: Bad fd number +hpux 1 +hpux 1 +hpux-ia64 2 +hpux-ia64 1 +hurd 1 +hurd 1 +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix Unknown open() mode '>&' at /home/t/tange/bin/parallel line 2458. +irix Unknown open() mode '>&' at /home/t/tange/bin/parallel line 2458. +macosx 2 +macosx 2 +mandriva 1 +mandriva 1 +miros 1 +miros 1 +netbsd 1 +netbsd 1 +openbsd 1 +openbsd 1 +openindiana 1 +openindiana 1 +pidora 1 +pidora 1 +qnx 1 +qnx 1 +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian 1 +raspbian 1 +redhat 2 +redhat 2 +scosysv 1 +scosysv 1 +solaris 2 +solaris 2 +solaris-x86 1 +solaris-x86 1 +sshwithpass minix 1 +sshwithpass minix 1 +suse 1 +suse 1 +tru64 1 +tru64 1 +ubuntu 2 +ubuntu 2 +unixware 1 +unixware 1 +unixware UX:sh (/bin/sh): ERROR: source: Not found + echo + echo '### Fails if tmpdir is R/O' + echo + par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp | + perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' && + echo OK readonly tmp" 2>&1 -### Does exporting a bash function kill parallel +### Fails if tmpdir is R/O -aix.polarhome.com bash only A -centos.polarhome.com bash only A -debian-ppc.polarhome.com bash only A -debian.polarhome.com bash only A -freebsd.polarhome.com Syntax error: "(" unexpected (expecting word) -hpux.polarhome.com bash only A -macosx.polarhome.com bash only A -mandriva.polarhome.com bash only A -miros.polarhome.com bash only A -netbsd.polarhome.com Missing name for redirect. -openbsd.polarhome.com bash only A -openindiana.polarhome.com bash only A -pidora.polarhome.com bash only A -raspbian.polarhome.com bash only A -redhat.polarhome.com bash only A -scosysv.polarhome.com bash only A -solaris-x86.polarhome.com bash only A -solaris.polarhome.com bash only A -suse.polarhome.com /home/t/tange/bin/bash: func: command not found -tru64.polarhome.com bash only A -ubuntu.polarhome.com bash only A -unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `(' unexpected +aix Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: The file access permissions do not allow the specified action. at /home/t/tange/bin/parallel line 0000 +aix OK readonly tmp +centos Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable +centos at /home/t/tange/bin/parallel line 0000 +centos OK readonly tmp +debian Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. +debian OK readonly tmp +debian-ppc Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. +debian-ppc OK readonly tmp +freebsd Syntax error: Bad fd number +hpux Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 +hpux OK readonly tmp +hpux-ia64 Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable +hpux-ia64 at /home/t/tange/bin/parallel line 0000 +hpux-ia64 OK readonly tmp +hurd Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. +hurd OK readonly tmp +irix Undefined subroutine &main::decode_base64 called at -e line 1. +irix open3: exec of bzip2 -dc failed at -e line 1 +macosx Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /Users/tange/bin/parallel line 0000 +macosx OK readonly tmp +mandriva Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 +mandriva OK readonly tmp +miros Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable +miros at /home/t/tange/bin/parallel line 0000 +miros OK readonly tmp +netbsd OK readonly tmp +netbsd Invalid null command. +netbsd Invalid null command. +openbsd Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 +openbsd OK readonly tmp +openindiana Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /u/t/tange/bin/parallel line 0000 +openindiana OK readonly tmp +pidora Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. +pidora OK readonly tmp +qnx Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 +qnx OK readonly tmp +qnx /bin/sh: >&/dev/null : illegal file descriptor name +raspbian Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 +raspbian OK readonly tmp +redhat Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000 +redhat OK readonly tmp +scosysv Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable +scosysv at /home/t/tange/bin/parallel line 0000 +scosysv OK readonly tmp +solaris Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable +solaris at /home/t/tange/bin/parallel line 0000 +solaris OK readonly tmp +solaris-x86 Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/tange/bin/parallel line 0000 +solaris-x86 OK readonly tmp +suse Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. +suse OK readonly tmp +tru64 Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable +tru64 at /home/t/tange/bin/parallel line 0000 +tru64 OK readonly tmp +ubuntu Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000. +ubuntu OK readonly tmp +ultrix open3: wtr should not be null at -e line 1 +unixware UX:sh (/bin/sh): ERROR: source: Not found +unixware UX:env: ERROR: No such file or directory: bash + echo + echo '### Does exporting a bash function make parallel fail?' + echo 'If login shell is not bash compatible it fails' + echo + # http://zmwangx.github.io/blog/2015-11-25-bash-function-exporting-fiasco.html + par_nonall 'echo test funcA + funcA() { + cat <(echo bash only A) + } + export -f funcA; + bin/parallel funcA ::: 1' 2>&1 -### Does PARALLEL_SHELL help exporting a bash function not kill parallel +### Does exporting a bash function make parallel fail? +If login shell is not bash compatible it fails -aix.polarhome.com bash only B -centos.polarhome.com bash only B -debian-ppc.polarhome.com bash only B -debian.polarhome.com bash only B -macosx.polarhome.com bash only B -mandriva.polarhome.com bash only B -miros.polarhome.com bash only B -netbsd.polarhome.com bash only B -openbsd.polarhome.com bash only B -openindiana.polarhome.com bash only B -pidora.polarhome.com bash only B -raspbian.polarhome.com bash only B -redhat.polarhome.com bash only B -scosysv.polarhome.com bash only B -solaris-x86.polarhome.com bash only B -solaris.polarhome.com bash only B -suse.polarhome.com bash only B -tru64.polarhome.com bash only B -ubuntu.polarhome.com bash only B -unixware.polarhome.com bash only B +aix test funcA +aix bash only A +centos test funcA +centos bash only A +debian test funcA +debian bash only A +debian-ppc test funcA +debian-ppc bash only A +freebsd Syntax error: Bad fd number +hpux test funcA +hpux bash only A +hpux-ia64 test funcA +hpux-ia64 bash only A +hurd test funcA +hurd bash only A +irix Undefined subroutine &main::decode_base64 called at -e line 1. +irix open3: exec of bzip2 -dc failed at -e line 1 +macosx test funcA +macosx bash only A +mandriva test funcA +mandriva bash only A +miros test funcA +miros bash only A +netbsd test funcA +netbsd Badly placed ()'s. +netbsd Missing name for redirect. +netbsd }: Command not found. +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 +raspbian test funcA +raspbian bash only A +redhat test funcA +redhat bash only A +scosysv test funcA +scosysv bash only A +solaris test funcA +solaris bash only A +solaris-x86 test funcA +solaris-x86 bash only A +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 +ultrix open3: wtr should not be null at -e line 1 +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 + echo + echo '### Does PARALLEL_SHELL help exporting a bash function' + echo 'If login shell is not bash compatible it should work' + echo + mkdir -p tmp/bin + cp /bin/bash tmp/bin + cd tmp + export PARALLEL_SHELL=bin/bash + par_nonall 'echo test funcB + funcB() { + cat <(echo bash only B) + } + export -f funcB + export PARALLEL_SHELL=bin/bash + bin/parallel funcB ::: 1' 2>&1 + +### Does PARALLEL_SHELL help exporting a bash function +If login shell is not bash compatible it should work + +aix test funcB +aix bash only B +centos test funcB +centos bash only B +debian test funcB +debian bash only B +debian-ppc test funcB +debian-ppc bash only B +freebsd test funcB +freebsd bash only B +hpux test funcB +hpux bash only B +hpux-ia64 test funcB +hpux-ia64 bash only B +hurd test funcB +hurd bash only B +irix Undefined subroutine &main::decode_base64 called at -e line 1. +irix open3: exec of bzip2 -dc failed at -e line 1 +macosx test funcB +macosx bash only B +mandriva test funcB +mandriva bash only B +miros test funcB +miros bash only B +netbsd test funcB +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 +qnx bash only B +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian test funcB +raspbian bash only B +redhat test funcB +redhat bash only B +scosysv test funcB +scosysv bash only B +solaris test funcB +solaris bash only B +solaris-x86 test funcB +solaris-x86 bash only B +sshwithpass minix test funcB +suse test funcB +suse bash only B +tru64 test funcB +tru64 bash only B +ubuntu test funcB +ubuntu bash only B +ultrix open3: wtr should not be null at -e line 1 +unixware test funcB +unixware bash only B + echo + echo '### env_parallel echo :::: <(echo OK)' + echo '(bash ksh mksh zsh only)' + echo + par_nonall 'bin/env_parallel --install && echo install-OK' 2>&1 + par_nonall 'env_parallel echo env_parallel ::: run-OK' 2>&1 + # csh on NetBSD does not support process substitution + par_nonall 'env_parallel echo reading from process substitution :::: <(echo OK)' 2>&1 | + grep -v ': /tmp/.*: No such file or directory' ### env_parallel echo :::: <(echo OK) -(bash ksh zsh only) +(bash ksh mksh zsh only) -aix.polarhome.com Installed env_parallel in: -aix.polarhome.com /home/t/tange/.bashrc -aix.polarhome.com /home/t/tange/.shrc -aix.polarhome.com /home/t/tange/.zshenv -aix.polarhome.com /home/t/tange/.config/fish/config.fish -aix.polarhome.com /home/t/tange/.kshrc -aix.polarhome.com /home/t/tange/.mkshrc -aix.polarhome.com /home/t/tange/.profile -aix.polarhome.com /home/t/tange/.cshrc -aix.polarhome.com /home/t/tange/.tcshrc -aix.polarhome.com install-OK -centos.polarhome.com Installed env_parallel in: -centos.polarhome.com /home/t/tange/.bashrc -centos.polarhome.com /home/t/tange/.shrc -centos.polarhome.com /home/t/tange/.zshenv -centos.polarhome.com /home/t/tange/.config/fish/config.fish -centos.polarhome.com /home/t/tange/.kshrc -centos.polarhome.com /home/t/tange/.mkshrc -centos.polarhome.com /home/t/tange/.profile -centos.polarhome.com /home/t/tange/.cshrc -centos.polarhome.com /home/t/tange/.tcshrc -centos.polarhome.com install-OK -debian-ppc.polarhome.com Installed env_parallel in: -debian-ppc.polarhome.com /home/t/tange/.bashrc -debian-ppc.polarhome.com /home/t/tange/.shrc -debian-ppc.polarhome.com /home/t/tange/.zshenv -debian-ppc.polarhome.com /home/t/tange/.config/fish/config.fish -debian-ppc.polarhome.com /home/t/tange/.kshrc -debian-ppc.polarhome.com /home/t/tange/.mkshrc -debian-ppc.polarhome.com /home/t/tange/.profile -debian-ppc.polarhome.com /home/t/tange/.cshrc -debian-ppc.polarhome.com /home/t/tange/.tcshrc -debian-ppc.polarhome.com install-OK -debian.polarhome.com Installed env_parallel in: -debian.polarhome.com /home/t/tange/.bashrc -debian.polarhome.com /home/t/tange/.shrc -debian.polarhome.com /home/t/tange/.zshenv -debian.polarhome.com /home/t/tange/.config/fish/config.fish -debian.polarhome.com /home/t/tange/.kshrc -debian.polarhome.com /home/t/tange/.mkshrc -debian.polarhome.com /home/t/tange/.profile -debian.polarhome.com /home/t/tange/.cshrc -debian.polarhome.com /home/t/tange/.tcshrc -debian.polarhome.com install-OK -freebsd.polarhome.com Syntax error: Bad fd number -macosx.polarhome.com Installed env_parallel in: -macosx.polarhome.com /Users/tange/.bashrc -macosx.polarhome.com /Users/tange/.shrc -macosx.polarhome.com /Users/tange/.zshenv -macosx.polarhome.com /Users/tange/.config/fish/config.fish -macosx.polarhome.com /Users/tange/.kshrc -macosx.polarhome.com /Users/tange/.mkshrc -macosx.polarhome.com /Users/tange/.profile -macosx.polarhome.com /Users/tange/.cshrc -macosx.polarhome.com /Users/tange/.tcshrc -macosx.polarhome.com install-OK -mandriva.polarhome.com Installed env_parallel in: -mandriva.polarhome.com /home/t/tange/.bashrc -mandriva.polarhome.com /home/t/tange/.shrc -mandriva.polarhome.com /home/t/tange/.zshenv -mandriva.polarhome.com /home/t/tange/.config/fish/config.fish -mandriva.polarhome.com /home/t/tange/.kshrc -mandriva.polarhome.com /home/t/tange/.mkshrc -mandriva.polarhome.com /home/t/tange/.profile -mandriva.polarhome.com /home/t/tange/.cshrc -mandriva.polarhome.com /home/t/tange/.tcshrc -mandriva.polarhome.com install-OK -miros.polarhome.com Installed env_parallel in: -miros.polarhome.com /home/t/tange/.bashrc -miros.polarhome.com /home/t/tange/.shrc -miros.polarhome.com /home/t/tange/.zshenv -miros.polarhome.com /home/t/tange/.config/fish/config.fish -miros.polarhome.com /home/t/tange/.kshrc -miros.polarhome.com /home/t/tange/.mkshrc -miros.polarhome.com /home/t/tange/.profile -miros.polarhome.com /home/t/tange/.cshrc -miros.polarhome.com /home/t/tange/.tcshrc -miros.polarhome.com install-OK -netbsd.polarhome.com Installed env_parallel in: -netbsd.polarhome.com /home/t/tange/.bashrc -netbsd.polarhome.com /home/t/tange/.shrc -netbsd.polarhome.com /home/t/tange/.zshenv -netbsd.polarhome.com /home/t/tange/.config/fish/config.fish -netbsd.polarhome.com /home/t/tange/.kshrc -netbsd.polarhome.com /home/t/tange/.mkshrc -netbsd.polarhome.com /home/t/tange/.profile -netbsd.polarhome.com /home/t/tange/.cshrc -netbsd.polarhome.com /home/t/tange/.tcshrc -netbsd.polarhome.com install-OK -openbsd.polarhome.com Installed env_parallel in: -openbsd.polarhome.com /home/t/tange/.bashrc -openbsd.polarhome.com /home/t/tange/.shrc -openbsd.polarhome.com /home/t/tange/.zshenv -openbsd.polarhome.com /home/t/tange/.config/fish/config.fish -openbsd.polarhome.com /home/t/tange/.kshrc -openbsd.polarhome.com /home/t/tange/.mkshrc -openbsd.polarhome.com /home/t/tange/.profile -openbsd.polarhome.com /home/t/tange/.cshrc -openbsd.polarhome.com /home/t/tange/.tcshrc -openbsd.polarhome.com install-OK -openindiana.polarhome.com Installed env_parallel in: -openindiana.polarhome.com /u/t/tange/.bashrc -openindiana.polarhome.com /u/t/tange/.shrc -openindiana.polarhome.com /u/t/tange/.zshenv -openindiana.polarhome.com /u/t/tange/.config/fish/config.fish -openindiana.polarhome.com /u/t/tange/.kshrc -openindiana.polarhome.com /u/t/tange/.mkshrc -openindiana.polarhome.com /u/t/tange/.profile -openindiana.polarhome.com /u/t/tange/.cshrc -openindiana.polarhome.com /u/t/tange/.tcshrc -openindiana.polarhome.com install-OK -pidora.polarhome.com Installed env_parallel in: -pidora.polarhome.com /home/t/tange/.bashrc -pidora.polarhome.com /home/t/tange/.shrc -pidora.polarhome.com /home/t/tange/.zshenv -pidora.polarhome.com /home/t/tange/.config/fish/config.fish -pidora.polarhome.com /home/t/tange/.kshrc -pidora.polarhome.com /home/t/tange/.mkshrc -pidora.polarhome.com /home/t/tange/.profile -pidora.polarhome.com /home/t/tange/.cshrc -pidora.polarhome.com /home/t/tange/.tcshrc -pidora.polarhome.com install-OK -raspbian.polarhome.com Installed env_parallel in: -raspbian.polarhome.com /home/t/tange/.bashrc -raspbian.polarhome.com /home/t/tange/.shrc -raspbian.polarhome.com /home/t/tange/.zshenv -raspbian.polarhome.com /home/t/tange/.config/fish/config.fish -raspbian.polarhome.com /home/t/tange/.kshrc -raspbian.polarhome.com /home/t/tange/.mkshrc -raspbian.polarhome.com /home/t/tange/.profile -raspbian.polarhome.com /home/t/tange/.cshrc -raspbian.polarhome.com /home/t/tange/.tcshrc -raspbian.polarhome.com install-OK -redhat.polarhome.com Installed env_parallel in: -redhat.polarhome.com /home/t/tange/.bashrc -redhat.polarhome.com /home/t/tange/.shrc -redhat.polarhome.com /home/t/tange/.zshenv -redhat.polarhome.com /home/t/tange/.config/fish/config.fish -redhat.polarhome.com /home/t/tange/.kshrc -redhat.polarhome.com /home/t/tange/.mkshrc -redhat.polarhome.com /home/t/tange/.profile -redhat.polarhome.com /home/t/tange/.cshrc -redhat.polarhome.com /home/t/tange/.tcshrc -redhat.polarhome.com install-OK -scosysv.polarhome.com Installed env_parallel in: -scosysv.polarhome.com /home/t/tange/.bashrc -scosysv.polarhome.com /home/t/tange/.shrc -scosysv.polarhome.com /home/t/tange/.zshenv -scosysv.polarhome.com /home/t/tange/.config/fish/config.fish -scosysv.polarhome.com /home/t/tange/.kshrc -scosysv.polarhome.com /home/t/tange/.mkshrc -scosysv.polarhome.com /home/t/tange/.profile -scosysv.polarhome.com /home/t/tange/.cshrc -scosysv.polarhome.com /home/t/tange/.tcshrc -scosysv.polarhome.com install-OK -solaris-x86.polarhome.com Installed env_parallel in: -solaris-x86.polarhome.com ~/.bashrc -solaris-x86.polarhome.com ~/.shrc -solaris-x86.polarhome.com ~/.zshenv -solaris-x86.polarhome.com ~/.config/fish/config.fish -solaris-x86.polarhome.com ~/.kshrc -solaris-x86.polarhome.com ~/.mkshrc -solaris-x86.polarhome.com ~/.profile -solaris-x86.polarhome.com ~/.cshrc -solaris-x86.polarhome.com ~/.tcshrc -solaris-x86.polarhome.com install-OK -solaris.polarhome.com Installed env_parallel in: -solaris.polarhome.com /home/t/tange/.bashrc -solaris.polarhome.com /home/t/tange/.shrc -solaris.polarhome.com /home/t/tange/.zshenv -solaris.polarhome.com /home/t/tange/.config/fish/config.fish -solaris.polarhome.com /home/t/tange/.kshrc -solaris.polarhome.com /home/t/tange/.mkshrc -solaris.polarhome.com /home/t/tange/.profile -solaris.polarhome.com /home/t/tange/.cshrc -solaris.polarhome.com /home/t/tange/.tcshrc -solaris.polarhome.com install-OK -suse.polarhome.com Installed env_parallel in: -suse.polarhome.com /home/t/tange/.bashrc -suse.polarhome.com /home/t/tange/.shrc -suse.polarhome.com /home/t/tange/.zshenv -suse.polarhome.com /home/t/tange/.config/fish/config.fish -suse.polarhome.com /home/t/tange/.kshrc -suse.polarhome.com /home/t/tange/.mkshrc -suse.polarhome.com /home/t/tange/.profile -suse.polarhome.com /home/t/tange/.cshrc -suse.polarhome.com /home/t/tange/.tcshrc -suse.polarhome.com install-OK -tru64.polarhome.com Installed env_parallel in: -tru64.polarhome.com /home/t/tange/.bashrc -tru64.polarhome.com /home/t/tange/.shrc -tru64.polarhome.com /home/t/tange/.zshenv -tru64.polarhome.com /home/t/tange/.config/fish/config.fish -tru64.polarhome.com /home/t/tange/.kshrc -tru64.polarhome.com /home/t/tange/.mkshrc -tru64.polarhome.com /home/t/tange/.profile -tru64.polarhome.com /home/t/tange/.cshrc -tru64.polarhome.com /home/t/tange/.tcshrc -tru64.polarhome.com install-OK -ubuntu.polarhome.com Installed env_parallel in: -ubuntu.polarhome.com /home/t/tange/.bashrc -ubuntu.polarhome.com /home/t/tange/.shrc -ubuntu.polarhome.com /home/t/tange/.zshenv -ubuntu.polarhome.com /home/t/tange/.config/fish/config.fish -ubuntu.polarhome.com /home/t/tange/.kshrc -ubuntu.polarhome.com /home/t/tange/.mkshrc -ubuntu.polarhome.com /home/t/tange/.profile -ubuntu.polarhome.com /home/t/tange/.cshrc -ubuntu.polarhome.com /home/t/tange/.tcshrc -ubuntu.polarhome.com install-OK -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -unixware.polarhome.com UX:env: ERROR: No such file or directory: bash -aix.polarhome.com env_parallel run-OK -centos.polarhome.com env_parallel run-OK -debian-ppc.polarhome.com env_parallel run-OK -debian.polarhome.com env_parallel run-OK -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com env_parallel run-OK -macosx.polarhome.com env_parallel run-OK -mandriva.polarhome.com env_parallel run-OK -miros.polarhome.com env_parallel run-OK -netbsd.polarhome.com env_parallel run-OK -openbsd.polarhome.com env_parallel run-OK -openindiana.polarhome.com env_parallel run-OK -pidora.polarhome.com env_parallel run-OK -raspbian.polarhome.com env_parallel run-OK -redhat.polarhome.com env_parallel run-OK -scosysv.polarhome.com env_parallel run-OK -solaris-x86.polarhome.com env_parallel run-OK -solaris.polarhome.com env_parallel run-OK -suse.polarhome.com env_parallel run-OK -tru64.polarhome.com env_parallel run-OK -ubuntu.polarhome.com env_parallel run-OK -unixware.polarhome.com env_parallel run-OK -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -aix.polarhome.com reading from process substitution OK -centos.polarhome.com reading from process substitution OK -debian-ppc.polarhome.com reading from process substitution OK -debian.polarhome.com reading from process substitution OK -hpux.polarhome.com reading from process substitution OK -macosx.polarhome.com reading from process substitution OK -mandriva.polarhome.com reading from process substitution OK -miros.polarhome.com reading from process substitution OK -openbsd.polarhome.com reading from process substitution OK -openindiana.polarhome.com reading from process substitution OK -pidora.polarhome.com reading from process substitution OK -raspbian.polarhome.com reading from process substitution OK -redhat.polarhome.com reading from process substitution OK -scosysv.polarhome.com reading from process substitution OK -solaris-x86.polarhome.com reading from process substitution OK -solaris.polarhome.com reading from process substitution OK -suse.polarhome.com reading from process substitution OK -tru64.polarhome.com reading from process substitution OK -ubuntu.polarhome.com reading from process substitution OK +aix Installed env_parallel in: +aix /home/t/tange/.bashrc +aix /home/t/tange/.shrc +aix /home/t/tange/.zshenv +aix /home/t/tange/.config/fish/config.fish +aix /home/t/tange/.kshrc +aix /home/t/tange/.mkshrc +aix /home/t/tange/.profile +aix /home/t/tange/.cshrc +aix /home/t/tange/.tcshrc +aix install-OK +centos Installed env_parallel in: +centos /home/t/tange/.bashrc +centos /home/t/tange/.shrc +centos /home/t/tange/.zshenv +centos /home/t/tange/.config/fish/config.fish +centos /home/t/tange/.kshrc +centos /home/t/tange/.mkshrc +centos /home/t/tange/.profile +centos /home/t/tange/.cshrc +centos /home/t/tange/.tcshrc +centos install-OK +debian Installed env_parallel in: +debian /home/t/tange/.bashrc +debian /home/t/tange/.shrc +debian /home/t/tange/.zshenv +debian /home/t/tange/.config/fish/config.fish +debian /home/t/tange/.kshrc +debian /home/t/tange/.mkshrc +debian /home/t/tange/.profile +debian /home/t/tange/.cshrc +debian /home/t/tange/.tcshrc +debian install-OK +debian-ppc Installed env_parallel in: +debian-ppc /home/t/tange/.bashrc +debian-ppc /home/t/tange/.shrc +debian-ppc /home/t/tange/.zshenv +debian-ppc /home/t/tange/.config/fish/config.fish +debian-ppc /home/t/tange/.kshrc +debian-ppc /home/t/tange/.mkshrc +debian-ppc /home/t/tange/.profile +debian-ppc /home/t/tange/.cshrc +debian-ppc /home/t/tange/.tcshrc +debian-ppc install-OK +freebsd Syntax error: Bad fd number +hpux Installed env_parallel in: +hpux /home/t/tange/.bashrc +hpux /home/t/tange/.shrc +hpux /home/t/tange/.zshenv +hpux /home/t/tange/.config/fish/config.fish +hpux /home/t/tange/.kshrc +hpux /home/t/tange/.mkshrc +hpux /home/t/tange/.profile +hpux /home/t/tange/.cshrc +hpux /home/t/tange/.tcshrc +hpux install-OK +hpux-ia64 Installed env_parallel in: +hpux-ia64 /home/t/tange/.bashrc +hpux-ia64 /home/t/tange/.shrc +hpux-ia64 /home/t/tange/.zshenv +hpux-ia64 /home/t/tange/.config/fish/config.fish +hpux-ia64 /home/t/tange/.kshrc +hpux-ia64 /home/t/tange/.mkshrc +hpux-ia64 /home/t/tange/.profile +hpux-ia64 /home/t/tange/.cshrc +hpux-ia64 /home/t/tange/.tcshrc +hpux-ia64 install-OK +hpux-ia64 bin/env_parallel: line 33: /home/t/tange/.cshrc: Permission denied +hurd Installed env_parallel in: +hurd /home/t/tange/.bashrc +hurd /home/t/tange/.shrc +hurd /home/t/tange/.zshenv +hurd /home/t/tange/.config/fish/config.fish +hurd /home/t/tange/.kshrc +hurd /home/t/tange/.mkshrc +hurd /home/t/tange/.profile +hurd /home/t/tange/.cshrc +hurd /home/t/tange/.tcshrc +hurd install-OK +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix env: bash: No such file or directory +macosx Installed env_parallel in: +macosx /Users/tange/.bashrc +macosx /Users/tange/.shrc +macosx /Users/tange/.zshenv +macosx /Users/tange/.config/fish/config.fish +macosx /Users/tange/.kshrc +macosx /Users/tange/.mkshrc +macosx /Users/tange/.profile +macosx /Users/tange/.cshrc +macosx /Users/tange/.tcshrc +macosx install-OK +mandriva Installed env_parallel in: +mandriva /home/t/tange/.bashrc +mandriva /home/t/tange/.shrc +mandriva /home/t/tange/.zshenv +mandriva /home/t/tange/.config/fish/config.fish +mandriva /home/t/tange/.kshrc +mandriva /home/t/tange/.mkshrc +mandriva /home/t/tange/.profile +mandriva /home/t/tange/.cshrc +mandriva /home/t/tange/.tcshrc +mandriva install-OK +miros Installed env_parallel in: +miros /home/t/tange/.bashrc +miros /home/t/tange/.shrc +miros /home/t/tange/.zshenv +miros /home/t/tange/.config/fish/config.fish +miros /home/t/tange/.kshrc +miros /home/t/tange/.mkshrc +miros /home/t/tange/.profile +miros /home/t/tange/.cshrc +miros /home/t/tange/.tcshrc +miros install-OK +netbsd Installed env_parallel in: +netbsd /home/t/tange/.bashrc +netbsd /home/t/tange/.shrc +netbsd /home/t/tange/.zshenv +netbsd /home/t/tange/.config/fish/config.fish +netbsd /home/t/tange/.kshrc +netbsd /home/t/tange/.mkshrc +netbsd /home/t/tange/.profile +netbsd /home/t/tange/.cshrc +netbsd /home/t/tange/.tcshrc +netbsd install-OK +openbsd Installed env_parallel in: +openbsd /home/t/tange/.bashrc +openbsd /home/t/tange/.shrc +openbsd /home/t/tange/.zshenv +openbsd /home/t/tange/.config/fish/config.fish +openbsd /home/t/tange/.kshrc +openbsd /home/t/tange/.mkshrc +openbsd /home/t/tange/.profile +openbsd /home/t/tange/.cshrc +openbsd /home/t/tange/.tcshrc +openbsd install-OK +openindiana Installed env_parallel in: +openindiana /u/t/tange/.bashrc +openindiana /u/t/tange/.shrc +openindiana /u/t/tange/.zshenv +openindiana /u/t/tange/.config/fish/config.fish +openindiana /u/t/tange/.kshrc +openindiana /u/t/tange/.mkshrc +openindiana /u/t/tange/.profile +openindiana /u/t/tange/.cshrc +openindiana /u/t/tange/.tcshrc +openindiana install-OK +pidora Installed env_parallel in: +pidora /home/t/tange/.bashrc +pidora /home/t/tange/.shrc +pidora /home/t/tange/.zshenv +pidora /home/t/tange/.config/fish/config.fish +pidora /home/t/tange/.kshrc +pidora /home/t/tange/.mkshrc +pidora /home/t/tange/.profile +pidora /home/t/tange/.cshrc +pidora /home/t/tange/.tcshrc +pidora install-OK +qnx Installed env_parallel in: +qnx /home/t/tange/.bashrc +qnx /home/t/tange/.shrc +qnx /home/t/tange/.zshenv +qnx /home/t/tange/.config/fish/config.fish +qnx /home/t/tange/.kshrc +qnx /home/t/tange/.mkshrc +qnx /home/t/tange/.profile +qnx /home/t/tange/.cshrc +qnx /home/t/tange/.tcshrc +qnx install-OK +qnx /bin/sh: >&/dev/null : illegal file descriptor name +raspbian Installed env_parallel in: +raspbian /home/t/tange/.bashrc +raspbian /home/t/tange/.shrc +raspbian /home/t/tange/.zshenv +raspbian /home/t/tange/.config/fish/config.fish +raspbian /home/t/tange/.kshrc +raspbian /home/t/tange/.mkshrc +raspbian /home/t/tange/.profile +raspbian /home/t/tange/.cshrc +raspbian /home/t/tange/.tcshrc +raspbian install-OK +redhat Installed env_parallel in: +redhat /home/t/tange/.bashrc +redhat /home/t/tange/.shrc +redhat /home/t/tange/.zshenv +redhat /home/t/tange/.config/fish/config.fish +redhat /home/t/tange/.kshrc +redhat /home/t/tange/.mkshrc +redhat /home/t/tange/.profile +redhat /home/t/tange/.cshrc +redhat /home/t/tange/.tcshrc +redhat install-OK +scosysv Installed env_parallel in: +scosysv /home/t/tange/.bashrc +scosysv /home/t/tange/.shrc +scosysv /home/t/tange/.zshenv +scosysv /home/t/tange/.config/fish/config.fish +scosysv /home/t/tange/.kshrc +scosysv /home/t/tange/.mkshrc +scosysv /home/t/tange/.profile +scosysv /home/t/tange/.cshrc +scosysv /home/t/tange/.tcshrc +scosysv install-OK +solaris Installed env_parallel in: +solaris /home/t/tange/.bashrc +solaris /home/t/tange/.shrc +solaris /home/t/tange/.zshenv +solaris /home/t/tange/.config/fish/config.fish +solaris /home/t/tange/.kshrc +solaris /home/t/tange/.mkshrc +solaris /home/t/tange/.profile +solaris /home/t/tange/.cshrc +solaris /home/t/tange/.tcshrc +solaris install-OK +solaris-x86 Installed env_parallel in: +solaris-x86 /home/tange/.bashrc +solaris-x86 /home/tange/.shrc +solaris-x86 /home/tange/.zshenv +solaris-x86 /home/tange/.config/fish/config.fish +solaris-x86 /home/tange/.kshrc +solaris-x86 /home/tange/.mkshrc +solaris-x86 /home/tange/.profile +solaris-x86 /home/tange/.cshrc +solaris-x86 /home/tange/.tcshrc +solaris-x86 install-OK +sshwithpass minix Installed env_parallel in: +sshwithpass minix /home/t/tange/.bashrc +sshwithpass minix /home/t/tange/.shrc +sshwithpass minix /home/t/tange/.zshenv +sshwithpass minix /home/t/tange/.config/fish/config.fish +sshwithpass minix /home/t/tange/.kshrc +sshwithpass minix /home/t/tange/.mkshrc +sshwithpass minix /home/t/tange/.profile +sshwithpass minix /home/t/tange/.cshrc +sshwithpass minix /home/t/tange/.tcshrc +sshwithpass minix install-OK +suse Installed env_parallel in: +suse /home/t/tange/.bashrc +suse /home/t/tange/.shrc +suse /home/t/tange/.zshenv +suse /home/t/tange/.config/fish/config.fish +suse /home/t/tange/.kshrc +suse /home/t/tange/.mkshrc +suse /home/t/tange/.profile +suse /home/t/tange/.cshrc +suse /home/t/tange/.tcshrc +suse install-OK +tru64 Installed env_parallel in: +tru64 /home/t/tange/.bashrc +tru64 /home/t/tange/.shrc +tru64 /home/t/tange/.zshenv +tru64 /home/t/tange/.config/fish/config.fish +tru64 /home/t/tange/.kshrc +tru64 /home/t/tange/.mkshrc +tru64 /home/t/tange/.profile +tru64 /home/t/tange/.cshrc +tru64 /home/t/tange/.tcshrc +tru64 install-OK +ubuntu Installed env_parallel in: +ubuntu /home/t/tange/.bashrc +ubuntu /home/t/tange/.shrc +ubuntu /home/t/tange/.zshenv +ubuntu /home/t/tange/.config/fish/config.fish +ubuntu /home/t/tange/.kshrc +ubuntu /home/t/tange/.mkshrc +ubuntu /home/t/tange/.profile +ubuntu /home/t/tange/.cshrc +ubuntu /home/t/tange/.tcshrc +ubuntu install-OK +unixware UX:sh (/bin/sh): ERROR: source: Not found +unixware UX:env: ERROR: No such file or directory: bash +aix env_parallel run-OK +centos env_parallel run-OK +debian env_parallel run-OK +debian-ppc env_parallel run-OK +freebsd Syntax error: Bad fd number +hpux env_parallel run-OK +hpux-ia64 env_parallel run-OK +hurd env_parallel run-OK +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix env: bash: No such file or directory +macosx env_parallel run-OK +mandriva env_parallel run-OK +miros env_parallel run-OK +netbsd env_parallel run-OK +openbsd env_parallel run-OK +openindiana env_parallel run-OK +pidora env_parallel run-OK +qnx env_parallel run-OK +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx /bin/sh: shopt: cannot execute - No such file or directory +raspbian env_parallel run-OK +redhat env_parallel run-OK +scosysv env_parallel run-OK +solaris env_parallel run-OK +solaris-x86 env_parallel run-OK +sshwithpass minix env_parallel run-OK +suse env_parallel run-OK +tru64 env_parallel run-OK +ubuntu env_parallel run-OK +unixware env_parallel run-OK +unixware UX:sh (/bin/sh): ERROR: source: Not found +parallel: Warning: Starting 11 processes took > 2 sec. +parallel: Warning: Consider adjusting -j. Press CTRL-C to stop. +aix reading from process substitution OK +centos reading from process substitution OK +debian reading from process substitution OK +debian-ppc reading from process substitution OK +freebsd Syntax error: "(" unexpected (expecting word) +hpux reading from process substitution OK +hpux-ia64 reading from process substitution OK +hurd reading from process substitution OK +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix env: bash: No such file or directory +macosx reading from process substitution OK +mandriva reading from process substitution OK +miros reading from process substitution OK +netbsd Missing name for redirect. +netbsd Missing name for redirect. +netbsd parallel: Error: Cannot open input file `<': No such file or directory. +openbsd reading from process substitution OK +openindiana reading from process substitution OK +pidora reading from process substitution OK +qnx /bin/sh: syntax error: `(' unexpected +raspbian reading from process substitution OK +redhat reading from process substitution OK +scosysv reading from process substitution OK +solaris reading from process substitution OK +solaris-x86 reading from process substitution OK +sshwithpass minix reading from process substitution OK +suse reading from process substitution OK +tru64 reading from process substitution OK +ubuntu reading from process substitution OK +ultrix Missing name for redirect. +unixware UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `(' unexpected + # Test empty command name in process list + test_empty_cmd() { + echo '### Test if empty command name in process list causes problems' + perl -e '$0=" ";sleep 1000' & + pid=$! + parallel echo ::: OK_with_empty_cmd + kill $pid + } + export -f test_empty_cmd + export PARALLEL_SHELL=bin/bash + PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1 +aix ### Test if empty command name in process list causes problems +aix OK_with_empty_cmd +centos ### Test if empty command name in process list causes problems +centos OK_with_empty_cmd +debian ### Test if empty command name in process list causes problems +debian OK_with_empty_cmd +debian-ppc ### Test if empty command name in process list causes problems +debian-ppc OK_with_empty_cmd +freebsd ### Test if empty command name in process list causes problems +freebsd OK_with_empty_cmd +hpux ### Test if empty command name in process list causes problems +hpux OK_with_empty_cmd +hpux-ia64 ### Test if empty command name in process list causes problems +hpux-ia64 OK_with_empty_cmd +hurd ### Test if empty command name in process list causes problems +hurd OK_with_empty_cmd +irix open3: exec of bzip2 -dc failed at -e line 1 +irix Undefined subroutine &main::decode_base64 called at -e line 1. +macosx ### Test if empty command name in process list causes problems +macosx OK_with_empty_cmd +mandriva ### Test if empty command name in process list causes problems +mandriva OK_with_empty_cmd +miros ### Test if empty command name in process list causes problems +miros OK_with_empty_cmd +netbsd ### Test if empty command name in process list causes problems +netbsd OK_with_empty_cmd +netbsd /home/t/tange/setupenv: line 9: syntax error: unexpected end of file +openbsd ### Test if empty command name in process list causes problems +openbsd OK_with_empty_cmd +openindiana ### Test if empty command name in process list causes problems +openindiana OK_with_empty_cmd +pidora ### Test if empty command name in process list causes problems +pidora OK_with_empty_cmd +qnx ### Test if empty command name in process list causes problems +qnx OK_with_empty_cmd +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian ### Test if empty command name in process list causes problems +raspbian OK_with_empty_cmd +redhat ### Test if empty command name in process list causes problems +redhat OK_with_empty_cmd +scosysv ### Test if empty command name in process list causes problems +scosysv OK_with_empty_cmd +solaris ### Test if empty command name in process list causes problems +solaris OK_with_empty_cmd +solaris-x86 ### Test if empty command name in process list causes problems +solaris-x86 OK_with_empty_cmd +sshwithpass minix ### Test if empty command name in process list causes problems +suse ### Test if empty command name in process list causes problems +suse OK_with_empty_cmd +tru64 ### Test if empty command name in process list causes problems +tru64 OK_with_empty_cmd +ubuntu ### Test if empty command name in process list causes problems +ubuntu OK_with_empty_cmd +ultrix open3: wtr should not be null at -e line 1 +unixware ### Test if empty command name in process list causes problems +unixware OK_with_empty_cmd + echo + echo '### parset arr seq ::: 2 3 4' + echo '(bash ksh mksh zsh only)' + echo + par_nonall 'parset arr seq ::: 2 3 4; echo ${arr[*]}' 2>&1 + echo '### env_parset arr seq ::: 2 3 4' + par_nonall 'start=2;env_parset arr seq \$start ::: 2 3 4; echo ${arr[*]}' 2>&1 ### parset arr seq ::: 2 3 4 -(bash ksh zsh only) +(bash ksh mksh zsh only) -aix.polarhome.com 1 2 1 2 3 1 2 3 4 -centos.polarhome.com 1 2 1 2 3 1 2 3 4 -debian-ppc.polarhome.com 1 2 1 2 3 1 2 3 4 -debian.polarhome.com 1 2 1 2 3 1 2 3 4 -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com -macosx.polarhome.com 1 2 1 2 3 1 2 3 4 -mandriva.polarhome.com 1 2 1 2 3 1 2 3 4 -miros.polarhome.com 1 2 1 2 3 1 2 3 4 -netbsd.polarhome.com parset: Command not found. -netbsd.polarhome.com arr: Undefined variable. -openbsd.polarhome.com -openindiana.polarhome.com 1 2 1 2 3 1 2 3 4 -pidora.polarhome.com 1 2 1 2 3 1 2 3 4 -raspbian.polarhome.com 1 2 1 2 3 1 2 3 4 -redhat.polarhome.com 1 2 1 2 3 1 2 3 4 -scosysv.polarhome.com 1 2 1 2 3 1 2 3 4 -solaris-x86.polarhome.com 1 2 1 2 3 1 2 3 4 -solaris.polarhome.com 1 2 1 2 3 1 2 3 4 -suse.polarhome.com 1 2 1 2 3 1 2 3 4 -tru64.polarhome.com 1 2 1 2 3 1 2 3 4 -ubuntu.polarhome.com 1 2 1 2 3 1 2 3 4 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected +aix 1 2 1 2 3 1 2 3 4 +centos 1 2 1 2 3 1 2 3 4 +debian 1 2 1 2 3 1 2 3 4 +debian-ppc 1 2 1 2 3 1 2 3 4 +freebsd Syntax error: Bad fd number +hpux +hpux-ia64 1 2 1 2 3 1 2 3 4 +hurd 1 2 1 2 3 1 2 3 4 +irix +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix /usr/freeware/bin/bash: line 1: parset: command not found +macosx 1 2 1 2 3 1 2 3 4 +mandriva 1 2 1 2 3 1 2 3 4 +miros 1 2 1 2 3 1 2 3 4 +netbsd parset: Command not found. +netbsd arr: Undefined variable. +openbsd +openindiana 1 2 1 2 3 1 2 3 4 +pidora 1 2 1 2 3 1 2 3 4 +qnx +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx /bin/sh: syntax error: `(' unexpected +raspbian 1 2 1 2 3 1 2 3 4 +redhat 1 2 1 2 3 1 2 3 4 +scosysv 1 2 1 2 3 1 2 3 4 +solaris 1 2 1 2 3 1 2 3 4 +solaris-x86 1 2 1 2 3 1 2 3 4 +sshwithpass minix 1 2 1 2 3 1 2 3 4 +suse 1 2 1 2 3 1 2 3 4 +tru64 1 2 1 2 3 1 2 3 4 +ubuntu 1 2 1 2 3 1 2 3 4 +unixware UX:sh (/bin/sh): ERROR: source: Not found +unixware UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected ### env_parset arr seq ::: 2 3 4 -aix.polarhome.com 2 2 3 2 3 4 -centos.polarhome.com 2 2 3 2 3 4 -debian-ppc.polarhome.com 2 2 3 2 3 4 -debian.polarhome.com 2 2 3 2 3 4 -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com -macosx.polarhome.com 2 2 3 2 3 4 -mandriva.polarhome.com 2 2 3 2 3 4 -miros.polarhome.com 1 2 1 2 1 2 -netbsd.polarhome.com start=2: Command not found. -netbsd.polarhome.com env_parset: Command not found. -netbsd.polarhome.com arr: Undefined variable. -openbsd.polarhome.com -openindiana.polarhome.com 2 2 3 2 3 4 -pidora.polarhome.com 2 2 3 2 3 4 -raspbian.polarhome.com 2 2 3 2 3 4 -redhat.polarhome.com 2 2 3 2 3 4 -scosysv.polarhome.com 2 2 3 2 3 4 -solaris-x86.polarhome.com 2 2 3 2 3 4 -solaris.polarhome.com 1 2 1 2 1 2 -suse.polarhome.com 2 2 3 2 3 4 -tru64.polarhome.com 2 2 3 2 3 4 -ubuntu.polarhome.com 2 2 3 2 3 4 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found -unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected +aix 2 2 3 2 3 4 +centos 2 2 3 2 3 4 +debian 2 2 3 2 3 4 +debian-ppc 2 2 3 2 3 4 +freebsd Syntax error: Bad fd number +hpux +hpux-ia64 1 2 1 2 1 2 +hurd 2 2 3 2 3 4 +irix +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix /usr/freeware/bin/bash: line 1: env_parset: command not found +macosx 2 2 3 2 3 4 +mandriva 2 2 3 2 3 4 +miros 1 2 1 2 1 2 +netbsd start=2: Command not found. +netbsd env_parset: Command not found. +netbsd arr: Undefined variable. +openbsd +openindiana 2 2 3 2 3 4 +pidora 2 2 3 2 3 4 +qnx +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx /bin/sh: syntax error: `(' unexpected +raspbian 2 2 3 2 3 4 +redhat 2 2 3 2 3 4 +scosysv 2 2 3 2 3 4 +solaris 1 2 1 2 1 2 +solaris-x86 2 2 3 2 3 4 +sshwithpass minix 2 2 3 2 3 4 +suse 2 2 3 2 3 4 +tru64 2 2 3 2 3 4 +ubuntu 2 2 3 2 3 4 +unixware UX:sh (/bin/sh): ERROR: source: Not found +unixware UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected + echo + echo '### parset var1,var2,var3 seq ::: 2 3 4' + echo '(bash ksh mksh zsh ash dash only)' + echo + par_nonall 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' 2>&1 + echo '### env_parset var1,var2,var3 seq ::: 2 3 4' + par_nonall 'start=2; env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' 2>&1 + ### parset var1,var2,var3 seq ::: 2 3 4 -(bash ksh zsh ash dash only) +(bash ksh mksh zsh ash dash only) -aix.polarhome.com 1 2,1 2 3,1 2 3 4 -centos.polarhome.com 1 2,1 2 3,1 2 3 4 -debian-ppc.polarhome.com 1 2,1 2 3,1 2 3 4 -debian.polarhome.com 1 2,1 2 3,1 2 3 4 -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com ,, -macosx.polarhome.com 1 2,1 2 3,1 2 3 4 -mandriva.polarhome.com 1 2,1 2 3,1 2 3 4 -miros.polarhome.com 1 2,1 2 3,1 2 3 4 -netbsd.polarhome.com parset: Command not found. -netbsd.polarhome.com var1: Undefined variable. -openbsd.polarhome.com ,, -openindiana.polarhome.com 1 2,1 2 3,1 2 3 4 -pidora.polarhome.com 1 2,1 2 3,1 2 3 4 -raspbian.polarhome.com 1 2,1 2 3,1 2 3 4 -redhat.polarhome.com 1 2,1 2 3,1 2 3 4 -scosysv.polarhome.com 1 2,1 2 3,1 2 3 4 -solaris-x86.polarhome.com 1 2,1 2 3,1 2 3 4 -solaris.polarhome.com 1 2,1 2 3,1 2 3 4 -suse.polarhome.com 1 2,1 2 3,1 2 3 4 -tru64.polarhome.com 1 2,1 2 3,1 2 3 4 -ubuntu.polarhome.com 1 2,1 2 3,1 2 3 4 -unixware.polarhome.com ,, -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +aix 1 2,1 2 3,1 2 3 4 +centos 1 2,1 2 3,1 2 3 4 +debian 1 2,1 2 3,1 2 3 4 +debian-ppc 1 2,1 2 3,1 2 3 4 +freebsd Syntax error: Bad fd number +hpux ,, +hpux-ia64 1 2,1 2 3,1 2 3 4 +hurd 1 2,1 2 3,1 2 3 4 +irix ,, +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix /usr/freeware/bin/bash: line 1: parset: command not found +macosx 1 2,1 2 3,1 2 3 4 +mandriva 1 2,1 2 3,1 2 3 4 +miros 1 2,1 2 3,1 2 3 4 +netbsd parset: Command not found. +netbsd var1: Undefined variable. +openbsd ,, +openindiana 1 2,1 2 3,1 2 3 4 +pidora 1 2,1 2 3,1 2 3 4 +qnx ,, +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian 1 2,1 2 3,1 2 3 4 +redhat 1 2,1 2 3,1 2 3 4 +scosysv 1 2,1 2 3,1 2 3 4 +solaris 1 2,1 2 3,1 2 3 4 +solaris-x86 1 2,1 2 3,1 2 3 4 +sshwithpass minix 1 2,1 2 3,1 2 3 4 +suse 1 2,1 2 3,1 2 3 4 +tru64 1 2,1 2 3,1 2 3 4 +ubuntu 1 2,1 2 3,1 2 3 4 +unixware ,, +unixware UX:sh (/bin/sh): ERROR: source: Not found ### env_parset var1,var2,var3 seq ::: 2 3 4 -aix.polarhome.com 2,2 3,2 3 4 -centos.polarhome.com 2,2 3,2 3 4 -debian-ppc.polarhome.com 2,2 3,2 3 4 -debian.polarhome.com 2,2 3,2 3 4 -freebsd.polarhome.com Syntax error: Bad fd number -hpux.polarhome.com ,, -macosx.polarhome.com 2,2 3,2 3 4 -mandriva.polarhome.com 2,2 3,2 3 4 -miros.polarhome.com 1 2,1 2,1 2 -netbsd.polarhome.com start=2: Command not found. -netbsd.polarhome.com env_parset: Command not found. -netbsd.polarhome.com var1: Undefined variable. -openbsd.polarhome.com ,, -openindiana.polarhome.com 2,2 3,2 3 4 -pidora.polarhome.com 2,2 3,2 3 4 -raspbian.polarhome.com 2,2 3,2 3 4 -redhat.polarhome.com 2,2 3,2 3 4 -scosysv.polarhome.com 2,2 3,2 3 4 -solaris-x86.polarhome.com 2,2 3,2 3 4 -solaris.polarhome.com 1 2,1 2,1 2 -suse.polarhome.com 2,2 3,2 3 4 -tru64.polarhome.com 2,2 3,2 3 4 -ubuntu.polarhome.com 2,2 3,2 3 4 -unixware.polarhome.com 2,2 3,2 3 4 -unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +aix 2,2 3,2 3 4 +centos 2,2 3,2 3 4 +debian 2,2 3,2 3 4 +debian-ppc 2,2 3,2 3 4 +freebsd Syntax error: Bad fd number +hpux ,, +hpux-ia64 1 2,1 2,1 2 +hurd 2,2 3,2 3 4 +irix ,, +irix /usr/freeware/bin/bash: line 1: /home/t/tange/setupenv: No such file or directory +irix /usr/freeware/bin/bash: line 1: env_parset: command not found +macosx 2,2 3,2 3 4 +mandriva 2,2 3,2 3 4 +miros 1 2,1 2,1 2 +netbsd start=2: Command not found. +netbsd env_parset: Command not found. +netbsd var1: Undefined variable. +openbsd ,, +openindiana 2,2 3,2 3 4 +pidora 2,2 3,2 3 4 +qnx ,, +qnx /bin/sh: >&/dev/null : illegal file descriptor name +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx /bin/sh: compgen: cannot execute - No such file or directory +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +qnx parallel: Warning: Cannot figure out number of cpus. Using 1. +raspbian 2,2 3,2 3 4 +redhat 2,2 3,2 3 4 +scosysv 2,2 3,2 3 4 +solaris 1 2,1 2,1 2 +solaris-x86 2,2 3,2 3 4 +sshwithpass minix 2,2 3,2 3 4 +suse 2,2 3,2 3 4 +tru64 2,2 3,2 3 4 +ubuntu 2,2 3,2 3 4 +unixware 2,2 3,2 3 4 +unixware UX:sh (/bin/sh): ERROR: source: Not found diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index f927a88b..bc618270 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -20,6 +20,7 @@ sleep .3 /bin/bash: -c: line 0: syntax error near unexpected token `)' /bin/bash: -c: line 0: ` perl -e 'for(1..10){print "$_\n"}') > num_%header' perl -e 'print "HHHHAAABBBCCC"' > fixedlen + parallel echo ::: A B C A B @@ -149,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 @@ -208,7 +209,7 @@ Job 3 of 5 Job 4 of 5 Job 5 of 5 parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$' -*/!#$ shell quoted is \*/\!\#\$ +*/!#$ shell quoted is '*/!#$' parallel echo {= 'if($_==3) { skip() }' =} ::: {1..5} 9 parallel echo {= 'if($arg[1]==$arg[2]) { skip() }' =} \ @@ -388,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"' @@ -573,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 @@ -783,6 +783,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh` E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc Supports: aliases, functions, variables, arrays +mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh` + E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc + Supports: aliases, functions, variables, arrays + pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile Supports: aliases, functions, variables, arrays @@ -821,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 @@ -833,14 +839,11 @@ DISPLAY GOPATH GPG_AGENT_INFO GS_LIB -GTK2_RC_FILES -GTK_RC_FILES HISTCONTROL HOME JAVA_HOME JDK_HOME KDE_FULL_SESSION -KDE_MULTIHEAD KDE_SESSION_UID KDE_SESSION_VERSION KONSOLE_DBUS_SERVICE @@ -862,6 +865,7 @@ MAKE_TERMERR MAKE_TERMOUT MANDATORY_PATH MFLAGS +OLDPWD ORACLE_HOME ORACLE_SID PARALLEL @@ -876,8 +880,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 @@ -908,7 +912,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 @@ -952,6 +955,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh` E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc Supports: aliases, functions, variables, arrays +mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh` + E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc + Supports: aliases, functions, variables, arrays + pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile Supports: aliases, functions, variables, arrays @@ -987,7 +994,7 @@ For details: see man env_parallel export -f my_func3 parallel -vv --workdir ... --nice 17 --env _ --trc {}.out \ -S $SERVER1 my_func3 {} ::: abc-file -ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR && rsync --protocol 30 -rlDzR -essh\ -l\ parallel ./abc-file lo:./.TMPWORKDIR;ssh -l parallel lo -- 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;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ./.TMPWORKDIR/./.\;\ rsync -rlDzR -essh\ -l\ parallel lo:./abc-file.out ./.;ssh -l parallel lo -- rm\ -f\ ./.TMPWORKDIR/abc-file\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;;ssh -l parallel lo -- rm\ -f\ ./.TMPWORKDIR/abc-file.out\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;;ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status; +ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR && rsync --protocol 30 -rlDzR -e'ssh -l parallel' ./abc-file lo:./.TMPWORKDIR;ssh -l parallel lo -- 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;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path='cd ./.TMPWORKDIR/./.; rsync' -rlDzR -e'ssh -l parallel' lo:./abc-file.out ./.;ssh -l parallel lo -- 'rm -f ./.TMPWORKDIR/abc-file; sh -c '"'"'rmdir ./.TMPWORKDIR/ ./.parallel/tmp/ ./.parallel/ 2>/dev/null;'"'"''"'"'rm -rf ./.TMPWORKDIR;'"'";ssh -l parallel lo -- 'rm -f ./.TMPWORKDIR/abc-file.out; sh -c '"'"'rmdir ./.TMPWORKDIR/ ./.parallel/tmp/ ./.parallel/ 2>/dev/null;'"'"''"'"'rm -rf ./.TMPWORKDIR;'"'";ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status; parset myvar1,myvar2 echo ::: a b echo $myvar1 echo $myvar2 @@ -1015,6 +1022,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh` E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc Supports: aliases, functions, variables, arrays +mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh` + E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc + Supports: aliases, functions, variables, arrays + pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile Supports: aliases, functions, variables, arrays @@ -1066,6 +1077,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh` E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc Supports: aliases, functions, variables, arrays +mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh` + E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc + Supports: aliases, functions, variables, arrays + pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile Supports: aliases, functions, variables, arrays @@ -1115,6 +1130,10 @@ ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh` E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc Supports: aliases, functions, variables, arrays +mksh: Put this in $HOME/.mkshrc: source `which env_parallel.mksh` + E.g. by doing: echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc + Supports: aliases, functions, variables, arrays + pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh` E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile Supports: aliases, functions, variables, arrays @@ -1283,20 +1302,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 @@ -1330,7 +1346,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 @@ -1404,6 +1419,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' && @@ -1424,8 +1440,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: @@ -1466,8 +1482,7 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing. parallel --version GNU parallel VERSION -Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018 -Ole Tange and Free Software Foundation, Inc. +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. GNU parallel comes with no warranty. @@ -1521,4 +1536,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/test17 b/testsuite/wanted-results/test17 index 4a403895..8b5e261f 100644 --- a/testsuite/wanted-results/test17 +++ b/testsuite/wanted-results/test17 @@ -115,10 +115,10 @@ OK ls: /tmp/parallel.file*: No such file or directory OK ### --transfer --cleanup - multiple argument files -cat /tmp/parallel.file\>fire.file tmp/parallel.file\>fire.file +cat '/tmp/parallel.file>fire.file' 'tmp/parallel.file>fire.file' file>fire file>fire -cat /tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file +cat '/tmp/parallel.file : & ) \n*.jpg.file' 'tmp/parallel.file : & ) \n*.jpg.file' file : & ) \n*.jpg file : & ) \n*.jpg ls: /tmp/parallel.file*: No such file or directory diff --git a/testsuite/wanted-results/test19 b/testsuite/wanted-results/test19 index 8d78c930..e14b141c 100644 --- a/testsuite/wanted-results/test19 +++ b/testsuite/wanted-results/test19 @@ -76,28 +76,28 @@ 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 -- 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.' -'newlineX.out --l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -'newlineX.out2 --l parallel one-server -- rm -f ./tmp/parallel.file.' -'newlineX; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; --l parallel one-server -- rm -f ./tmp/parallel.file.' -'newlineX.out; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; --l parallel one-server -- rm -f ./tmp/parallel.file.' -'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; +-l parallel one-server rsync --server -lDrRze.iLsfxC . ./. +-l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64 +-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file. +newlineX.out' +-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;' +-l parallel one-server -- rm -f './tmp/parallel.file. +newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' +-l parallel one-server -- rm -f './tmp/parallel.file. +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 -- 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.' -'newlineX.out --l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -'newlineX.out2 --l parallel one-server -- rm -f ./tmp/parallel.file.' -'newlineX; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; --l parallel one-server -- rm -f ./tmp/parallel.file.' -'newlineX.out; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; --l parallel one-server -- rm -f ./tmp/parallel.file.' -'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; +-l parallel one-server rsync --server -lDrRze.iLsfxC . ./. +-l parallel one-server -- exec perl -e '@GNU_Parallel=split/_/,"use_IPC::Open3;_use_MIME::Base64";eval"@GNU_Parallel";$chld=$SIG{CHLD};$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;$SIG{CHLD}=$chld;eval$eval;' base64 +-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfxC . './parallel.file. +newlineX.out' +-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;' +-l parallel one-server -- rm -f './tmp/parallel.file. +newlineX.out'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' +-l parallel one-server -- rm -f './tmp/parallel.file. +newlineX.out2'; sh -c 'rmdir ./tmp/ ./ 2>/dev/null;' diff --git a/testsuite/wanted-results/test21 b/testsuite/wanted-results/test21 index a2ccd6f3..f860a04f 100644 --- a/testsuite/wanted-results/test21 +++ b/testsuite/wanted-results/test21 @@ -1,5 +1,5 @@ ### Test $PARALLEL - single line -1 +4 1 1 centos3.tange.dk 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 diff --git a/testsuite/wanted-results/test35 b/testsuite/wanted-results/test35 index 90d636b3..6b37edf7 100644 --- a/testsuite/wanted-results/test35 +++ b/testsuite/wanted-results/test35 @@ -1,11 +1,11 @@ ### Test --wd newtempdir/newdir/tmp/ with space dirs -echo >./\ ab/c\"d/ef\ g.6 -echo >\ ab/c\"d/efg.6 +echo >'./ ab/c"d/ef g'.6 +echo >' ab/c"d/efg'.6 echo >./b/bar.6 echo >./b/foo.6 -echo >./\ ab\ /c\'\ d/\ ef\"g.6 +echo >'./ ab /c'"'"' d/ ef"g'.6 echo >./2-col.txt.6 -echo >./a\ b/cd\ /\ ef/efg.6 +echo >'./a b/cd / ef/efg'.6 ./ ab /c' d/ ef"g.6 ./ ab/c"d/ef g.6 ./ ab/c"d/efg.6 @@ -14,13 +14,13 @@ echo >./a\ b/cd\ /\ ef/efg.6 ./b/bar.6 ./b/foo.6 ### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs -echo >./\ ab/c\"d/ef\ g.7 -echo >\ ab/c\"d/efg.7 +echo >'./ ab/c"d/ef g'.7 +echo >' ab/c"d/efg'.7 echo >./b/bar.7 echo >./b/foo.7 -echo >./\ ab\ /c\'\ d/\ ef\"g.7 +echo >'./ ab /c'"'"' d/ ef"g'.7 echo >./2-col.txt.7 -echo >./a\ b/cd\ /\ ef/efg.7 +echo >'./a b/cd / ef/efg'.7 ./ ab /c' d/ ef"g.7 ./ ab/c"d/ef g.7 ./ ab/c"d/efg.7 @@ -34,13 +34,13 @@ echo >./a\ b/cd\ /\ ef/efg.7 echo >2-col.txt.2 ./2-col.txt.2 ### Test --wd ... with space dirs -echo >./\ ab/c\"d/ef\ g.3 -echo >\ ab/c\"d/efg.3 +echo >'./ ab/c"d/ef g'.3 +echo >' ab/c"d/efg'.3 echo >./b/bar.3 echo >./b/foo.3 -echo >./\ ab\ /c\'\ d/\ ef\"g.3 +echo >'./ ab /c'"'"' d/ ef"g'.3 echo >./2-col.txt.3 -echo >./a\ b/cd\ /\ ef/efg.3 +echo >'./a b/cd / ef/efg'.3 ./ ab /c' d/ ef"g.3 ./ ab/c"d/ef g.3 ./ ab/c"d/efg.3 @@ -52,13 +52,13 @@ echo >./a\ b/cd\ /\ ef/efg.3 echo >2-col.txt.4 ./2-col.txt.4 ### Test --wd /tmp/ with space dirs -echo >./\ ab/c\"d/ef\ g.5 -echo >\ ab/c\"d/efg.5 +echo >'./ ab/c"d/ef g'.5 +echo >' ab/c"d/efg'.5 echo >./b/bar.5 echo >./b/foo.5 -echo >./\ ab\ /c\'\ d/\ ef\"g.5 +echo >'./ ab /c'"'"' d/ ef"g'.5 echo >./2-col.txt.5 -echo >./a\ b/cd\ /\ ef/efg.5 +echo >'./a b/cd / ef/efg'.5 ./ ab /c' d/ ef"g.5 ./ ab/c"d/ef g.5 ./ ab/c"d/efg.5 diff --git a/testsuite/wanted-results/test61 b/testsuite/wanted-results/test61 index d744cc3c..bde2e967 100644 --- a/testsuite/wanted-results/test61 +++ b/testsuite/wanted-results/test61 @@ -1,13 +1,13 @@ echo '### Test --return of weirdly named file' ### Test --return of weirdly named file stdout parallel --return {} -vv -S parallel\@parallel-server1 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b' -ssh -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;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzR -essh\ -l\ parallel parallel-server1:./aa\\\<\\\$\\\{\\\#\\\}\\\"\\\ b ./.; exit $_EXIT_status; +ssh -l parallel one-server -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$bashfunc = "";@ARGV="echo >'"'"'"'"'"'"'"'"'aa<\${#}\" b'"'"'"'"'"'"'"'"'";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'";_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path='cd ././.; rsync' -rlDzR -e'ssh -l parallel' parallel-server1:"'"'./aa<${#}" b'"'" ./.; exit $_EXIT_status; echo '### Test if remote login shell is csh' ### Test if remote login shell is csh stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;' -ssh -l csh localhost -- 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; +ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="1";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ a| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'"; 3 -ssh -l csh localhost -- 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; +ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="2";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ b| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'"; 3 -ssh -l csh localhost -- 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; +ssh -l csh localhost -- exec 'perl -e '"'"'$ENV{"PARALLEL_PID"}="XXXXX";$ENV{"PARALLEL_SEQ"}="3";$bashfunc = "";@ARGV="echo \$PARALLEL_PID \$PARALLEL_SEQ c| wc -w";$shell="$ENV{SHELL}";$tmpdir="/tmp/test61-tmpdir";$nice=0;do{$ENV{PARALLEL_TMP}=$tmpdir."/par".join"",map{(0..9,"a".."z","A".."Z")[rand(62)]}(1..5);}while(-e$ENV{PARALLEL_TMP});$SIG{CHLD}=sub{$done=1;};$pid=fork;unless($pid){eval{setpgrp};eval{setpriority(0,0,$nice)};exec$shell,"-c",($bashfunc."@ARGV");die"exec:$!\n";}do{$s=$s<1?0.001+$s*1.03:$s;select(undef,undef,undef,$s);}until($done||getppid==1);kill(SIGHUP,-${pid})unless$done;wait;exit($?&127?128+($?&127):1+$?>>8)'"'"; 3