Released as 20240822 ('Southport')

This commit is contained in:
Ole Tange 2024-08-21 22:14:24 +02:00
parent 05ec7b93f4
commit 1daaf604c7
45 changed files with 257 additions and 775 deletions

View file

@ -19,7 +19,7 @@ torresults:
torsync:
torsocks rsync -Hazv --exclude='*.{pdf,gz,bz2,html,deb}' --exclude authorized_keys --exclude .vagrant/ --exclude actual-results --delete ./ tortest:privat/parallel/
torsocks rsync -Hazv --exclude='*.{pdf,gz,bz2,html,deb}' --exclude authorized_keys --exclude .vagrant/ --exclude actual-results --exclude '*hwdep*' --delete ./ tortest:privat/parallel/
make tortest
web:

View file

@ -787,7 +787,7 @@ torresults:
torsocks rsync -Hazv --progress tortest:privat/parallel/testsuite/actual-results/ testsuite/actual-results/
torsync:
torsocks rsync -Hazv --exclude='*.{pdf,gz,bz2,html,deb}' --exclude authorized_keys --exclude .vagrant/ --exclude actual-results --delete ./ tortest:privat/parallel/
torsocks rsync -Hazv --exclude='*.{pdf,gz,bz2,html,deb}' --exclude authorized_keys --exclude .vagrant/ --exclude actual-results --exclude '*hwdep*' --delete ./ tortest:privat/parallel/
make tortest
web:

16
NEWS
View file

@ -6,8 +6,22 @@ New in this release:
* {:%fmt} Use printf formatting of replacement strings.
* Bug fixes and man page updates.
News about GNU Parallel:
* Powerful GNU parallel, more than a loop
https://www.linkedin.com/pulse/powerful-gnu-parallel-more-than-loop-zhenguo-zhang-18dxc
* How To Increase File Transfer Speed Using Parallel Rsync?
https://contentbase.com/blog/increase-file-transfer-speed-parallel-rsync/
* Converting WebP Images to PNG Using parallel and dwebp
https://bytefreaks.net/2024/07/27
* Turbocharging the Box CLI with GNU Parallel
https://medium.com/box-developer-blog/turbocharging-the-box-cli-with-gnu-parallel-ee44c48811c0
<<>>
20240722

24
README
View file

