diff --git a/NEWS b/NEWS index 96aec213..151bb434 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,33 @@ +20190822 + +* GNU Parallel will be presented at Driving IT 2019: + https://ida.dk/arrangementer-og-kurser/konferencer/driving-it#beskrivelse + +* Linux Productivity Tools + https://www.usenix.org/conference/lisa19/presentation/maheshwari + +* Improve your reconnaissance performance by using GNU Parallel + https://mailchi.mp/3f46ceb46357/improve-your-reconnaissance-performance-by-using-gnu-parallel + +* Paralel İşler / İşlemler / Programlar Bash’de Nasıl Çalıştırılır? + https://kaleinfo.com/2019/07/29/paralel-isler-islemler-programlar-bashde-nasil-calistirilir-2/ + +* Use POLYBAR to change WALLPAPER with GNU Parallel + https://www.youtube.com/watch?v=rjYg-b_eiRU + +* Finding the Balance Between Speed & Accuracy During an Internet-wide + Port Scanning + https://captmeelo.com/pentest/2019/07/29/port-scanning.html + +* GNU Parallel Ryugu released + https://linuxreviews.org/GNU_Parallel_Ryugu_released + +* CO2017 - CW1 - Operating Systems & Networks - Shell scripting + http://www.7daixie.com/2019071646302396.html + +* Bug fixes and man page updates. + + 20190722 * {= uq; =} causes the replacement string to be unquoted. Example: diff --git a/README b/README index 2d5f81c9..7b8be561 100644 --- a/README +++ b/README @@ -54,11 +54,11 @@ document. Full installation of GNU Parallel is as simple as: - wget https://ftpmirror.gnu.org/parallel/parallel-20190722.tar.bz2 - wget https://ftpmirror.gnu.org/parallel/parallel-20190722.tar.bz2.sig - gpg parallel-20190722.tar.bz2.sig - bzip2 -dc parallel-20190722.tar.bz2 | tar xvf - - cd parallel-20190722 + wget https://ftpmirror.gnu.org/parallel/parallel-20190822.tar.bz2 + wget https://ftpmirror.gnu.org/parallel/parallel-20190822.tar.bz2.sig + gpg parallel-20190822.tar.bz2.sig + bzip2 -dc parallel-20190822.tar.bz2 | tar xvf - + cd parallel-20190822 ./configure && make && sudo make install @@ -67,11 +67,11 @@ 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-20190722.tar.bz2 - wget https://ftpmirror.gnu.org/parallel/parallel-20190722.tar.bz2.sig - gpg parallel-20190722.tar.bz2.sig - bzip2 -dc parallel-20190722.tar.bz2 | tar xvf - - cd parallel-20190722 + wget https://ftpmirror.gnu.org/parallel/parallel-20190822.tar.bz2 + wget https://ftpmirror.gnu.org/parallel/parallel-20190822.tar.bz2.sig + gpg parallel-20190822.tar.bz2.sig + bzip2 -dc parallel-20190822.tar.bz2 | tar xvf - + cd parallel-20190822 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel diff --git a/configure b/configure index 7e3b8b8b..ca421217 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 20190722. +# Generated by GNU Autoconf 2.69 for parallel 20190822. # # Report bugs to . # @@ -579,8 +579,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20190722' -PACKAGE_STRING='parallel 20190722' +PACKAGE_VERSION='20190822' +PACKAGE_STRING='parallel 20190822' 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 20190722 to adapt to many kinds of systems. +\`configure' configures parallel 20190822 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 20190722:";; + short | recursive ) echo "Configuration of parallel 20190822:";; 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 20190722 +parallel configure 20190822 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 20190722, which was +It was created by parallel $as_me 20190822, 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='20190722' + VERSION='20190822' 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 20190722, which was +This file was extended by parallel $as_me 20190822, 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 20190722 +parallel config.status 20190822 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f0a3c431..1344d377 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20190722], [bug-parallel@gnu.org]) +AC_INIT([parallel], [20190822], [bug-parallel@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff --git a/doc/haikus b/doc/haikus index 3dacecff..00a45875 100644 --- a/doc/haikus +++ b/doc/haikus @@ -1,35 +1,37 @@ Quote of the month: -With multicore systems everywhere GNU Parallel is a must have tool. - -- Neil H. Watson @neil_h_watson - -My new favourite command line tool is gnu parallel. After knowing it for a while I just recently came back to it for a refactor of a script and now I've changed like 4 different huge scripts into tiny parallel scripts that do their job literally 3 to 10 times faster and just [mind blown] - -- Izzy @angry_izzy - -I love so much @GnuParallel to parallelize my SQL requests on @PostgreSQL - -- @rmaziere_85 Romain - -Parallel is the BEST command. - -- Nick @NickInfoSec - -GNU parallel really changed how I do a lot of data processing stuff - -- Brendan Dolan-Gavitt @moyix@twitter - -It is, beyond absolutely any doubt whatsoever, the single most -important tool I use in making me a productive bioinformatician. --- A-N-Other@reddit.com - -Parallel is a life send, what an awesome piece of software. --- Blaze9@reddit.com - -It's really powerful for smallish data processing scripts --- João Veiga @jcsvveiga@twitter - -It's the MapReduce of our generation! - -- Mathias Meyer @roidrage@twitter - + GNU Parallel is awesome + -- Gaurav Jain @gauravjain49@twitter + + [L]earning about parallel was amazing for me, it gives us many beautiful solutions. + -- SergioAraujo@stackoverflow + + With multicore systems everywhere GNU Parallel is a must have tool. + -- Neil H. Watson @neil_h_watson@twitter + + My new favourite command line tool is gnu parallel. After knowing it for a while I just recently came back to it for a refactor of a script and now I've changed like 4 different huge scripts into tiny parallel scripts that do their job literally 3 to 10 times faster and just [mind blown] + -- Izzy @angry_izzy@twitter + + I love so much @GnuParallel to parallelize my SQL requests on @PostgreSQL + -- @rmaziere_85 Romain + + Parallel is the BEST command. + -- Nick @NickInfoSec@twitter + + GNU parallel really changed how I do a lot of data processing stuff + -- Brendan Dolan-Gavitt @moyix@twitter + + Parallel is a life send, what an awesome piece of software. + -- Blaze9@reddit.com + + It's really powerful for smallish data processing scripts + -- João Veiga @jcsvveiga@twitter + + It's the MapReduce of our generation! + -- Mathias Meyer @roidrage@twitter + GNU parallel is a seriously powerful flexible and tool. - -- Greg Hurrell @wincent + -- Greg Hurrell @wincent@twitter [socat is] top3 on my "crazy and powerful" list (the other two being gnu parallel and emacs). @@ -47,6 +49,10 @@ It's the MapReduce of our generation! === Used === + It is, beyond absolutely any doubt whatsoever, the single most + important tool I use in making me a productive bioinformatician. + -- A-N-Other@reddit.com + It is SUPER easy to speed up jobs from the command line w/ GNU parallel. -- B3n @B3njaminHimes@twitter diff --git a/doc/release_new_version b/doc/release_new_version index 0f412834..39bb5c04 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -75,6 +75,9 @@ make alphaupload == Update OpenSUSE build system == + +YYYYMMDD=`yyyymmdd` +export YYYYMMDD cd ~/privat/parallel/packager/obs find home:tange/parallel/* -type f | grep -v parallel.spec | parallel -Xj1 osc rm {} @@ -222,9 +225,21 @@ Quote of the month: New in this release: -https://captmeelo.com/pentest/2019/07/29/port-scanning.html -https://linuxreviews.org/GNU_Parallel_Ryugu_released -http://www.7daixie.com/2019071646302396.html +* GNU Parallel will be presented at Driving IT 2019: https://ida.dk/arrangementer-og-kurser/konferencer/driving-it#beskrivelse + +* Linux Productivity Tools https://www.usenix.org/conference/lisa19/presentation/maheshwari + +* Improve your reconnaissance performance by using GNU Parallel https://mailchi.mp/3f46ceb46357/improve-your-reconnaissance-performance-by-using-gnu-parallel + +* Paralel İşler / İşlemler / Programlar Bash’de Nasıl Çalıştırılır? https://kaleinfo.com/2019/07/29/paralel-isler-islemler-programlar-bashde-nasil-calistirilir-2/ + +* Use POLYBAR to change WALLPAPER with GNU Parallel https://www.youtube.com/watch?v=rjYg-b_eiRU + +* Finding the Balance Between Speed & Accuracy During an Internet-wide Port Scanning https://captmeelo.com/pentest/2019/07/29/port-scanning.html + +* GNU Parallel Ryugu released https://linuxreviews.org/GNU_Parallel_Ryugu_released + +* CO2017 - CW1 - Operating Systems & Networks - Shell scripting http://www.7daixie.com/2019071646302396.html * Bug fixes and man page updates. diff --git a/packager/obs/home:tange/parallel/.osc/_files b/packager/obs/home:tange/parallel/.osc/_files index ac1b71a6..a871ac2b 100644 --- a/packager/obs/home:tange/parallel/.osc/_files +++ b/packager/obs/home:tange/parallel/.osc/_files @@ -1,11 +1,6 @@ - - - - - - - - - - + + + + + diff --git a/packager/obs/home:tange/parallel/.osc/parallel.spec b/packager/obs/home:tange/parallel/.osc/parallel.spec index 23c0e7b7..c2414bde 100644 --- a/packager/obs/home:tange/parallel/.osc/parallel.spec +++ b/packager/obs/home:tange/parallel/.osc/parallel.spec @@ -1,7 +1,7 @@ Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20190722 +Version: 20190822 Release: 1.3 License: GPL-3.0-or-later Group: Productivity/File utilities diff --git a/packager/obs/home:tange/parallel/parallel.spec b/packager/obs/home:tange/parallel/parallel.spec index 23c0e7b7..c2414bde 100644 --- a/packager/obs/home:tange/parallel/parallel.spec +++ b/packager/obs/home:tange/parallel/parallel.spec @@ -1,7 +1,7 @@ Summary: Shell tool for executing jobs in parallel Name: parallel -Version: 20190722 +Version: 20190822 Release: 1.3 License: GPL-3.0-or-later Group: Productivity/File utilities diff --git a/src/niceload b/src/niceload index be7f65c7..47f6b7ff 100755 --- a/src/niceload +++ b/src/niceload @@ -23,7 +23,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20190724; +$Global::version = 20190822; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff --git a/src/optional/python/gnuparallel/runwrapper-generator.pl b/src/optional/python/gnuparallel/runwrapper-generator.pl old mode 100644 new mode 100755 index 3c1794f0..6a382621 --- a/src/optional/python/gnuparallel/runwrapper-generator.pl +++ b/src/optional/python/gnuparallel/runwrapper-generator.pl @@ -24,7 +24,7 @@ my %opt = get_options_hash(); # Reserved words in Python: Replace them my %reserved = ("return" => "_return", "0" => "null"); -my @out = <<'_EOS'; +my @out = <<"_EOS"; #!/usr/bin/python3 # Copyright (C) 2019 Ole Tange and Free Software Foundation, Inc. @@ -44,6 +44,9 @@ my @out = <<'_EOS'; # or write to the Free Software Foundation, Inc., 51 Franklin St, # Fifth Floor, Boston, MA 02110-1301 USA +# This file was generated by +# $0 + import subprocess _EOS @@ -66,7 +69,7 @@ push @out, "):\n"; push @out, ' """ Python wrapper for GNU Parallel - Use GNU Parallel options with - replaced with _. + Use GNU Parallel options with "-" replaced with "_". These: diff --git a/src/parallel b/src/parallel index d46384bc..acd28160 100755 --- a/src/parallel +++ b/src/parallel @@ -2048,7 +2048,7 @@ sub check_invalid_option_combinations() { sub init_globals() { # Defaults: - $Global::version = 20190724; + $Global::version = 20190822; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; diff --git a/src/parallel.pod b/src/parallel.pod index 7fd8eb1d..91dec328 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -105,7 +105,7 @@ B: Use B. B: Use B. -=item B<{}> (alpha testing) +=item B<{}> (beta testing) Input line. This replacement string will be replaced by a full line read from the input source. The input source is normally stdin @@ -279,7 +279,7 @@ perl quote a string =item Z<> B (or B) -(alpha testing) +(beta testing) do not quote current replacement string =item Z<> B @@ -824,7 +824,7 @@ B<--group> is the default. Can be reversed with B<-u>. See also: B<--line-buffer> B<--ungroup> -=item B<--group-by> I (beta testing) +=item B<--group-by> I Group input by value. Combined with B<--pipe>/B<--pipepart> B<--group-by> groups lines with the same value into a record. @@ -1244,9 +1244,9 @@ Similar to B<--memfree>. =back -=item B<--line-buffer> (alpha testing) +=item B<--line-buffer> (beta testing) -=item B<--lb> (alpha testing) +=item B<--lb> (beta testing) Buffer output on line basis. B<--group> will keep the output together for a whole job. B<--ungroup> allows output to mixup with half a line @@ -1574,20 +1574,20 @@ on remote computers). Print the number of physical CPU cores and exit. -=item B<--number-of-cores> (alpha testing) +=item B<--number-of-cores> (beta testing) 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). -=item B<--number-of-sockets> (alpha testing) +=item B<--number-of-sockets> (beta testing) 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). -=item B<--number-of-threads> (alpha testing) +=item B<--number-of-threads> (beta testing) Print the number of hyperthreaded CPU cores and exit (used by GNU B itself to determine the number of hyperthreaded CPU cores @@ -1633,9 +1633,9 @@ B<,,>: See also: B<--rpl> B<{= perl expression =}> -=item B<--profile> I (alpha testing) +=item B<--profile> I (beta testing) -=item B<-J> I (alpha testing) +=item B<-J> I (beta testing) Use profile I for options. This is useful if you want to have multiple profiles. You could have one profile for running jobs in @@ -2511,7 +2511,7 @@ to GNU B giving each child its own process group, which is then killed. Process groups are dependant on the tty. -=item B<--tag> (alpha testing) +=item B<--tag> (beta testing) Tag lines with arguments. Each output line will be prepended with the arguments and TAB (\t). When combined with B<--onall> or B<--nonall> @@ -2520,7 +2520,7 @@ the lines will be prepended with the sshlogin instead. B<--tag> is ignored when using B<-u>. -=item B<--tagstring> I (alpha testing) +=item B<--tagstring> I (beta testing) Tag lines with a string. Each output line will be prepended with I and TAB (\t). I can contain replacement strings such as @@ -4773,7 +4773,7 @@ B<--ssh>. It can also be set on a per server basis (see B<--sshlogin>). -=item $PARALLEL_SSHLOGIN (alpha testing) +=item $PARALLEL_SSHLOGIN (beta testing) The environment variable $PARALLEL_SSHLOGIN is set by GNU B and is visible to the jobs started from GNU B. The value is diff --git a/src/parallel_alternatives.pod b/src/parallel_alternatives.pod index 2dd90c6a..24b875b2 100644 --- a/src/parallel_alternatives.pod +++ b/src/parallel_alternatives.pod @@ -62,6 +62,7 @@ B E4. Number of running jobs can depend on number of cpus E5. Finish running jobs, but do not start new jobs after first failure E6. Number of running jobs can be adjusted while running + E7. Only spawn new jobs if load is less than a limit B R1. Jobs can be run on remote computers @@ -91,18 +92,10 @@ parallel: I1 I2 I3 I4 I5 I6 I7 M1 M2 M3 M4 M5 M6 O1 O2 O3 O4 O5 O6 O7 O8 O9 -E1 E2 E3 E4 E5 E6 +E1 E2 E3 E4 E5 E6 E7 R1 R2 R3 R4 R5 R6 R7 R8 R9 S1 S2 -xargs: -I1 I2 - - - - - -- M2 M3 - - - -- O2 O3 - O5 O6 -E1 - - - - - -- - - - - x - - - -- - - find -exec: - - - x - x - - M2 M3 - - - - @@ -119,21 +112,6 @@ E1 - - - E5 - - - - - - - - - - - - -ppss: -I1 I2 - - - - I7 -M1 - M3 - - M6 -O1 - - x - - -E1 E2 ?E3 E4 - - -R1 R2 R3 R4 - - ?R7 ? ? -- - - -pexec: -I1 I2 - I4 I5 - - -M1 - M3 - - M6 -O1 O2 O3 - O5 O6 -E1 - - E4 - E6 -R1 - - - - R6 - - - -S1 - xjobs, prll, dxargs, mdm/middelman, xapply, paexec, ladon, jobflow, ClusterSSH: TODO - Please file a bug-report if you know what features @@ -142,6 +120,14 @@ they support (See REPORTING BUGS). =head2 DIFFERENCES BETWEEN xargs AND GNU Parallel +Summary table (see legend above): +I1 I2 - - - - - +- M2 M3 - - - +- O2 O3 - O5 O6 +E1 - - - - - - +- - - - - x - - - +- - + B offers some of the same possibilities as GNU B. B deals badly with special characters (such as space, \, ' and @@ -255,6 +241,14 @@ https://www.gnu.org/software/make/ (Last checked: 2019-01) =head2 DIFFERENCES BETWEEN ppss AND GNU Parallel +Summary table (see legend above): +I1 I2 - - - - I7 +M1 - M3 - - M6 +O1 - - x - - +E1 E2 ?E3 E4 - - - +R1 R2 R3 R4 - - ?R7 ? ? +- - + B is also a tool for running jobs in parallel. The output of B is status information and thus not useful for @@ -331,6 +325,14 @@ https://github.com/louwrentius/PPSS =head2 DIFFERENCES BETWEEN pexec AND GNU Parallel +Summary table (see legend above): +I1 I2 - I4 I5 - - +M1 - M3 - - M6 +O1 O2 O3 - O5 O6 +E1 - - E4 - E6 - +R1 - - - - R6 - - - +S1 - + B is also a tool for running jobs in parallel. =head3 EXAMPLES FROM pexec MANUAL @@ -2197,6 +2199,33 @@ be cleaned before piping it to the next command. https://github.com/amritb/with-this.git (Last checked: 2019-03) +=head2 DIFFERENCES BETWEEN Tollef's parallel (moreutils) AND GNU Parallel + +Summary table (see legend above): +- - - I4 - - I7 +- - M3 - - M6 +- O2 O3 - O5 O6 - x x +E1 - - - - - E7 +- x x x x x x x x +- - + +=head3 EXAMPLES FROM Tollef's parallel MANUAL + +B parallel sh -c "echo hi; sleep 2; echo bye" -- 1 2 3 + +B parallel "echo hi; sleep 2; echo bye" ::: 1 2 3 + +B parallel -j 3 ufraw -o processed -- *.NEF + +B parallel -j 3 ufraw -o processed ::: *.NEF + +B parallel -j 3 -- ls df "echo hi" + +B parallel -j 3 ::: ls df "echo hi" + +(Last checked: 2019-08) + + =head2 Todo Url for spread diff --git a/src/parallel_design.pod b/src/parallel_design.pod index fce40839..9d31163f 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -2,6 +2,8 @@ =encoding utf8 +options as wrapper scripts + =head1 Design of GNU Parallel This document describes design decisions made in the development of @@ -20,13 +22,28 @@ a single file: No need to mess around with environment variables like PERL5LIB. -=head2 Interpreted language +=head2 Choice of programming language GNU B is designed to be able to run on old systems. That means that it cannot depend on a compiler being installed - and especially not a compiler for a language that is younger than 20 years old. +The goal is that you can use GNU B on any system, even if +you are not allowed to install additional software. + +Of all the systems I have experienced, I have yet to see a system that +had GCC installed that did not have Perl. The same goes for Rust, Go, +Haskell, and other younger languages. I have, however, seen systems +with Perl without any of the mentioned compilers. + +Most modern systems also have either Python2 or Python3 installed, but +you still cannot be certain which version, and since Python2 cannot +run under Python3, Python is not an option. + +Perl has the added benefit that implementing the {= perlexpr =} +replacement string was fairly easy. + =head2 Old Perl style @@ -1115,6 +1132,26 @@ the whole output of a single job and save it as csv/tsv or SQL. =back +=head2 Argument separators ::: :::: :::+ ::::+ + +The argument separator B<:::> was chosen because I have never seen B<:::> +used in any command. The natural choice B<--> would be a bad idea since +it is not unlikely that the template command will contain B<-->. I have +seen B<::> used in programming languanges to separate classes, and I +did not want the user to be confused that the separator had anything +to do with classes. + + +B<:::> also makes a visual separation, which is good if there are +multiple B<:::>. + +When B<:::> was chosen, B<::::> came as a fairly natural extension. + +Linking input sources meant having to decide for some way to indicate +linking of B<:::> and B<::::>. B<:::+> and B<::::+> was chosen, so +that they were similar to B<:::> and B<::::>. + + =head2 Perl replacement strings, {= =}, and --rpl The shorthands for replacement strings make a command look more @@ -1131,14 +1168,14 @@ again, the user may want to make his own shorthand for it. This is what B<--rpl> is for. It works so well, that even GNU B's own shorthands are implemented using B<--rpl>. -In Perl code the bigrams {= and =} rarely exist. They look like a +In Perl code the bigrams B<{=> and B<=}> rarely exist. They look like a matching pair and can be entered on all keyboards. This made them good candidates for enclosing the Perl expression in the replacement strings. Another candidate ,, and ,, was rejected because they do not look like a matching pair. B<--parens> was made, so that the users can still use ,, and ,, if they like: B<--parens ,,,,> -Internally, however, the {= and =} are replaced by \257< and +Internally, however, the B<{=> and B<=}> are replaced by \257< and \257>. This is to make it simpler to make regular expressions. You only need to look one character ahead, and never have to look behind. diff --git a/src/sql b/src/sql index 927b7ee5..756e6d84 100755 --- a/src/sql +++ b/src/sql @@ -574,7 +574,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20190724; + $Global::version = 20190822; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index 805fda68..bbab03e7 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -10,7 +10,7 @@ MAXTIME=50 RETRIES=3 MAXPROC=100 MAXINNERPROC=3 < dragonfly < vax < minix -< hurd +32,33d20 < beaglebone < cubieboard2 ### Copy commands to servers @@ -36,7 +36,7 @@ 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 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 @@ -60,7 +60,7 @@ 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 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 @@ -84,7 +84,7 @@ 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 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 @@ -108,7 +108,7 @@ 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 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 @@ -132,7 +132,7 @@ 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 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 @@ -156,7 +156,7 @@ 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 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 @@ -180,7 +180,7 @@ 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 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 @@ -204,7 +204,7 @@ 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 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 @@ -228,7 +228,7 @@ 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 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 @@ -252,7 +252,7 @@ bin/env_parallel.pdksh redhat copy redhat bin/env_parallel.pdksh env_parallel.pd 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 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 @@ -276,7 +276,7 @@ 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 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 @@ -300,7 +300,7 @@ 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 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 @@ -324,7 +324,7 @@ 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 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 @@ -348,7 +348,7 @@ 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 hurd copy hurd bin/parcat parcat bin/parcat minix copy minix bin/parcat parcat Done copying @@ -365,6 +365,7 @@ debian Works on debian debian-ppc Works on debian-ppc freebsd Works on freebsd.polarhome.com hpux Works on hpux64 +hurd Works on hurd macosx Works on macosx.polarhome.com mandriva Works on mandriva.polarhome.com miros Works on miros.polarhome.com @@ -405,6 +406,8 @@ hpux 1 hpux 1 hpux-ia64 1 hpux-ia64 1 +hurd 1 +hurd 1 macosx 1 macosx 2 mandriva 1 @@ -451,6 +454,8 @@ debian-ppc 1 debian-ppc 1 freebsd 1 freebsd 1 +hurd 1 +hurd 1 hpux 1 hpux 1 hpux-ia64 2 @@ -511,6 +516,8 @@ debian-ppc Error in tempfile() using template /XXXXXXXX.arg: Could not create te debian-ppc OK readonly tmp freebsd Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at ~/bin/parallel line 0000. freebsd OK readonly tmp +hurd Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at ~/bin/parallel line 0000. +hurd OK readonly tmp hpux Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at ~/bin/parallel line 0000 hpux OK readonly tmp hpux-ia64 Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable @@ -580,6 +587,8 @@ debian-ppc bash only A debian-ppc test funcA freebsd Syntax error: "(" unexpected (expecting word) freebsd test funcA +hurd bash only A +hurd test funcA hpux bash only A hpux test funcA hpux-ia64 bash only A @@ -650,6 +659,8 @@ debian-ppc test funcB debian-ppc bash only B freebsd test funcB freebsd bash only B +hurd test funcB +hurd bash only B hpux test funcB hpux bash only B hpux-ia64 test funcB @@ -754,6 +765,17 @@ freebsd ~/.profile freebsd ~/.cshrc freebsd ~/.tcshrc freebsd install-OK +hurd Installed env_parallel in: +hurd ~/.bashrc +hurd ~/.shrc +hurd ~/.zshenv +hurd ~/.config/fish/config.fish +hurd ~/.kshrc +hurd ~/.mkshrc +hurd ~/.profile +hurd ~/.cshrc +hurd ~/.tcshrc +hurd install-OK hpux Installed env_parallel in: hpux ~/.bashrc hpux ~/.shrc @@ -978,6 +1000,7 @@ centos env_parallel run-OK debian env_parallel run-OK debian-ppc env_parallel run-OK freebsd env_parallel run-OK +hurd env_parallel run-OK hpux env_parallel run-OK hpux-ia64 env_parallel run-OK macosx env_parallel run-OK @@ -1018,6 +1041,7 @@ 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) +hurd reading from process substitution OK hpux reading from process substitution OK hpux-ia64 reading from process substitution OK macosx reading from process substitution OK @@ -1067,6 +1091,8 @@ 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 +hurd ### Test if empty command name in process list causes problems +hurd 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 @@ -1123,6 +1149,7 @@ 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 eval: 1: Syntax error: word unexpected (expecting ")") +hurd 1 2 1 2 3 1 2 3 4 hpux hpux-ia64 1 2 1 2 3 1 2 3 4 macosx 1 2 1 2 3 1 2 3 4 @@ -1151,6 +1178,7 @@ centos 2 2 3 2 3 4 debian 2 2 3 2 3 4 debian-ppc 2 2 3 2 3 4 freebsd eval: 1: Syntax error: word unexpected (expecting ")") +hurd 2 2 3 2 3 4 hpux hpux-ia64 1 2 1 2 1 2 macosx 2 2 3 2 3 4 @@ -1194,6 +1222,7 @@ 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 1 2,1 2 3,1 2 3 4 +hurd 1 2,1 2 3,1 2 3 4 hpux ,, hpux-ia64 1 2,1 2 3,1 2 3 4 macosx 1 2,1 2 3,1 2 3 4 @@ -1224,6 +1253,7 @@ debian-ppc 2,2 3,2 3 4 freebsd 2,2 3,2 3 4 hpux ,, hpux-ia64 1 2,1 2,1 2 +hurd 2,2 3,2 3 4 macosx 2,2 3,2 3 4 mandriva 2,2 3,2 3 4 miros 1 2,1 2,1 2