@ -57,11 +57,11 @@ document.
Full installation of GNU Parallel is as simple as:
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2.sig
gpg parallel-20240722.tar.bz2.sig
bzip2 -dc parallel-20240722.tar.bz2 | tar xvf -
cd parallel-20240722
wget https://ftpmirror.gnu.org/parallel/parallel-20240822.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20240822.tar.bz2.sig
gpg parallel-20240822.tar.bz2.sig
bzip2 -dc parallel-20240822.tar.bz2 | tar xvf -
cd parallel-20240822
./configure && make && sudo make install
@ -70,11 +70,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-20240722.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20240722.tar.bz2.sig
gpg parallel-20240722.tar.bz2.sig
bzip2 -dc parallel-20240722.tar.bz2 | tar xvf -
cd parallel-20240722
wget https://ftpmirror.gnu.org/parallel/parallel-20240822.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20240822.tar.bz2.sig
gpg parallel-20240822.tar.bz2.sig
bzip2 -dc parallel-20240822.tar.bz2 | tar xvf -
cd parallel-20240822
./configure --prefix=$HOME && make && make install
Or if your system lacks 'make' you can simply copy src/parallel
@ -122,8 +122,8 @@ will love you for it.
When using programs that use GNU Parallel to process data for
publication please cite:
Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').
Zenodo. https://doi.org/10.5281/zenodo.12789352
Tange, O. (2024, August 22). GNU Parallel 20240822 ('Southport').
Zenodo. https://doi.org/10.5281/zenodo.13357237
Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free
Software Foundation, Inc.

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for parallel 20240722.
# Generated by GNU Autoconf 2.71 for parallel 20240822.
#
# Report bugs to <bug-parallel@gnu.org>.
#
@ -610,8 +610,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel'
PACKAGE_VERSION='20240722'
PACKAGE_STRING='parallel 20240722'
PACKAGE_VERSION='20240822'
PACKAGE_STRING='parallel 20240822'
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
PACKAGE_URL=''
@ -1246,7 +1246,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 20240722 to adapt to many kinds of systems.
\`configure' configures parallel 20240822 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1313,7 +1313,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of parallel 20240722:";;
short | recursive ) echo "Configuration of parallel 20240822:";;
esac
cat <<\_ACEOF
@ -1390,7 +1390,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
parallel configure 20240722
parallel configure 20240822
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@ -1427,7 +1427,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 20240722, which was
It was created by parallel $as_me 20240822, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@ -2379,7 +2379,7 @@ fi
# Define the identity of the package.
PACKAGE='parallel'
VERSION='20240722'
VERSION='20240822'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@ -3026,7 +3026,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 20240722, which was
This file was extended by parallel $as_me 20240822, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -3090,7 +3090,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
parallel config.status 20240722
parallel config.status 20240822
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"

View file

@ -1,4 +1,4 @@
AC_INIT([parallel],[20240722],[bug-parallel@gnu.org])
AC_INIT([parallel],[20240822],[bug-parallel@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([

View file

@ -4,10 +4,6 @@
Quote of the month:
honestly the coolest software i've ever seen gotta be gnu parallel or
ffmpeg, nothing like them
-- @scootykins scoot
Recently executed a flawless live data migration of ~2.4pb using GNU parallel for scale and bash scripts.
-- @mechanicker@twitter Dhruva
@ -231,6 +227,10 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
=== Used ===
honestly the coolest software i've ever seen gotta be gnu parallel or
ffmpeg, nothing like them
-- @scootykins scoot
parallel is frickin great for launching jobs on multiple
machines. Ansible and Jenkins and others may be good too but I was
able to jump right in with parallel.

View file

@ -268,35 +268,34 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20240822 ('Bangladesh/Southport/<<>>') released <<[stable]>>
Subject: GNU Parallel 20240822 ('Southport') released
GNU Parallel 20240822 ('<<>>') has been released. It is available for download at: lbry://@GnuParallel:4
GNU Parallel 20240822 ('Southport') has been released. It is available for download at: lbry://@GnuParallel:4
Quote of the month:
<<>>
honestly the coolest software i've ever seen gotta be gnu parallel or
ffmpeg, nothing like them
-- @scootykins scoot
New in this release:
* A format string can be added to replacement strings: {#:%04d}
* --match Match input source with regexp to set replacement fields.
<<>>
<<* No new features. This is a candidate for a stable release.>>
* {:%fmt} Use printf formatting of replacement strings.
* Bug fixes and man page updates.
News about GNU Parallel:
https://www.linkedin.com/pulse/powerful-gnu-parallel-more-than-loop-zhenguo-zhang-18dxc
* Powerful GNU parallel, more than a loop https://www.linkedin.com/pulse/powerful-gnu-parallel-more-than-loop-zhenguo-zhang-18dxc
https://contentbase.com/blog/increase-file-transfer-speed-parallel-rsync/
* How To Increase File Transfer Speed Using Parallel Rsync? https://contentbase.com/blog/increase-file-transfer-speed-parallel-rsync/
https://bytefreaks.net/2024/07/27
* Converting WebP Images to PNG Using parallel and dwebp https://bytefreaks.net/2024/07/27
https://medium.com/box-developer-blog/turbocharging-the-box-cli-with-gnu-parallel-ee44c48811c0
<<>>
* Turbocharging the Box CLI with GNU Parallel https://medium.com/box-developer-blog/turbocharging-the-box-cli-with-gnu-parallel-ee44c48811c0
GNU Parallel - For people who live life in the parallel lane.

View file

@ -1,8 +1,8 @@
<directory name="parallel" rev="390" vrev="2" srcmd5="491dbee376ddabe7e9acf3e6dd268f7b">
<directory name="parallel" rev="392" vrev="3" srcmd5="b0ed240db642f9220a259b0d40632326">
<entry name="Makefile" md5="a165cdcca90c744dc5a5b17cde72ad8e" size="1182" mtime="1698101769" />
<entry name="PKGBUILD" md5="16b2780a64ee18b0df1060680cec804c" size="714" mtime="1721531636" />
<entry name="parallel-20240722.tar.bz2" md5="e6bdcd2fa790b2096665ed05850bbe53" size="2617438" mtime="1721531681" />
<entry name="parallel.spec" md5="d49c3a3bd1906e68ad98cf2377b3d8ea" size="6224" mtime="1721531682" />
<entry name="parallel_20240722.dsc" md5="13bb25db4380d128d45b57f95d1422e0" size="556" mtime="1721531683" />
<entry name="parallel_20240722.tar.gz" md5="0229f60e3fe8aabc84dd7a908ff6bb11" size="2883193" mtime="1721531695" />
<entry name="PKGBUILD" md5="dbc43c26061f9b183f43ac780643b362" size="714" mtime="1724271991" />
<entry name="parallel-20240822.tar.bz2" md5="150250ba8a27dc86cab7cb9b56bca9e5" size="2682765" mtime="1724271991" />
<entry name="parallel.spec" md5="ff9ea031c93efd66356306d83723efcd" size="6224" mtime="1724271499" />
<entry name="parallel_20240822.dsc" md5="78549c2818624964438c8c3c6cc1fce4" size="556" mtime="1724271499" />
<entry name="parallel_20240822.tar.gz" md5="1c4351c72c29614d1c2fa1402715956b" size="2931682" mtime="1724271992" />
</directory>

View file

@ -1,7 +1,7 @@
Summary: Shell tool for executing jobs in parallel
Name: parallel
Version: 20240722
Version: 20240822
Release: 2.1
License: GPL-3.0-or-later
Group: Productivity/File utilities

View file

@ -601,7 +601,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

@ -605,7 +605,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

@ -601,7 +601,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

@ -601,7 +601,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

@ -570,7 +570,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

@ -384,7 +384,7 @@ B<--session> is supported.
=back
=head2 fish (alpha testing)
=head2 fish (beta testing)
=head3 Installation

View file

@ -601,7 +601,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

@ -601,7 +601,7 @@ _parset_main() {
fi
if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006
echo "parset 20240723 (GNU parallel `parallel --minversion 1`)"
echo "parset 20240822 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>"

View file

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

View file

@ -2798,7 +2798,7 @@ sub check_invalid_option_combinations() {
sub init_globals() {
# Defaults:
$Global::version = 20240808;
$Global::version = 20240822;
$Global::progname = 'parallel';
$::name = "GNU Parallel";
$Global::infinity = 2**31;
@ -3806,7 +3806,7 @@ sub pQ($) {
}
sub unquote_printf() {
# Convert \t \n \r \000 \0
# Convert \t \n \r \xFF \000 \0
# Inputs:
# $string = string with \t \n \r \num \0
# Returns:
@ -3815,7 +3815,11 @@ sub unquote_printf() {
s/\\t/\t/g;
s/\\n/\n/g;
s/\\r/\r/g;
# Hex: \xFF
s/\\x([0-9a-fA-F]+)/eval 'sprintf "\\x'.$1.'"'/ge;
# Octal: \007
s/\\(\d\d\d)/eval 'sprintf "\\'.$1.'"'/ge;
# Single digit octal: \7
s/\\(\d)/eval 'sprintf "\\'.$1.'"'/ge;
return $_;
}
@ -5852,8 +5856,8 @@ sub usage() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
" Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').",
" Zenodo. https://doi.org/10.5281/zenodo.12789352",
" Tange, O. (2024, August 22). GNU Parallel 20240822 ('Southport').",
" Zenodo. https://doi.org/10.5281/zenodo.13357237",
"",
# Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice
@ -5885,8 +5889,8 @@ sub citation_notice() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
" Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').",
" Zenodo. https://doi.org/10.5281/zenodo.12789352",
" Tange, O. (2024, August 22). GNU Parallel 20240822 ('Southport').",
" Zenodo. https://doi.org/10.5281/zenodo.13357237",
"",
# Before changing these line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and
@ -6012,20 +6016,20 @@ sub citation() {
"If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:",
"",
"\@software{tange_2024_12789352,",
"\@software{tange_2024_13357237,",
" author = {Tange, Ole},",
" title = {GNU Parallel 20240722 ('Assange')},",
" month = Jul,",
" title = {GNU Parallel 20240822 ('Southport')},",
" month = Aug,",
" year = 2023,",
" note = {{GNU Parallel is a general parallelizer to run",
" multiple serial command line programs in parallel",
" without changing them.}},",
" publisher = {Zenodo},",
" doi = {10.5281/zenodo.12789352},",
" url = {https://doi.org/10.5281/zenodo.12789352}",
" doi = {10.5281/zenodo.13357237},",
" url = {https://doi.org/10.5281/zenodo.13357237}",
"}",
"",
"(Feel free to use \\nocite{tange_2024_12789352})",
"(Feel free to use \\nocite{tange_2024_13357237})",
"",
# Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and

View file

@ -861,7 +861,7 @@ B<--trim n>.
I<regexp> is a Perl Regular Expression:
https://perldoc.perl.org/perlre.html
See also: B<--csv> B<{>I<n>B<}> B<--trim> B<--link>
See also: B<--csv> B<{>I<n>B<}> B<--trim> B<--link> B<--match>
=item B<--combineexec> I<name>
@ -942,7 +942,7 @@ See also: B<--compress>
Treat input as CSV-format.
B<--colsep> sets the field delimiter. It works very much like
B<--colsep> sets the field delimiter. B<--csv> works very much like
B<--colsep> except it deals correctly with quoting. Compare:
echo '"1 big, 2 small","2""x4"" plank",12.34' |
@ -957,9 +957,9 @@ Even quoted newlines are parsed correctly:
echo 'Line 2 in field 1";value 2') |
parallel --csv --colsep ';' echo Field 1: {1} Field 2: {2}
When used with B<--pipe> only pass full CSV-records.
When used with B<--pipe> it will only pass full CSV-records.
See also: B<--pipe> B<--link> B<{>I<n>B<}> B<--colsep> B<--header>
See also: B<--pipe> B<--link> B<{>I<n>B<}> B<--colsep> B<--header> B<--match>
=item B<--ctag> (obsolete: use B<--color> B<--tag>)
@ -1000,10 +1000,10 @@ See also: TIME POSTFIXES B<--retries> B<--ssh-delay>
=item B<-d> I<delim>
Input items are terminated by I<delim>.
Input records are terminated by I<delim>.
The specified delimiter may be characters, C-style character escapes
such as \n, or octal or hexadecimal escape codes. Octal and
such as \n, or octal (\012) or hexadecimal (\x0A) escape codes. Octal and
hexadecimal escape codes are understood as for the printf command.
See also: B<--colsep>
@ -1800,9 +1800,13 @@ See also: B<-X> B<--xargs>
Match input source with regexp to set replacement fields.
Each capture group i.e. '(...)' can be accessed with a replacement
field. The replacement fields are named B<{m.n}> where m is the input
source and n is the capture group number:
With B<--match> you can often avoid pre-processing your input with
B<awk> or similar to extract the relevant fields.
You can access each capture group i.e. the parenthesis in regexp
'(...)' with a replacement field. The replacement fields are named
B<{m.n}> where m is the input source and n is the capture group
number:
parallel --match '(.*),(.*)_(.*)' echo {1.2} {1.3} {1.1} \
::: Gold,Heart_of
@ -1821,7 +1825,7 @@ input source 1:
parallel --match '' --match '([a-z]+)' echo {1} {2.1} \
::: Telephone ::: 10sanitizer
See also: B<{>I<n>B<}>
See also: B<{>I<n>B<}> B<--colsep>
=item B<--memfree> I<size>

View file

@ -178,6 +178,10 @@ You have a bunch of file. You want them sorted into dirs. The dir of
each file should be named the first letter of the file name.
parallel 'mkdir -p {=s/(.).*/$1/=}; mv {} {=s/(.).*/$1/=}' ::: *
In practice you would probably not use a perl replacement string but
instead B<--match>:
parallel --match '(.)' 'mkdir -p {1.1} && mv {} {1.1}' ::: *
@ -199,15 +203,21 @@ Match first initial and last name:
Re-arrange (stupid) US date format into (nice) ISO-8601:
parallel --match '(.*)/(.*)/(.*)' echo {1.3}-{1.1}-{1.2} \
::: 12/31/1969 01/19/2038 06/01/2002
parallel --match '(.*)/(.*)/(.*)' echo {1.3}-{1.1:%02d}-{1.2:%02d} \
::: 12/31/1969 1/19/2038 6/1/2002
Match url into domain and path:
parallel --match 'https://(.*?)/(.*)' echo Domain: {1.1} Path: {1.2} \
::: https://example.com/dir/page https://gnu.org/s/parallel
Match host:port from a log file:
Get URLs into dirs named by 2nd level domain name,
e.g. https://www.gnu.org/s/parallel will be put into the dir gnu.org.
cat urls | parallel --match '//[^/]*?([^/.]+\.[^/.]+)/' \
'mkdir -p {1.1} && cd {1.1} && wget {}'
Match host.domain:port from a log file:
cat log |
parallel --match '\b([a-z0-9.]+):(\d+)\b' echo host:{1.1} port:{1.2}
@ -241,6 +251,40 @@ Make an international dialing prefix table:
Note how input source 2 reuses the B<--match> from input source 1.
=head2 EXAMPLE: Replacement fields from CSV file with headers
This is an advanced example. You have:
Date;Name;Location
3/8/1978;"Beeblebrox; Zaphod";"Betelgeuse V"
10/12/1979;"Dent; Arthur";Earth
1/5/1981;Slartibartfast;Magrathea
You want:
Z. Beeblebrox: 1978-03-08/BET
A. Dent: 1979-10-12/EAR
Slartibartfast: 1981-01-05/MAG
Run:
parallel --csv --colsep ';' --header : --match "(\d+)/(\d+)/(\d+)" \
--match "^([^;]+)(; (.))?" --match "(...)" \
echo '{=Name.3 s/(.)/$1. /;=}'{Name.1}: \
{Date.3}-{Date.1:%02d}-{Date.2:%02d}/'{=Location.1 $_=uc =}' \
:::: people.csv
B<--csv> parses the input as CSV with B<--colsep ;> as the separator -
dealing correctly with quoted strings. The input is split into 3
columns. B<--header :> makes the columns available as
B<{>I<columnname>B<}>. Each column has their corresponding B<--match>
so each field can be accessed as
B<{>I<columnname>.I<#>B<}>. B<s/(.)/$1. /> is a perl expression that
appends ". " if the name has an initial. B<:%02d> formats single
digits as two digits. B<uc> upper cases the argument.
=head2 EXAMPLE: Calling Bash functions
If the composed command is longer than a line, it becomes hard to
@ -371,6 +415,10 @@ If the barcode does not contain '_R1', you can do:
parallel --plus myprocess {} {/_R1/_R2} ::: *_R1.fq.gz
Or you can use B<--match>:
parallel --match '(.*)_R1(.*)' myprocess {} {1.1}_R2{1.2} ::: *_R1.fq.gz
=head2 EXAMPLE: Removing strings from the argument
@ -393,6 +441,10 @@ To remove a string anywhere you can use regular expressions with
parallel --plus echo {/demo_/} ::: demo_mycode remove_demo_here
You can often also use B<--match>:
parallel --match '(.*)demo_(.*)' echo {1.1}{1.2} ::: demo_mycode remove_demo_here
=head2 EXAMPLE: Download 24 images for each of the past 30 days
@ -482,6 +534,7 @@ downloads 10 videos in parallel.
B<{=> and B<=}> mark a perl expression. B<pQ> perl-quotes the
string. B<date +%FT%T> is the date in ISO8601 with time.
=head2 EXAMPLE: Save output in ISO8601 dirs
Save output from B<ps aux> every second into dirs named

View file

@ -137,7 +137,7 @@ GetOptions(
"help" => \$opt::dummy,
) || exit(255);
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
$Global::version = 20240723;
$Global::version = 20240822;
if($opt::version) { version(); exit 0; }
# Remove -D and --parallel=N
my @s = (grep { ! /^-D$|^--parallel=\S+$/ }

View file

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

View file

@ -10,14 +10,21 @@ install_packages() {
INSTALL=${INSTALL:-"sudo apt -y install"}
# The testsuite depends on this:
test_pkgs="imagemagick expect autossh sshpass jq libpod-simple-perl"
test_pkgs="$test_pkgs pod2pdf gawk lua5.3 clisp php-cli nodejs"
test_pkgs="$test_pkgs mono-csharp-shell libevent-dev tcl libtext-csv-perl"
test_pkgs="imagemagick expect pv zenity"
test_pkgs="$test_pkgs autossh sshpass lsh-client lsh-utils jq"
test_pkgs="$test_pkgs libpod-simple-perl libtext-csv-perl"
test_pkgs="$test_pkgs libtest-nowarnings-perl pod2pdf"
test_pkgs="$test_pkgs xemacs21"
test_pkgs="$test_pkgs gawk lua5.3 clisp php-cli nodejs guile-3.0 fsharp"
test_pkgs="$test_pkgs mono-csharp-shell octave openjdk-11-jdk-headless tcl"
test_pkgs="$test_pkgs racket libevent-dev python-is-python3"
test_pkgs="$test_pkgs xterm libc6-i386 libcrypt1:i386 virtualbox"
test_pkgs="$test_pkgs libtest-nowarnings-perl xemacs21 pv zenity"
test_pkgs="$test_pkgs lsh-client lsh-utils torsocks net-tools python-is-python3"
test_pkgs="$test_pkgs reiserfsprogs btrfs-progs exfatprogs f2fs-tools xfsprogs"
test_pkgs="$test_pkgs torsocks net-tools"
test_pkgs="$test_pkgs reiserfsprogs btrfs-progs exfatprogs f2fs-tools"
test_pkgs="$test_pkgs xfsprogs"
test_snap_pkgs="groovy julia"
# Debian package
packaging_pkgs="dpkg-dev build-essential debhelper osc cvs automake"
packaging_pkgs="$packaging_pkgs python3-m2crypto alien python3-pip"
@ -30,14 +37,14 @@ install_packages() {
sql_pkgs="$sql_pkgs libdbd-mysql-perl rlwrap"
# Compression
compression_pkgs="zstd clzip liblz4-tool lzop pigz pixz gzip plzip pbzip2"
compression_pkgs="zstd clzip lz4 lzop pigz pixz gzip plzip pbzip2"
compression_pkgs="$compression_pkgs lzma xz-utils lzip bzip2 lbzip2 lrzip"
compression_pkgs_missing="pxz"
# Shells
# (csh = bsd-csh that is broken)
# (ksh93 gone)
shell_pkgs="ash dash fdclone fish fizsh ksh ksh93u+m mksh posh rc rush sash"
# (ash ksh93 gone)
shell_pkgs="dash fdclone fish fizsh ksh ksh93u+m mksh posh rc rush sash"
shell_pkgs="$shell_pkgs tcsh yash zsh busybox-static"
# Databases
@ -59,6 +66,13 @@ install_packages() {
echo Packages missing
return 1
fi
if sudo parallel -j1 snap install --classic ::: $test_snap_pkgs; then
# OK
true
else
echo Packages missing: $test_snap_pkgs
return 1
fi
if parallel -j1 --tag --halt now,success=1 $INSTALL ::: $alt_database ; then
# OK
true
@ -85,7 +99,11 @@ install_sqlite2() {
cd /tmp/sqlite2
git clone https://github.com/sqlite/sqlite
cd sqlite
git checkout a2cfd57491ca357eda2a206cbcd94c6e6c7d7d93
git checkout cc83b6e071ba69943f175a038d2625ae3d6abf47
# New GCC needs <stdlib.h>, so add that
perl -i -pe \
's/echo (.#include <stdio.h>)(.)/printf $1\\n#include <stdlib.h>\\n$2/' \
Makefile.in
./configure --prefix=/usr/local && make -j && sudo make install
}
@ -276,7 +294,7 @@ add_server_to_hosts() {
}
vagrant_up() {
parallel -j0 --ll --tag 'cd {};vagrant up' ::: vagrant/*/*
parallel -j0 --ll --tag 'cd {//};vagrant up' ::: vagrant/*/*/Vagrantfile
# After this you should be able to 'vagrant ssh'
}
@ -347,9 +365,9 @@ add_key_to_auth_key() {
cat ~/.ssh/*pub >> ~/.ssh/authorized_keys
parallel --tag --timeout 20 sshaddvagrant ::: $vagrant_names parallel-server{1..4}
parallel --tag --timeout 20 sshaddlocal ::: $ips lo localhost
parallel --tag --timeout 5 ssh vagrant@{} echo OK ::: $vagrant_names parallel-server{1..4}
parallel --tag --timeout 5 ssh vagrant@{} echo ssh vagrant@{} OK ::: $vagrant_names parallel-server{1..4}
parallel ssh vagrant@{} 'echo "PATH=\$PATH:\$HOME/bin" >> .bashrc' ::: $vagrant_names
parallel --tag --timeout 5 ssh {} echo OK ::: $ips lo localhost
parallel --tag --timeout 5 ssh {} echo ssh {} OK ::: $ips lo localhost
}
install_rsync_on_vagrant() {
@ -657,6 +675,8 @@ rsync_versions() {
autoreconf -fiv
# strlcat strlcpy
perl -i -pe 's/void (strlc..)/void _$1/' util.c
# Force FNM_CASEFOLD to be set
export CFLAGS='-Wno-incompatible-pointer-types -D_GNU_SOURCE=1'
configure_make_proto_install $1
}
build-v3.0.0() {
@ -687,7 +707,7 @@ rsync_versions() {
install_tangetools() {
(
git clone https://codeberg.org/tange/tangetools
git clone https://git.data.coop/tange/tangetools
cd tangetools &&
make &&
sudo make install

View file

@ -5,7 +5,7 @@
# Jobs that depend on the hardware
# (e.g number of CPU threads, terminal type)
par__environment_too_big_ash() {
par__environment_too_big_dash() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_var=60
@ -17,7 +17,7 @@ par__environment_too_big_ash() {
len_fun_quote=1
len_fun_quote_remote=1
. `which env_parallel.ash`;
. `which env_parallel.dash`;
repeat() {
# Repeat input string n*1000 times
@ -72,7 +72,7 @@ par__environment_too_big_ash() {
bigfunc() { true; }
_EOF
)
stdout ssh ash@lo "$myscript" | perl -pe 's/(\d)\d\d\d\d/${1}XXXX/g'
stdout ssh dash@lo "$myscript" | perl -pe 's/(\d)\d\d\d\d/${1}XXXX/g'
}
par__environment_too_big_dash() {

View file

@ -16,6 +16,20 @@ 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}
par_parcat_args_stdin() {
echo 'bug #51690: parcat: read args from stdin'
# parcat reads files line by line
# so this does not work if TMPDIR contains \n
TMPDIR='/tmp/Y/ </i'
mkdir -p "$TMPDIR"
tmp1=$(mktemp)
tmp2=$(mktemp)
echo OK1 > "$tmp1"
echo OK2 > "$tmp2"
(echo "$tmp1"; echo "$tmp2") | parcat | sort
rm "$tmp1" "$tmp2"
}
par_--rpl_group_bug() {
echo 'Bug in --rpl group: $$1_'
parallel --rpl '{a(.)b} s/$$1_c/o/g' echo {aDb} ::: GD_cD_cd
@ -806,20 +820,6 @@ par_X_eta_div_zero() {
perl -ne '/../ and print'
}
par_parcat_args_stdin() {
echo 'bug #51690: parcat: read args from stdin'
# parcat reads files line by line
# so this does not work if TMPDIR contains \n
TMPDIR='/tmp/Y/ </i'
mkdir -p "$TMPDIR"
tmp1=$(mktemp)
tmp2=$(mktemp)
echo OK1 > "$tmp1"
echo OK2 > "$tmp2"
(echo "$tmp1"; echo "$tmp2") | parcat | sort
rm "$tmp1" "$tmp2"
}
par_parcat_rm() {
echo 'bug #51691: parcat --rm remove fifo when opened'
tmp1=$(mktemp)

View file

@ -665,7 +665,7 @@ par_shellquote() {
"$shell" -c perl\ -e\ \'print\ pack\(\"c\*\",1..255\)\'\ \|\ parallel\ -0\ --shellquote
}
export -f doit
parallel --tag -q -k doit {} ::: ash bash csh dash fish fizsh ksh2020 ksh93 lksh mksh posh rzsh sash sh static-sh tcsh yash zsh csh tcsh
parallel --tag -q -k doit {} ::: bash csh dash fish fizsh ksh2020 ksh93 lksh mksh posh rzsh sash sh static-sh tcsh yash zsh csh tcsh
}
par_tmp_full() {

View file

@ -433,7 +433,7 @@ par_testquote() {
export -f testquote
# "sash script" does not work
# "sash -f script" does, but is currently not supported by GNU Parallel
parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh "sash -f" sh static-sh tcsh yash zsh
parallel --tag -k testquote ::: bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh "sash -f" sh static-sh tcsh yash zsh
# "fdsh" is currently not supported by GNU Parallel:
# It gives ioctl(): Interrupted system call
parallel --tag -k testquote ::: fdsh

View file

@ -290,7 +290,7 @@ par_exit_code() {
echo '# Ideally the command should return the same'
echo '# with or without parallel'
# These give the same exit code prepended with 'true;' or not
OK="ash csh dash fish fizsh ksh2020 posh rc sash sh tcsh"
OK="csh dash fish fizsh ksh2020 posh rc sash sh tcsh"
# These do not give the same exit code prepended with 'true;' or not
BAD="bash ksh93 mksh static-sh yash zsh"
doit $OK $BAD
@ -530,7 +530,7 @@ par_memfree() {
par_test_detected_shell() {
echo '### bug #42913: Dont use $SHELL but the shell currently running'
shells="ash bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh"
shells="bash csh dash fish fizsh ksh ksh93 mksh posh rbash rush rzsh sash sh static-sh tcsh yash zsh"
test_unknown_shell() {
shell="$1"
tmp="/tmp/test_unknown_shell_$shell"

View file

@ -84,7 +84,7 @@ par_warn_when_exporting_func() {
PARALLEL_SHELL=$1 parallel --env myfunc -S lo myfunc ::: OK
}
export -f myrun
parallel -k --tag myrun ::: /bin/{sh,bash} /usr/bin/{ash,csh,dash,ksh,tcsh,zsh}
parallel -k --tag myrun ::: /bin/{sh,bash} /usr/bin/{csh,dash,ksh,tcsh,zsh}
}
par_exporting_in_zsh() {
@ -221,5 +221,5 @@ par_z_multiple_hosts_repeat_arg() {
export -f $(compgen -A function | grep par_)
compgen -A function | G par_ "$@" | LC_ALL=C sort |
parallel --timeout 250 -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
parallel --timeout 250 -j75% --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
perl -pe 's:/usr/bin:/bin:g;'

View file

@ -46,7 +46,8 @@ par_--ssh_autossh() {
stdout parallel -S csh@lo --trc {}.out touch {}.out ::: foo_autossh
ls foo_autossh*
rm foo_autossh*
) | grep -Ev 'Warning: remote port forwarding failed for listen'
) | grep -Ev 'Warning: remote port forwarding failed for listen' |
perl -pe 's/Receiver=[0-9.]+/Receiver=9.9.9/g'
}
par_fish_exit() {

View file

@ -29,63 +29,6 @@ export -f retry
## par_*_man = tests from the man page
#
par__man_ash() {
echo '### ash'
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
. `which env_parallel.ash`;
alias myecho='echo aliases with \= \& \" \!'" \'"
myecho work
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
alias multiline='echo multiline
echo aliases with \= \& \" \!'" \'"
multiline work
env_parallel multiline ::: work
env_parallel -S server multiline ::: work
env_parallel --env multiline multiline ::: work
env_parallel --env multiline -S server multiline ::: work
alias multiline="dummy"
# Functions are not supported in ash
myvar='variables with = & " !'" '"
echo "$myvar" work
env_parallel echo '"$myvar"' ::: work
env_parallel -S server echo '"$myvar"' ::: work
env_parallel --env myvar echo '"$myvar"' ::: work
env_parallel --env myvar -S server echo '"$myvar"' ::: work
multivar='multiline
variables with = & " !'" '"
echo "$multivar" work
env_parallel echo '"$multivar"' ::: work
env_parallel -S server echo '"$multivar"' ::: work
env_parallel --env multivar echo '"$multivar"' ::: work
env_parallel --env multivar -S server echo '"$multivar"' ::: work
# Arrays are not supported in ash
# Exporting of functions is not supported
# env_parallel --argsep --- env_parallel -k echo ::: multi level --- env_parallel
env_parallel ::: true false true false
echo exit value $? should be 2
env_parallel --no-such-option 2>&1 >/dev/null
# Sleep 1 to delay output to stderr to avoid race
echo exit value $? should be 255 `sleep 1`
_EOF
)
ssh ash@lo "$myscript"
}
par__man_bash() {
echo '### bash'
@ -624,55 +567,6 @@ _EOF
ssh zsh@lo "$myscript"
}
par_--env_underscore_ash() {
echo '### ash'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
alias not_copied_alias="echo BAD"
# not_copied_func() { echo BAD; };
not_copied_var=BAD
# not_copied_array=(BAD BAD BAD);
. `which env_parallel.ash`;
env_parallel --record-env;
alias myecho="echo \$myvar aliases";
# myfunc() { myecho functions $*; };
myvar="variables in";
# myarray=(and arrays in);
# env_parallel myfunc ::: work;
# env_parallel -S server myfunc ::: work;
env_parallel --env myvar,myecho myecho ::: work;
env_parallel --env myvar,myecho -S server myecho ::: work;
env_parallel --env _ myecho ::: work;
env_parallel --env _ -S server myecho ::: work;
env_parallel --env _ -S server not_copied_alias ::: error=OK;
# env_parallel --env _ -S server not_copied_func ::: error=OK;
env_parallel --env _ -S server echo \$not_copied_var ::: error=OK;
# env_parallel --env _ -S server echo \${not_copied_array[@]} ::: error=OK;
echo myvar >> ~/.parallel/ignored_vars;
env_parallel --env _ myecho ::: work;
env_parallel --env _ -S server myecho ::: work;
# echo myarray >> ~/.parallel/ignored_vars;
# env_parallel --env _ myfunc ::: work;
# env_parallel --env _ -S server myfunc ::: work;
echo myecho >> ~/.parallel/ignored_vars;
env_parallel --env _ myecho ::: work;
echo "OK if no myecho ^^^^^^^^^^^^^^^^^" >&2;
env_parallel --env _ -S server myecho ::: work;
echo "OK if no myecho ^^^^^^^^^^^^^^^^^" >&2;
# echo myfunc >> ~/.parallel/ignored_vars;
# env_parallel --env _ myfunc ::: work;
# echo "OK if no myfunc ^^^^^^^^^^^^^^^^^" >&2;
# env_parallel --env _ -S server myfunc ::: work;
# echo "OK if no myfunc ^^^^^^^^^^^^^^^^^" >&2;
_EOF
)
ssh ash@lo "$myscript"
}
par_--env_underscore_bash() {
echo '### bash'
myscript=$(cat <<'_EOF'
@ -1109,39 +1003,6 @@ _EOF
# + remote, locally
# + variables, variables with funky content, arrays, assoc array, functions, aliases
par_funky_ash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ash`;
myvar="myvar works"
funky=`perl -e "print pack \"c*\", 2..255"`
# Arrays not supported
# myarray=("" array_val2 3 "" 5 " space 6 ")
# typeset -A assocarr
# assocarr[a]=assoc_val_a
# assocarr[b]=assoc_val_b
alias alias_echo="echo 3 arg";
func_echo() {
echo $*;
echo "$myvar"
# echo "${myarray[5]}"
# echo ${assocarr[a]}
echo Funky-"$funky"-funky
}
env_parallel alias_echo ::: alias_works
# env_parallel func_echo ::: function_works
env_parallel -S ash@lo alias_echo ::: alias_works_over_ssh
# env_parallel -S ash@lo func_echo ::: function_works_over_ssh
echo
echo "$funky" | parallel --shellquote
_EOF
)
# Order is often different. Dunno why. So sort
ssh ash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_funky_bash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.bash`;
@ -1452,31 +1313,6 @@ _EOF
ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_env_parallel_ash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ash`;
echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred
OK=OK
echo data from stdin | env_parallel --pipe -S lo --fifo 'cat {} && echo $OK'
echo data from stdin | env_parallel --pipe -S lo --cat 'cat {} && echo $OK'
echo 'bug #52534: Tail of multiline alias is ignored'
alias myalias='echo alias line 1
echo alias line 2
echo alias line 3
'
alias myalias2='echo alias2 line 1
echo alias2 line 2
'
env_parallel myalias ::: myalias2
env_parallel -S lo myalias ::: myalias2
_EOF
)
# Order is often different. Dunno why. So sort
ssh ash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_env_parallel_bash() {
myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522'
@ -1670,10 +1506,6 @@ _EOF
ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_environment_too_big_ash() {
echo moved to hwdep1.sh
}
par_environment_too_big_bash() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
@ -1979,69 +1811,6 @@ par_environment_too_big_zsh() {
echo moved to hwdep1.sh
}
par_parset_ash() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.ash`
# Arrays not supported
# echo '### parset into array'
# parset arr1 echo ::: foo bar baz
# echo ${arr1[0]} ${arr1[1]} ${arr1[2]}
echo '### parset into vars with comma'
parset comma3,comma2,comma1 echo ::: baz bar foo
echo $comma1 $comma2 $comma3
echo '### parset into vars with space'
parset 'space3 space2 space1' echo ::: baz bar foo
echo $space1 $space2 $space3
echo '### parset with newlines'
parset 'newline3 newline2 newline1' seq ::: 3 2 1
echo "$newline1"
echo "$newline2"
echo "$newline3"
# Arrays not supported
# echo '### parset into indexed array vars'
# parset 'myarray[6],myarray[5],myarray[4]' echo ::: baz bar foo
# echo ${myarray[*]}
# echo ${myarray[4]} ${myarray[5]} ${myarray[6]}
echo '### env_parset'
myfun() {
myecho myfun "$@";
}
alias myecho='echo myecho "$myvar"'
myvar="myvar"
# Arrays not supported
# myarr=("myarr 0" "myarr 1" "myarr 2")
mynewline="`echo newline1;echo newline2;`"
# Arrays not supported
# env_parset arr1 myfun ::: foo bar baz
# echo "${arr1[0]} ${arr1[1]} ${arr1[2]}"
env_parset comma3,comma2,comma1 myecho ::: baz bar foo
echo "$comma1 $comma2 $comma3"
env_parset 'space3 space2 space1' myecho ::: baz bar foo
echo "$space1 $space2 $space3"
env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1
echo "$newline1"
echo "$newline2"
echo "$newline3"
# Arrays not supported
# 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"
}
par_parset_bash() {
myscript=$(cat <<'_EOF'
echo 'parset'
@ -2448,107 +2217,6 @@ _EOF
### env_parallel_session
par_env_parallel_--session_ash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ash`
echo '### Test env_parallel --session'
level0var=l0var
# Arrays and functions not supported
# level0arr=(level0 array)
# level0func() { echo l0func; }
alias level0alias='echo l0alias'
env_parallel --session
level1var=l1var
# Arrays and functions not supported
# level1arr=(level1 array)
# level1func() { echo l1func; }
alias level1alias='echo l1alias'
echo '### level0 should be hidden, level1 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel --session
level2var=l2var
# Arrays and functions not supported
# level2arr=(level2 array)
# level2func() { echo l2func; }
alias level2alias='echo l2alias'
echo '### level0+1 should be hidden, level2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: fail
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel --endsession
echo '### level0 should be hidden, level1+2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: fail
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel --endsession
echo '### level0+1+2 should be transferred'
env_parallel -Slo 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: OK
env_parallel 'echo $level0var; level0func; level0alias; echo ${level0arr[*]}' ::: OK
env_parallel -Slo 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel 'echo $level1var; level1func; level1alias; echo ${level1arr[*]}' ::: OK
env_parallel -Slo 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
env_parallel 'echo $level2var; level2func; level2alias; echo ${level2arr[*]}' ::: OK
alias aliasbefore='echo before'
# Functions not supported
# varbefore='before'
# funcbefore() { echo 'before' "$@"; }
# Arrays not supported
# arraybefore=(array before)
env_parallel --session
# stuff defined
env_parallel aliasbefore ::: must_fail
env_parallel -S lo aliasbefore ::: must_fail
# Functions not supported
# env_parallel funcbefore ::: must_fail
# env_parallel -S lo funcbefore ::: must_fail
env_parallel echo '$varbefore' ::: no_before
env_parallel -S lo echo '$varbefore' ::: no_before
# Arrays not supported
# env_parallel echo '${arraybefore[*]}' ::: no_before
# env_parallel -S lo echo '${arraybefore[*]}' ::: no_before
alias aliasafter='echo after'
varafter='after'
# Functions not supported
# funcafter() { echo 'after' "$@"; }
# Arrays not supported
# arrayafter=(array after)
env_parallel aliasafter ::: aliasafter_OK
env_parallel -S lo aliasafter ::: aliasafter_OK
# Functions not supported
# env_parallel funcafter ::: funcafter_OK
# env_parallel -S lo funcafter ::: funcafter_OK
env_parallel echo '$varafter' ::: varafter_OK
env_parallel -S lo echo '$varafter' ::: varafter_OK
# Arrays not supported
# env_parallel echo '${arrayafter[*]}' ::: arrayafter_OK
# env_parallel -S lo echo '${arrayafter[*]}' ::: arrayafter_OK
unset PARALLEL_IGNORED_NAMES
_EOF
)
ssh ash@lo "$myscript"
}
par_env_parallel_--session_bash() {
myscript=$(cat <<'_EOF'
echo '### Test env_parallel --session / --end-session'

View file

@ -4,30 +4,6 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later
par_ash_embed() {
myscript=$(cat <<'_EOF'
echo '--embed'
parallel --embed | tac | perl -pe '
/^parallel/ and not $seen++ and s{^}{
echo \$b
parset a,b,c echo ::: ParsetOK ParsetOK ParsetOK
env_parallel echo ::: env_parallel_OK
env_parallel --env myvar echo {} --env \\\$myvar ::: env_parallel
myvar=OK
parallel echo ::: parallel_OK
PATH=/usr/sbin:/usr/bin:/sbin:/bin
# Do not look for parallel in /usr/local/bin
#. \`which env_parallel.ash\`
}
' | tac > parallel-embed
chmod +x parallel-embed
./parallel-embed
rm parallel-embed
_EOF
)
ssh ash@lo "$myscript"
}
par_bash_embed() {
myscript=$(cat <<'_EOF'
echo '--embed'
@ -157,7 +133,7 @@ par_env_parallel_big_env() {
echo '### bug #54128: command too long when exporting big env'
. env_parallel.bash
env_parallel --session
a=`rand | perl -pe 's/\0//g'| head -c 40000`
a=`rand | perl -pe 's/\0//g'| head -c 10000`
env_parallel -Slo echo ::: OK 2>&1
a=`rand | perl -pe 's/\0//g'| head -c 50000`
env_parallel -Slo echo THIS SHOULD ::: FAIL 2>/dev/null || echo OK

View file

@ -1,21 +1,3 @@
par__environment_too_big_ash bug #5XXXX: env_parallel should warn if the environment is too big
par__environment_too_big_ash OK_bigvar
par__environment_too_big_ash OK_bigvar_remote
par__environment_too_big_ash OK_bigvar_quote
par__environment_too_big_ash OK_bigvar_quote_remote
par__environment_too_big_ash OK_bigfunc
par__environment_too_big_ash OK_bigfunc_remote
par__environment_too_big_ash OK_bigfunc_quote
par__environment_too_big_ash OK_bigfunc_quote_remote
par__environment_too_big_ash Rest should fail - functions not supported in ash
par__environment_too_big_ash parallel: Error: Command line too long (7XXXX >= 6XXXX) at input 0: fail_bigvar
par__environment_too_big_ash parallel: Error: Command line too long (7XXXX >= 6XXXX) at input 0: fail_bigvar_remote
par__environment_too_big_ash parallel: Error: Command line too long (8XXXX >= 6XXXX) at input 0: fail_bigvar_quote
par__environment_too_big_ash parallel: Error: Command line too long (8XXXX >= 6XXXX) at input 0: fail_bigvar_quote_remote
par__environment_too_big_ash fail_bigfunc-not-supported
par__environment_too_big_ash fail_bigfunc_remote-not-supported
par__environment_too_big_ash fail_bigfunc_quote-not-supported
par__environment_too_big_ash fail_bigfunc_quote_remote-not-supported
par__environment_too_big_dash bug #5XXXX: env_parallel should warn if the environment is too big
par__environment_too_big_dash OK_bigvar
par__environment_too_big_dash OK_bigvar_remote

View file

@ -1372,8 +1372,6 @@ par_seqreplace_long_line 9 1 1 101
par_seqreplace_long_line 90 1 1 201
par_seqreplace_long_line 1 parallel: Error: Command line too long (309 >= 210) at input 0: 100
par_shellquote ### Test --shellquote in all shells
par_shellquote ash '
par_shellquote ash par_shellquote ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<D096><E29486><EFBFBD>辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬<E8B28A><E9BCAC><EFBFBD><EFBFBD>'
par_shellquote bash '
par_shellquote bash par_shellquote bash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote csh \\\\\\\\ "\

View file

@ -960,8 +960,6 @@ par_test_m_X a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
par_test_m_X ### Test -q {.}
par_test_m_X 'a'
par_test_m_X 'a'
par_testquote ash "#&/
par_testquote ash ()*=?'
par_testquote bash "#&/
par_testquote bash ()*=?'
par_testquote csh "#&/

View file

@ -1643,16 +1643,6 @@ par_bin 9 2
par_exit_code bug #52207: Exit status 0 when child job is killed, even with "now,fail=1"
par_exit_code # Ideally the command should return the same
par_exit_code # with or without parallel
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 /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;/bin/true' ::: 100 0
par_exit_code ash 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
@ -3069,7 +3059,6 @@ par_slow_total_jobs 1
par_slow_total_jobs 2
par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds.
par_test_detected_shell ### bug #42913: Dont use $SHELL but the shell currently running
par_test_detected_shell test_unknown_shell ash Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell bash Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell csh Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell dash Global::shell /usr/bin/bash
@ -3086,7 +3075,6 @@ par_test_detected_shell test_unknown_shell sh Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell tcsh Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell yash Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell zsh Global::shell /usr/bin/bash
par_test_detected_shell test_known_shell_c ash Global::shell /usr/bin/ash
par_test_detected_shell test_known_shell_c bash Global::shell /usr/bin/bash
par_test_detected_shell test_known_shell_c csh Global::shell /usr/bin/csh
par_test_detected_shell test_known_shell_c dash Global::shell /usr/bin/dash
@ -3104,7 +3092,6 @@ par_test_detected_shell test_known_shell_c static-sh Global::shell /usr/bin/stat
par_test_detected_shell test_known_shell_c tcsh Global::shell /usr/bin/tcsh
par_test_detected_shell test_known_shell_c yash Global::shell /usr/bin/yash
par_test_detected_shell test_known_shell_c zsh Global::shell /usr/bin/zsh
par_test_detected_shell test_known_shell_pipe ash Global::shell /usr/bin/ash
par_test_detected_shell test_known_shell_pipe bash Global::shell /usr/bin/bash
par_test_detected_shell test_known_shell_pipe csh Global::shell /usr/bin/csh
par_test_detected_shell test_known_shell_pipe dash Global::shell /usr/bin/dash

View file

@ -1,7 +1,10 @@
WHY DOES THIS FAIL?
### --env _
OK from fubar test
In csh this may fail with ignored_var: Undefined variable.
### --env _ with explicit mentioning of normally ignored var $ignored_var
OK from fubar should be copied test
OK from fubar should be copied test
bug #46120: Suspend should suspend (at least local) children
it should burn 1.9 CPU seconds, but no more than that
The 5 second sleep will make it be killed by timeout when it fgs

View file

@ -321,7 +321,6 @@ par_warn_when_exporting_func /bin/sh Run function in /bin/sh
par_warn_when_exporting_func /bin/sh parallel: Warning: Shell functions may not be supported in /bin/sh.
par_warn_when_exporting_func /bin/bash Run function in /bin/bash
par_warn_when_exporting_func /bin/bash Function run: OK
par_warn_when_exporting_func /bin/ash Run function in /bin/ash
par_warn_when_exporting_func /bin/csh Run function in /bin/csh
par_warn_when_exporting_func /bin/csh parallel: Warning: Shell functions may not be supported in /bin/csh.
par_warn_when_exporting_func /bin/csh CSH/TCSH DO NOT SUPPORT newlines IN VARIABLES/FUNCTIONS. Unset myfunc

View file

@ -37,7 +37,7 @@ par_--ssh_autossh AUTOSSH_DEBUG - turn logging to maximum verbosity an
par_--ssh_autossh stderr
par_--ssh_autossh
par_--ssh_autossh rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
par_--ssh_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(231) [Receiver=3.2.7]
par_--ssh_autossh rsync error: error in rsync protocol data stream (code 12) at io.c(231) [Receiver=9.9.9]
par_--ssh_autossh foo_autossh
par_--ssh_lsh ### --ssh lsh
par_--ssh_lsh OK

View file

@ -1,18 +1,4 @@
### test --env _, env_parallel for different shells
par_--env_underscore_ash ### ash
par_--env_underscore_ash ### Testing of --env _
par_--env_underscore_ash variables in aliases work
par_--env_underscore_ash variables in aliases work
par_--env_underscore_ash variables in aliases work
par_--env_underscore_ash variables in aliases work
par_--env_underscore_ash script: 4: not_copied_alias: not found
par_--env_underscore_ash error=OK
par_--env_underscore_ash aliases work
par_--env_underscore_ash aliases work
par_--env_underscore_ash /bin/ash: 1: myecho: not found
par_--env_underscore_ash OK if no myecho ^^^^^^^^^^^^^^^^^
par_--env_underscore_ash script: 2: myecho: not found
par_--env_underscore_ash OK if no myecho ^^^^^^^^^^^^^^^^^
par_--env_underscore_bash ### bash
par_--env_underscore_bash ### Testing of --env _
par_--env_underscore_bash variables in aliases in and arrays in functions work
@ -87,7 +73,7 @@ par_--env_underscore_ksh aliases in functions work
par_--env_underscore_ksh aliases in functions work
par_--env_underscore_ksh /bin/ksh: myecho: not found
par_--env_underscore_ksh OK if no myecho ^^^^^^^^^^^^^^^^^
par_--env_underscore_ksh script[9]: myecho: not found
par_--env_underscore_ksh script: myecho: not found
par_--env_underscore_ksh OK if no myecho ^^^^^^^^^^^^^^^^^
par_--env_underscore_ksh /bin/ksh: myfunc: not found
par_--env_underscore_ksh OK if no myfunc ^^^^^^^^^^^^^^^^^
@ -101,8 +87,8 @@ par_--env_underscore_mksh variables in aliases in and arrays in functions work
par_--env_underscore_mksh variables in aliases in and arrays in functions work
par_--env_underscore_mksh variables in aliases in and arrays in functions work
par_--env_underscore_mksh variables in aliases in and arrays in functions work
par_--env_underscore_mksh W: script[9]: not_copied_alias: inaccessible or not found
par_--env_underscore_mksh W: script[9]: not_copied_func: inaccessible or not found
par_--env_underscore_mksh EW: script[9]: not_copied_alias: inaccessible or not found
par_--env_underscore_mksh EW: script[9]: not_copied_func: inaccessible or not found
par_--env_underscore_mksh error=OK
par_--env_underscore_mksh error=OK
par_--env_underscore_mksh aliases in and arrays in functions work
@ -113,9 +99,9 @@ par_--env_underscore_mksh aliases in functions work
par_--env_underscore_mksh The myecho alias is replaced in the function causing this not to fail
par_--env_underscore_mksh aliases in functions work
par_--env_underscore_mksh The myecho alias is replaced in the function causing this not to fail
par_--env_underscore_mksh W: /bin/mksh: myfunc: inaccessible or not found
par_--env_underscore_mksh EW: /bin/mksh: myfunc: inaccessible or not found
par_--env_underscore_mksh OK if no myfunc ^^^^^^^^^^^^^^^^^
par_--env_underscore_mksh W: script[9]: myfunc: inaccessible or not found
par_--env_underscore_mksh EW: script[9]: myfunc: inaccessible or not found
par_--env_underscore_mksh OK if no myfunc ^^^^^^^^^^^^^^^^^
par_--env_underscore_sh ### sh
par_--env_underscore_sh ### Testing of --env _
@ -173,41 +159,6 @@ par_--env_underscore_zsh zsh:1: command not found: myfunc
par_--env_underscore_zsh OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc
par_--env_underscore_zsh script:2: command not found: myfunc
par_--env_underscore_zsh OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc
par__man_ash ### ash
par__man_ash ### From man env_parallel
par__man_ash aliases with = & " ! ' work
par__man_ash aliases with = & " ! ' work
par__man_ash aliases with = & " ! ' work
par__man_ash aliases with = & " ! ' work
par__man_ash aliases with = & " ! ' work
par__man_ash multiline
par__man_ash aliases with = & " ! ' work
par__man_ash multiline
par__man_ash aliases with = & " ! ' work
par__man_ash multiline
par__man_ash aliases with = & " ! ' work
par__man_ash multiline
par__man_ash aliases with = & " ! ' work
par__man_ash multiline
par__man_ash aliases with = & " ! ' work
par__man_ash variables with = & " ! ' work
par__man_ash variables with = & " ! ' work
par__man_ash variables with = & " ! ' work
par__man_ash variables with = & " ! ' work
par__man_ash variables with = & " ! ' work
par__man_ash multiline
par__man_ash variables with = & " ! ' work
par__man_ash multiline
par__man_ash variables with = & " ! ' work
par__man_ash multiline
par__man_ash variables with = & " ! ' work
par__man_ash multiline
par__man_ash variables with = & " ! ' work
par__man_ash multiline
par__man_ash variables with = & " ! ' work
par__man_ash exit value 2 should be 2
par__man_ash Unknown option: no-such-option
par__man_ash exit value 255 should be 255
par__man_bash ### bash
par__man_bash ### From man env_parallel
par__man_bash aliases with = & " ! ' work
@ -705,107 +656,6 @@ par__man_zsh env_parallel
par__man_zsh exit value 2 should be 2
par__man_zsh Unknown option: no-such-option
par__man_zsh exit value 255 should be 255
par_env_parallel_--session_ash ### Test env_parallel --session
par_env_parallel_--session_ash ### level0 should be hidden, level1 should be transferred
par_env_parallel_--session_ash
par_env_parallel_--session_ash script: 99: level0func: not found
par_env_parallel_--session_ash script: 99: level0alias: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash
par_env_parallel_--session_ash /bin/ash: 999: level0func: not found
par_env_parallel_--session_ash /bin/ash: 999: level0alias: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash l1var
par_env_parallel_--session_ash l1alias
par_env_parallel_--session_ash script: 99: level1func: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash l1var
par_env_parallel_--session_ash l1alias
par_env_parallel_--session_ash /bin/ash: 999: level1func: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash ### level0+1 should be hidden, level2 should be transferred
par_env_parallel_--session_ash
par_env_parallel_--session_ash script: 4: level0func: not found
par_env_parallel_--session_ash script: 4: level0alias: not found
par_env_parallel_--session_ash script: 4: Bad substitution
par_env_parallel_--session_ash
par_env_parallel_--session_ash /bin/ash: 3: level0func: not found
par_env_parallel_--session_ash /bin/ash: 3: level0alias: not found
par_env_parallel_--session_ash /bin/ash: 3: Bad substitution
par_env_parallel_--session_ash
par_env_parallel_--session_ash script: 4: level1func: not found
par_env_parallel_--session_ash script: 4: level1alias: not found
par_env_parallel_--session_ash script: 4: Bad substitution
par_env_parallel_--session_ash
par_env_parallel_--session_ash /bin/ash: 3: level1func: not found
par_env_parallel_--session_ash /bin/ash: 3: level1alias: not found
par_env_parallel_--session_ash /bin/ash: 3: Bad substitution
par_env_parallel_--session_ash l2var
par_env_parallel_--session_ash l2alias
par_env_parallel_--session_ash script: 4: level2func: not found
par_env_parallel_--session_ash script: 4: Bad substitution
par_env_parallel_--session_ash l2var
par_env_parallel_--session_ash l2alias
par_env_parallel_--session_ash /bin/ash: 3: level2func: not found
par_env_parallel_--session_ash /bin/ash: 3: Bad substitution
par_env_parallel_--session_ash ### level0 should be hidden, level1+2 should be transferred
par_env_parallel_--session_ash
par_env_parallel_--session_ash script: 99: level0func: not found
par_env_parallel_--session_ash script: 99: level0alias: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash
par_env_parallel_--session_ash /bin/ash: 999: level0func: not found
par_env_parallel_--session_ash /bin/ash: 999: level0alias: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash l1var
par_env_parallel_--session_ash l1alias
par_env_parallel_--session_ash script: 99: level1func: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash l1var
par_env_parallel_--session_ash l1alias
par_env_parallel_--session_ash /bin/ash: 999: level1func: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash l2var
par_env_parallel_--session_ash l2alias
par_env_parallel_--session_ash script: 99: level2func: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash l2var
par_env_parallel_--session_ash l2alias
par_env_parallel_--session_ash /bin/ash: 999: level2func: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash ### level0+1+2 should be transferred
par_env_parallel_--session_ash l0var
par_env_parallel_--session_ash l0alias
par_env_parallel_--session_ash script: 99: level0func: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash l0var
par_env_parallel_--session_ash l0alias
par_env_parallel_--session_ash /bin/ash: 999: level0func: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash l1var
par_env_parallel_--session_ash l1alias
par_env_parallel_--session_ash script: 99: level1func: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash l1var
par_env_parallel_--session_ash l1alias
par_env_parallel_--session_ash /bin/ash: 999: level1func: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash l2var
par_env_parallel_--session_ash l2alias
par_env_parallel_--session_ash script: 99: level2func: not found
par_env_parallel_--session_ash script: 99: Bad substitution
par_env_parallel_--session_ash l2var
par_env_parallel_--session_ash l2alias
par_env_parallel_--session_ash /bin/ash: 999: level2func: not found
par_env_parallel_--session_ash /bin/ash: 999: Bad substitution
par_env_parallel_--session_ash /bin/ash: 1: aliasbefore: not found
par_env_parallel_--session_ash script: 2: aliasbefore: not found
par_env_parallel_--session_ash no_before
par_env_parallel_--session_ash no_before
par_env_parallel_--session_ash after aliasafter_OK
par_env_parallel_--session_ash after aliasafter_OK
par_env_parallel_--session_ash after varafter_OK
par_env_parallel_--session_ash after varafter_OK
par_env_parallel_--session_bash ### Test env_parallel --session / --end-session
par_env_parallel_--session_bash ### level0 should be hidden, level1 should be transferred
par_env_parallel_--session_bash
@ -1130,12 +980,12 @@ par_env_parallel_--session_mksh ### Test env_parallel --session
par_env_parallel_--session_mksh ### level0 should be hidden, level1 should be transferred
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level0func: inaccessible or not found
par_env_parallel_--session_mksh W: script[9]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level0func: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level0func: inaccessible or not found
par_env_parallel_--session_mksh W: /bin/mksh: level0alias: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level0func: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level0alias: inaccessible or not found
par_env_parallel_--session_mksh l1var
par_env_parallel_--session_mksh l1func
par_env_parallel_--session_mksh l1alias
@ -1147,20 +997,20 @@ par_env_parallel_--session_mksh level1 array OK
par_env_parallel_--session_mksh ### level0+1 should be hidden, level2 should be transferred
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level0func: inaccessible or not found
par_env_parallel_--session_mksh W: script[9]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level0func: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level0func: inaccessible or not found
par_env_parallel_--session_mksh W: /bin/mksh: level0alias: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level0func: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level0alias: inaccessible or not found
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level1func: inaccessible or not found
par_env_parallel_--session_mksh W: script[9]: level1alias: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level1func: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level1alias: inaccessible or not found
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level1func: inaccessible or not found
par_env_parallel_--session_mksh W: /bin/mksh: level1alias: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level1func: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level1alias: inaccessible or not found
par_env_parallel_--session_mksh l2var
par_env_parallel_--session_mksh l2func
par_env_parallel_--session_mksh l2alias
@ -1172,12 +1022,12 @@ par_env_parallel_--session_mksh level2 array OK
par_env_parallel_--session_mksh ### level0 should be hidden, level1+2 should be transferred
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level0func: inaccessible or not found
par_env_parallel_--session_mksh W: script[9]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level0func: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level0func: inaccessible or not found
par_env_parallel_--session_mksh W: /bin/mksh: level0alias: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level0func: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: level0alias: inaccessible or not found
par_env_parallel_--session_mksh l1var
par_env_parallel_--session_mksh l1func
par_env_parallel_--session_mksh l1alias
@ -1219,10 +1069,10 @@ par_env_parallel_--session_mksh l2var
par_env_parallel_--session_mksh l2func
par_env_parallel_--session_mksh l2alias
par_env_parallel_--session_mksh level2 array OK
par_env_parallel_--session_mksh W: /bin/mksh: aliasbefore: inaccessible or not found
par_env_parallel_--session_mksh W: script[9]: aliasbefore: inaccessible or not found
par_env_parallel_--session_mksh W: /bin/mksh: funcbefore: inaccessible or not found
par_env_parallel_--session_mksh W: script[9]: funcbefore: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: aliasbefore: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: aliasbefore: inaccessible or not found
par_env_parallel_--session_mksh EW: /bin/mksh: funcbefore: inaccessible or not found
par_env_parallel_--session_mksh EW: script[9]: funcbefore: inaccessible or not found
par_env_parallel_--session_mksh no_before
par_env_parallel_--session_mksh no_before
par_env_parallel_--session_mksh no_before
@ -1450,22 +1300,6 @@ par_env_parallel_--session_zsh after varafter_OK
par_env_parallel_--session_zsh after varafter_OK
par_env_parallel_--session_zsh array after arrayafter_OK
par_env_parallel_--session_zsh array after arrayafter_OK
par_env_parallel_ash OK
par_env_parallel_ash OK
par_env_parallel_ash alias line 1
par_env_parallel_ash alias line 1
par_env_parallel_ash alias line 2
par_env_parallel_ash alias line 2
par_env_parallel_ash alias line 3
par_env_parallel_ash alias line 3
par_env_parallel_ash alias2 line 1
par_env_parallel_ash alias2 line 1
par_env_parallel_ash alias2 line 2
par_env_parallel_ash alias2 line 2
par_env_parallel_ash bug #50435: Remote fifo broke in 20150522
par_env_parallel_ash bug #52534: Tail of multiline alias is ignored
par_env_parallel_ash data from stdin
par_env_parallel_ash data from stdin
par_env_parallel_bash OK
par_env_parallel_bash OK
par_env_parallel_bash alias line 1
@ -1606,7 +1440,6 @@ par_env_parallel_zsh bug #50435: Remote fifo broke in 20150522
par_env_parallel_zsh bug #52534: Tail of multiline alias is ignored
par_env_parallel_zsh data from stdin
par_env_parallel_zsh data from stdin
par_environment_too_big_ash moved to hwdep1.sh
par_environment_too_big_bash bug #50815: env_parallel should warn if the environment is too big
par_environment_too_big_bash OK_bigvar
par_environment_too_big_bash OK_bigvar_remote
@ -1683,14 +1516,7 @@ par_environment_too_big_sh fail_bigfunc_quote-not-supported
par_environment_too_big_sh fail_bigfunc_quote_remote-not-supported
par_environment_too_big_tcsh Not implemented
par_environment_too_big_zsh moved to hwdep1.sh
par_funky_ash
par_funky_ash ' '
par_funky_ash ' par_funky_ash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_funky_ash 3 arg alias_works
par_funky_ash 3 arg alias_works_over_ssh
par_funky_bash
par_funky_bash 
par_funky_bash 
par_funky_bash -funkymultiline
par_funky_bash -funkymultiline
par_funky_bash space 6
@ -1702,8 +1528,8 @@ par_funky_bash 3 arg alias_works
par_funky_bash 3 arg alias_works_over_ssh
par_funky_bash Funkyline- par_funky_bash  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funkyline
par_funky_bash Funkyline- par_funky_bash  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ-funkyline
par_funky_bash Funkymultiline-
par_funky_bash Funkymultiline-
par_funky_bash Funkymultiline-
par_funky_bash Funkymultiline-
par_funky_bash assoc_val_a
par_funky_bash assoc_val_a
par_funky_bash function_works
@ -1797,35 +1623,6 @@ par_funky_zsh function_works
par_funky_zsh function_works_over_ssh
par_funky_zsh myvar works
par_funky_zsh myvar works
par_parset_ash parset
par_parset_ash ### parset into vars with comma
par_parset_ash foo bar baz
par_parset_ash ### parset into vars with space
par_parset_ash foo bar baz
par_parset_ash ### parset with newlines
par_parset_ash 1
par_parset_ash 1
par_parset_ash 2
par_parset_ash 1
par_parset_ash 2
par_parset_ash 3
par_parset_ash ### env_parset
par_parset_ash myecho myvar foo myecho myvar bar myecho myvar baz
par_parset_ash myecho myvar foo myecho myvar bar myecho myvar baz
par_parset_ash newline1
par_parset_ash newline2
par_parset_ash 1
par_parset_ash newline1
par_parset_ash newline2
par_parset_ash 1
par_parset_ash 2
par_parset_ash newline1
par_parset_ash newline2
par_parset_ash 1
par_parset_ash 2
par_parset_ash 3
par_parset_ash Exit value 2 = 2
par_parset_ash Exit value 2 = 2
par_parset_bash parset
par_parset_bash ### parset into array
par_parset_bash foo bar baz

View file

@ -134,24 +134,6 @@ par__sshlogin_range parallel: Warning: Could not figure out number of cpus on ip
par__sshlogin_range parallel: Warning: Could not figure out number of cpus on ip251.0.9.109 (). Using 1.
par__sshlogin_range parallel: Warning: Could not figure out number of cpus on ip251.0.9.110 (). Using 1.
par__sshlogin_range parallel: Warning: Could not figure out number of cpus on ip251.0.9.111 (). Using 1.
par_ash_embed --embed
par_ash_embed Redirect the output to a file and add your changes at the end:
par_ash_embed /usr/local/bin/parallel --embed > new_script
par_ash_embed Put
par_ash_embed your
par_ash_embed code
par_ash_embed here
par_ash_embed parallel_OK
par_ash_embed env_parallel --env OK
par_ash_embed env_parallel_OK
par_ash_embed ParsetOK
par_ash_embed Put
par_ash_embed your
par_ash_embed code
par_ash_embed here
par_ash_embed Put your code here
par_ash_embed You can also activate GNU Parallel for interactive use by:
par_ash_embed . ./parallel-embed
par_bash_embed --embed
par_bash_embed Redirect the output to a file and add your changes at the end:
par_bash_embed /usr/local/bin/parallel --embed > new_script

View file

@ -720,7 +720,6 @@ BASH_FUNC_replace_tmpdir%%
BASH_FUNC_run_once%%
BASH_FUNC_run_test%%
_
mysqlrootpass
qTMPDIR
qqTMPDIR
testsuitedir
@ -1062,19 +1061,16 @@ cat: num_%header: No such file or directory
/usr/bin/bash: line 2: foo: command not found
#!/usr/bin/perl
print "@ARGV\n"
Warning: unknown mime-type for "@ARGV\n" -- using "application/octet-stream"
Error: no such file "@ARGV\n"
parallel perl_echo ::: foo bar
/usr/bin/bash: line 1: perl_echo: command not found
#!/usr/bin/parallel --shebang-wrap /usr/bin/perl
print "@ARGV\n"
Warning: unknown mime-type for "@ARGV\n" -- using "application/octet-stream"
Error: no such file "@ARGV\n"
perl_echo foo bar
/usr/bin/bash: line 1: perl_echo: command not found
#!/usr/bin/parallel --shebang-wrap /usr/bin/perl
print "Arguments @ARGV\n";
Warning: unknown mime-type for "Arguments @ARGV\n" -- using "application/octet-stream"
Error: no such file "Arguments @ARGV\n"
#!/usr/bin/parallel --shebang-wrap /usr/bin/python
print 'Arguments', str(sys.argv)
@ -1095,7 +1091,6 @@ Arguments
#!/usr/bin/parallel --shebang-wrap /usr/bin/ruby
print "Arguments "
puts ARGV
Warning: unknown mime-type for "Arguments " -- using "application/octet-stream"
Error: no such file "Arguments "
/usr/bin/bash: line 4: puts: command not found
#!/usr/bin/parallel --shebang-wrap /usr/bin/octave

View file

@ -100,10 +100,12 @@ par_exit 30 environment: line 1: PID Power failure bash -c 'kill -'$1'
par_exit 31 Bash exit value 159
par_exit 31 Sem exit value 159
par_exit 31 environment: line 1: PID Bad system call (core dumped) bash -c 'kill -'$1' $$'
par_exit 32 Bash exit value 0
par_exit 32 Sem exit value 0
par_exit 33 Bash exit value 0
par_exit 33 Sem exit value 0
par_exit 32 Bash exit value 160
par_exit 32 Sem exit value 160
par_exit 32 environment: line 1: PID Unknown signal 32 bash -c 'kill -'$1' $$'
par_exit 33 Bash exit value 161
par_exit 33 Sem exit value 161
par_exit 33 environment: line 1: PID Unknown signal 33 bash -c 'kill -'$1' $$'
par_exit 34 Bash exit value 162
par_exit 34 Sem exit value 162
par_exit 34 environment: line 1: PID Real-time signal 0 bash -c 'kill -'$1' $$'