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: 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 make tortest
web: web:

View file

@ -787,7 +787,7 @@ torresults:
torsocks rsync -Hazv --progress tortest:privat/parallel/testsuite/actual-results/ testsuite/actual-results/ torsocks rsync -Hazv --progress tortest:privat/parallel/testsuite/actual-results/ testsuite/actual-results/
torsync: 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 make tortest
web: web:

16
NEWS
View file

@ -6,8 +6,22 @@ New in this release:
* {:%fmt} Use printf formatting of replacement strings. * {:%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 20240722

24
README
View file

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

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # 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>. # Report bugs to <bug-parallel@gnu.org>.
# #
@ -610,8 +610,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='parallel' PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel' PACKAGE_TARNAME='parallel'
PACKAGE_VERSION='20240722' PACKAGE_VERSION='20240822'
PACKAGE_STRING='parallel 20240722' PACKAGE_STRING='parallel 20240822'
PACKAGE_BUGREPORT='bug-parallel@gnu.org' PACKAGE_BUGREPORT='bug-parallel@gnu.org'
PACKAGE_URL='' 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. # 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. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF 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]... Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1313,7 +1313,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of parallel 20240722:";; short | recursive ) echo "Configuration of parallel 20240822:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@ -1390,7 +1390,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
parallel configure 20240722 parallel configure 20240822
generated by GNU Autoconf 2.71 generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc. Copyright (C) 2021 Free Software Foundation, Inc.
@ -1427,7 +1427,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. 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 generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw $ $0$ac_configure_args_raw
@ -2379,7 +2379,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='parallel' PACKAGE='parallel'
VERSION='20240722' VERSION='20240822'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h 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 # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" 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 generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES 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 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped' ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\ ac_cs_version="\\
parallel config.status 20240722 parallel config.status 20240822
configured by $0, generated by GNU Autoconf 2.71, configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\" 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]) AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([ AC_CONFIG_FILES([

View file

@ -4,10 +4,6 @@
Quote of the month: 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. Recently executed a flawless live data migration of ~2.4pb using GNU parallel for scale and bash scripts.
-- @mechanicker@twitter Dhruva -- @mechanicker@twitter Dhruva
@ -231,6 +227,10 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
=== Used === === 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 parallel is frickin great for launching jobs on multiple
machines. Ansible and Jenkins and others may be good too but I was machines. Ansible and Jenkins and others may be good too but I was
able to jump right in with parallel. 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 to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm> 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: 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: New in this release:
* A format string can be added to replacement strings: {#:%04d} * --match Match input source with regexp to set replacement fields.
<<>> * {:%fmt} Use printf formatting of replacement strings.
<<* No new features. This is a candidate for a stable release.>>
* Bug fixes and man page updates. * Bug fixes and man page updates.
News about GNU Parallel: 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. 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="Makefile" md5="a165cdcca90c744dc5a5b17cde72ad8e" size="1182" mtime="1698101769" />
<entry name="PKGBUILD" md5="16b2780a64ee18b0df1060680cec804c" size="714" mtime="1721531636" /> <entry name="PKGBUILD" md5="dbc43c26061f9b183f43ac780643b362" size="714" mtime="1724271991" />
<entry name="parallel-20240722.tar.bz2" md5="e6bdcd2fa790b2096665ed05850bbe53" size="2617438" mtime="1721531681" /> <entry name="parallel-20240822.tar.bz2" md5="150250ba8a27dc86cab7cb9b56bca9e5" size="2682765" mtime="1724271991" />
<entry name="parallel.spec" md5="d49c3a3bd1906e68ad98cf2377b3d8ea" size="6224" mtime="1721531682" /> <entry name="parallel.spec" md5="ff9ea031c93efd66356306d83723efcd" size="6224" mtime="1724271499" />
<entry name="parallel_20240722.dsc" md5="13bb25db4380d128d45b57f95d1422e0" size="556" mtime="1721531683" /> <entry name="parallel_20240822.dsc" md5="78549c2818624964438c8c3c6cc1fce4" size="556" mtime="1724271499" />
<entry name="parallel_20240722.tar.gz" md5="0229f60e3fe8aabc84dd7a908ff6bb11" size="2883193" mtime="1721531695" /> <entry name="parallel_20240822.tar.gz" md5="1c4351c72c29614d1c2fa1402715956b" size="2931682" mtime="1724271992" />
</directory> </directory>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -570,7 +570,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # 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 "Copyright (C) 2007-2024 Ole Tange, http://ole.tange.dk and Free Software"
echo "Foundation, Inc." echo "Foundation, Inc."
echo "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>" 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 =back
=head2 fish (alpha testing) =head2 fish (beta testing)
=head3 Installation =head3 Installation

View file

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

View file

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

View file

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

View file

@ -2798,7 +2798,7 @@ sub check_invalid_option_combinations() {
sub init_globals() { sub init_globals() {
# Defaults: # Defaults:
$Global::version = 20240808; $Global::version = 20240822;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$::name = "GNU Parallel"; $::name = "GNU Parallel";
$Global::infinity = 2**31; $Global::infinity = 2**31;
@ -3806,7 +3806,7 @@ sub pQ($) {
} }
sub unquote_printf() { sub unquote_printf() {
# Convert \t \n \r \000 \0 # Convert \t \n \r \xFF \000 \0
# Inputs: # Inputs:
# $string = string with \t \n \r \num \0 # $string = string with \t \n \r \num \0
# Returns: # Returns:
@ -3815,7 +3815,11 @@ sub unquote_printf() {
s/\\t/\t/g; s/\\t/\t/g;
s/\\n/\n/g; s/\\n/\n/g;
s/\\r/\r/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; s/\\(\d\d\d)/eval 'sprintf "\\'.$1.'"'/ge;
# Single digit octal: \7
s/\\(\d)/eval 'sprintf "\\'.$1.'"'/ge; s/\\(\d)/eval 'sprintf "\\'.$1.'"'/ge;
return $_; return $_;
} }
@ -5852,8 +5856,8 @@ sub usage() {
"If you use programs that use GNU Parallel to process data for an article in a", "If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:", "scientific publication, please cite:",
"", "",
" Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').", " Tange, O. (2024, August 22). GNU Parallel 20240822 ('Southport').",
" Zenodo. https://doi.org/10.5281/zenodo.12789352", " Zenodo. https://doi.org/10.5281/zenodo.13357237",
"", "",
# Before changing these lines, please read # Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice # 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", "If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:", "scientific publication, please cite:",
"", "",
" Tange, O. (2024, July 22). GNU Parallel 20240722 ('Assange').", " Tange, O. (2024, August 22). GNU Parallel 20240822 ('Southport').",
" Zenodo. https://doi.org/10.5281/zenodo.12789352", " Zenodo. https://doi.org/10.5281/zenodo.13357237",
"", "",
# Before changing these line, please read # Before changing these line, please read
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and # 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", "If you use programs that use GNU Parallel to process data for an article in a",
"scientific publication, please cite:", "scientific publication, please cite:",
"", "",
"\@software{tange_2024_12789352,", "\@software{tange_2024_13357237,",
" author = {Tange, Ole},", " author = {Tange, Ole},",
" title = {GNU Parallel 20240722 ('Assange')},", " title = {GNU Parallel 20240822 ('Southport')},",
" month = Jul,", " month = Aug,",
" year = 2023,", " year = 2023,",
" note = {{GNU Parallel is a general parallelizer to run", " note = {{GNU Parallel is a general parallelizer to run",
" multiple serial command line programs in parallel", " multiple serial command line programs in parallel",
" without changing them.}},", " without changing them.}},",
" publisher = {Zenodo},", " publisher = {Zenodo},",
" doi = {10.5281/zenodo.12789352},", " doi = {10.5281/zenodo.13357237},",
" url = {https://doi.org/10.5281/zenodo.12789352}", " 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 # Before changing these lines, please read
# https://www.gnu.org/software/parallel/parallel_design.html#citation-notice and # 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: I<regexp> is a Perl Regular Expression:
https://perldoc.perl.org/perlre.html 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> =item B<--combineexec> I<name>
@ -942,7 +942,7 @@ See also: B<--compress>
Treat input as CSV-format. 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: B<--colsep> except it deals correctly with quoting. Compare:
echo '"1 big, 2 small","2""x4"" plank",12.34' | 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') | echo 'Line 2 in field 1";value 2') |
parallel --csv --colsep ';' echo Field 1: {1} Field 2: {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>) =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> =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 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. hexadecimal escape codes are understood as for the printf command.
See also: B<--colsep> See also: B<--colsep>
@ -1800,9 +1800,13 @@ See also: B<-X> B<--xargs>
Match input source with regexp to set replacement fields. Match input source with regexp to set replacement fields.
Each capture group i.e. '(...)' can be accessed with a replacement With B<--match> you can often avoid pre-processing your input with
field. The replacement fields are named B<{m.n}> where m is the input B<awk> or similar to extract the relevant fields.
source and n is the capture group number:
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} \ parallel --match '(.*),(.*)_(.*)' echo {1.2} {1.3} {1.1} \
::: Gold,Heart_of ::: Gold,Heart_of
@ -1821,7 +1825,7 @@ input source 1:
parallel --match '' --match '([a-z]+)' echo {1} {2.1} \ parallel --match '' --match '([a-z]+)' echo {1} {2.1} \
::: Telephone ::: 10sanitizer ::: Telephone ::: 10sanitizer
See also: B<{>I<n>B<}> See also: B<{>I<n>B<}> B<--colsep>
=item B<--memfree> I<size> =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. each file should be named the first letter of the file name.
parallel 'mkdir -p {=s/(.).*/$1/=}; mv {} {=s/(.).*/$1/=}' ::: * 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}' ::: * 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: Re-arrange (stupid) US date format into (nice) ISO-8601:
parallel --match '(.*)/(.*)/(.*)' echo {1.3}-{1.1}-{1.2} \ parallel --match '(.*)/(.*)/(.*)' echo {1.3}-{1.1:%02d}-{1.2:%02d} \
::: 12/31/1969 01/19/2038 06/01/2002 ::: 12/31/1969 1/19/2038 6/1/2002
Match url into domain and path: Match url into domain and path:
parallel --match 'https://(.*?)/(.*)' echo Domain: {1.1} Path: {1.2} \ parallel --match 'https://(.*?)/(.*)' echo Domain: {1.1} Path: {1.2} \
::: https://example.com/dir/page https://gnu.org/s/parallel ::: 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 | cat log |
parallel --match '\b([a-z0-9.]+):(\d+)\b' echo host:{1.1} port:{1.2} 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. 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 =head2 EXAMPLE: Calling Bash functions
If the composed command is longer than a line, it becomes hard to 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 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 =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 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 =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 B<{=> and B<=}> mark a perl expression. B<pQ> perl-quotes the
string. B<date +%FT%T> is the date in ISO8601 with time. string. B<date +%FT%T> is the date in ISO8601 with time.
=head2 EXAMPLE: Save output in ISO8601 dirs =head2 EXAMPLE: Save output in ISO8601 dirs
Save output from B<ps aux> every second into dirs named Save output from B<ps aux> every second into dirs named

View file

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

View file

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

View file

@ -10,14 +10,21 @@ install_packages() {
INSTALL=${INSTALL:-"sudo apt -y install"} INSTALL=${INSTALL:-"sudo apt -y install"}
# The testsuite depends on this: # The testsuite depends on this:
test_pkgs="imagemagick expect autossh sshpass jq libpod-simple-perl" test_pkgs="imagemagick expect pv zenity"
test_pkgs="$test_pkgs pod2pdf gawk lua5.3 clisp php-cli nodejs" test_pkgs="$test_pkgs autossh sshpass lsh-client lsh-utils jq"
test_pkgs="$test_pkgs mono-csharp-shell libevent-dev tcl libtext-csv-perl" 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 xterm libc6-i386 libcrypt1:i386 virtualbox"
test_pkgs="$test_pkgs libtest-nowarnings-perl xemacs21 pv zenity" test_pkgs="$test_pkgs torsocks net-tools"
test_pkgs="$test_pkgs lsh-client lsh-utils torsocks net-tools python-is-python3" test_pkgs="$test_pkgs reiserfsprogs btrfs-progs exfatprogs f2fs-tools"
test_pkgs="$test_pkgs reiserfsprogs btrfs-progs exfatprogs f2fs-tools xfsprogs" test_pkgs="$test_pkgs xfsprogs"
test_snap_pkgs="groovy julia"
# Debian package # Debian package
packaging_pkgs="dpkg-dev build-essential debhelper osc cvs automake" packaging_pkgs="dpkg-dev build-essential debhelper osc cvs automake"
packaging_pkgs="$packaging_pkgs python3-m2crypto alien python3-pip" packaging_pkgs="$packaging_pkgs python3-m2crypto alien python3-pip"
@ -30,14 +37,14 @@ install_packages() {
sql_pkgs="$sql_pkgs libdbd-mysql-perl rlwrap" sql_pkgs="$sql_pkgs libdbd-mysql-perl rlwrap"
# Compression # 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="$compression_pkgs lzma xz-utils lzip bzip2 lbzip2 lrzip"
compression_pkgs_missing="pxz" compression_pkgs_missing="pxz"
# Shells # Shells
# (csh = bsd-csh that is broken) # (csh = bsd-csh that is broken)
# (ksh93 gone) # (ash ksh93 gone)
shell_pkgs="ash dash fdclone fish fizsh ksh ksh93u+m mksh posh rc rush sash" shell_pkgs="dash fdclone fish fizsh ksh ksh93u+m mksh posh rc rush sash"
shell_pkgs="$shell_pkgs tcsh yash zsh busybox-static" shell_pkgs="$shell_pkgs tcsh yash zsh busybox-static"
# Databases # Databases
@ -59,6 +66,13 @@ install_packages() {
echo Packages missing echo Packages missing
return 1 return 1
fi 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 if parallel -j1 --tag --halt now,success=1 $INSTALL ::: $alt_database ; then
# OK # OK
true true
@ -85,7 +99,11 @@ install_sqlite2() {
cd /tmp/sqlite2 cd /tmp/sqlite2
git clone https://github.com/sqlite/sqlite git clone https://github.com/sqlite/sqlite
cd 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 ./configure --prefix=/usr/local && make -j && sudo make install
} }
@ -276,7 +294,7 @@ add_server_to_hosts() {
} }
vagrant_up() { 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' # After this you should be able to 'vagrant ssh'
} }
@ -347,9 +365,9 @@ add_key_to_auth_key() {
cat ~/.ssh/*pub >> ~/.ssh/authorized_keys cat ~/.ssh/*pub >> ~/.ssh/authorized_keys
parallel --tag --timeout 20 sshaddvagrant ::: $vagrant_names parallel-server{1..4} parallel --tag --timeout 20 sshaddvagrant ::: $vagrant_names parallel-server{1..4}
parallel --tag --timeout 20 sshaddlocal ::: $ips lo localhost 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 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() { install_rsync_on_vagrant() {
@ -657,6 +675,8 @@ rsync_versions() {
autoreconf -fiv autoreconf -fiv
# strlcat strlcpy # strlcat strlcpy
perl -i -pe 's/void (strlc..)/void _$1/' util.c 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 configure_make_proto_install $1
} }
build-v3.0.0() { build-v3.0.0() {
@ -687,7 +707,7 @@ rsync_versions() {
install_tangetools() { install_tangetools() {
( (
git clone https://codeberg.org/tange/tangetools git clone https://git.data.coop/tange/tangetools
cd tangetools && cd tangetools &&
make && make &&
sudo make install sudo make install

View file

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

View file

@ -16,6 +16,20 @@ export -f stdsort
# Test amount of parallelization # 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} # 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() { par_--rpl_group_bug() {
echo 'Bug in --rpl group: $$1_' echo 'Bug in --rpl group: $$1_'
parallel --rpl '{a(.)b} s/$$1_c/o/g' echo {aDb} ::: GD_cD_cd 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' 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() { par_parcat_rm() {
echo 'bug #51691: parcat --rm remove fifo when opened' echo 'bug #51691: parcat --rm remove fifo when opened'
tmp1=$(mktemp) tmp1=$(mktemp)

View file

@ -665,7 +665,7 @@ par_shellquote() {
"$shell" -c perl\ -e\ \'print\ pack\(\"c\*\",1..255\)\'\ \|\ parallel\ -0\ --shellquote "$shell" -c perl\ -e\ \'print\ pack\(\"c\*\",1..255\)\'\ \|\ parallel\ -0\ --shellquote
} }
export -f doit 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() { par_tmp_full() {

View file

@ -433,7 +433,7 @@ par_testquote() {
export -f testquote export -f testquote
# "sash script" does not work # "sash script" does not work
# "sash -f script" does, but is currently not supported by GNU Parallel # "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: # "fdsh" is currently not supported by GNU Parallel:
# It gives ioctl(): Interrupted system call # It gives ioctl(): Interrupted system call
parallel --tag -k testquote ::: fdsh parallel --tag -k testquote ::: fdsh

View file

@ -290,7 +290,7 @@ par_exit_code() {
echo '# Ideally the command should return the same' echo '# Ideally the command should return the same'
echo '# with or without parallel' echo '# with or without parallel'
# These give the same exit code prepended with 'true;' or not # 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 # These do not give the same exit code prepended with 'true;' or not
BAD="bash ksh93 mksh static-sh yash zsh" BAD="bash ksh93 mksh static-sh yash zsh"
doit $OK $BAD doit $OK $BAD
@ -530,7 +530,7 @@ par_memfree() {
par_test_detected_shell() { par_test_detected_shell() {
echo '### bug #42913: Dont use $SHELL but the shell currently running' 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() { test_unknown_shell() {
shell="$1" shell="$1"
tmp="/tmp/test_unknown_shell_$shell" 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 PARALLEL_SHELL=$1 parallel --env myfunc -S lo myfunc ::: OK
} }
export -f myrun 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() { par_exporting_in_zsh() {
@ -221,5 +221,5 @@ par_z_multiple_hosts_repeat_arg() {
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | G par_ "$@" | LC_ALL=C sort | 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;' 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 stdout parallel -S csh@lo --trc {}.out touch {}.out ::: foo_autossh
ls foo_autossh* ls foo_autossh*
rm 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() { par_fish_exit() {

View file

@ -29,63 +29,6 @@ export -f retry
## par_*_man = tests from the man page ## 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() { par__man_bash() {
echo '### bash' echo '### bash'
@ -624,55 +567,6 @@ _EOF
ssh zsh@lo "$myscript" 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() { par_--env_underscore_bash() {
echo '### bash' echo '### bash'
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
@ -1109,39 +1003,6 @@ _EOF
# + remote, locally # + remote, locally
# + variables, variables with funky content, arrays, assoc array, functions, aliases # + 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() { par_funky_bash() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
. `which env_parallel.bash`; . `which env_parallel.bash`;
@ -1452,31 +1313,6 @@ _EOF
ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort 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() { par_env_parallel_bash() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522' echo 'bug #50435: Remote fifo broke in 20150522'
@ -1670,10 +1506,6 @@ _EOF
ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort 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() { par_environment_too_big_bash() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big' 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 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() { par_parset_bash() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo 'parset' echo 'parset'
@ -2448,107 +2217,6 @@ _EOF
### env_parallel_session ### 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() { par_env_parallel_--session_bash() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo '### Test env_parallel --session / --end-session' echo '### Test env_parallel --session / --end-session'

View file

@ -4,30 +4,6 @@
# #
# SPDX-License-Identifier: GPL-3.0-or-later # 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() { par_bash_embed() {
myscript=$(cat <<'_EOF' myscript=$(cat <<'_EOF'
echo '--embed' echo '--embed'
@ -157,7 +133,7 @@ par_env_parallel_big_env() {
echo '### bug #54128: command too long when exporting big env' echo '### bug #54128: command too long when exporting big env'
. env_parallel.bash . env_parallel.bash
env_parallel --session 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 env_parallel -Slo echo ::: OK 2>&1
a=`rand | perl -pe 's/\0//g'| head -c 50000` a=`rand | perl -pe 's/\0//g'| head -c 50000`
env_parallel -Slo echo THIS SHOULD ::: FAIL 2>/dev/null || echo OK 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 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
par__environment_too_big_dash OK_bigvar_remote 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 90 1 1 201
par_seqreplace_long_line 1 parallel: Error: Command line too long (309 >= 210) at input 0: 100 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 ### 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 par_shellquote bash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ' par_shellquote bash par_shellquote bash  !"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<7F>ƒ„…†‡ˆ‰ŠŒ<E280B9>Ž<EFBFBD><C5BD>“”•˜™šœ<E280BA>žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
par_shellquote csh \\\\\\\\ "\ 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 ### Test -q {.}
par_test_m_X 'a' par_test_m_X 'a'
par_test_m_X 'a' par_test_m_X 'a'
par_testquote ash "#&/
par_testquote ash ()*=?'
par_testquote bash "#&/ par_testquote bash "#&/
par_testquote bash ()*=?' par_testquote bash ()*=?'
par_testquote csh "#&/ 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 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 # Ideally the command should return the same
par_exit_code # with or without parallel 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 /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,fail=1 /tmp/mysleep ::: 100 137
par_exit_code csh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137 par_exit_code csh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
@ -3069,7 +3059,6 @@ par_slow_total_jobs 1
par_slow_total_jobs 2 par_slow_total_jobs 2
par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds. 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 ### 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 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 csh Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell dash 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 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 yash Global::shell /usr/bin/bash
par_test_detected_shell test_unknown_shell zsh 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 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 csh Global::shell /usr/bin/csh
par_test_detected_shell test_known_shell_c dash Global::shell /usr/bin/dash 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 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 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_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 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 csh Global::shell /usr/bin/csh
par_test_detected_shell test_known_shell_pipe dash Global::shell /usr/bin/dash par_test_detected_shell test_known_shell_pipe dash Global::shell /usr/bin/dash

View file

@ -1,7 +1,10 @@
WHY DOES THIS FAIL? WHY DOES THIS FAIL?
### --env _ ### --env _
OK from fubar test
In csh this may fail with ignored_var: Undefined variable. In csh this may fail with ignored_var: Undefined variable.
### --env _ with explicit mentioning of normally ignored var $ignored_var ### --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 bug #46120: Suspend should suspend (at least local) children
it should burn 1.9 CPU seconds, but no more than that 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 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/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 Run function in /bin/bash
par_warn_when_exporting_func /bin/bash Function run: OK 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 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 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 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 stderr
par_--ssh_autossh par_--ssh_autossh
par_--ssh_autossh rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] 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_autossh foo_autossh
par_--ssh_lsh ### --ssh lsh par_--ssh_lsh ### --ssh lsh
par_--ssh_lsh OK par_--ssh_lsh OK

View file

@ -1,18 +1,4 @@
### test --env _, env_parallel for different shells ### 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 ### bash
par_--env_underscore_bash ### Testing of --env _ par_--env_underscore_bash ### Testing of --env _
par_--env_underscore_bash variables in aliases in and arrays in functions work 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 aliases in functions work
par_--env_underscore_ksh /bin/ksh: myecho: not found par_--env_underscore_ksh /bin/ksh: myecho: not found
par_--env_underscore_ksh OK if no myecho ^^^^^^^^^^^^^^^^^ 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 OK if no myecho ^^^^^^^^^^^^^^^^^
par_--env_underscore_ksh /bin/ksh: myfunc: not found par_--env_underscore_ksh /bin/ksh: myfunc: not found
par_--env_underscore_ksh OK if no myfunc ^^^^^^^^^^^^^^^^^ 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 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 EW: 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_func: inaccessible or not found
par_--env_underscore_mksh error=OK par_--env_underscore_mksh error=OK
par_--env_underscore_mksh error=OK par_--env_underscore_mksh error=OK
par_--env_underscore_mksh aliases in and arrays in functions work 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 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 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 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 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_mksh OK if no myfunc ^^^^^^^^^^^^^^^^^
par_--env_underscore_sh ### sh par_--env_underscore_sh ### sh
par_--env_underscore_sh ### Testing of --env _ 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 OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ myfunc
par_--env_underscore_zsh script:2: command not found: myfunc par_--env_underscore_zsh script:2: command not found: myfunc
par_--env_underscore_zsh OK if no .^^^^^^^^^^^^^^^^^^^^^^^^^ 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 ### bash
par__man_bash ### From man env_parallel par__man_bash ### From man env_parallel
par__man_bash aliases with = & " ! ' work 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 exit value 2 should be 2
par__man_zsh Unknown option: no-such-option par__man_zsh Unknown option: no-such-option
par__man_zsh exit value 255 should be 255 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 ### Test env_parallel --session / --end-session
par_env_parallel_--session_bash ### level0 should be hidden, level1 should be transferred par_env_parallel_--session_bash ### level0 should be hidden, level1 should be transferred
par_env_parallel_--session_bash 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 ### level0 should be hidden, level1 should be transferred
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level0func: inaccessible or not found par_env_parallel_--session_mksh EW: 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]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level0func: inaccessible or not found par_env_parallel_--session_mksh EW: /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: level0alias: inaccessible or not found
par_env_parallel_--session_mksh l1var par_env_parallel_--session_mksh l1var
par_env_parallel_--session_mksh l1func par_env_parallel_--session_mksh l1func
par_env_parallel_--session_mksh l1alias 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 ### level0+1 should be hidden, level2 should be transferred
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level0func: inaccessible or not found par_env_parallel_--session_mksh EW: 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]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level0func: inaccessible or not found par_env_parallel_--session_mksh EW: /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: level0alias: inaccessible or not found
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level1func: inaccessible or not found par_env_parallel_--session_mksh EW: 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]: level1alias: inaccessible or not found
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level1func: inaccessible or not found par_env_parallel_--session_mksh EW: /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: level1alias: inaccessible or not found
par_env_parallel_--session_mksh l2var par_env_parallel_--session_mksh l2var
par_env_parallel_--session_mksh l2func par_env_parallel_--session_mksh l2func
par_env_parallel_--session_mksh l2alias 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 ### level0 should be hidden, level1+2 should be transferred
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: script[9]: level0func: inaccessible or not found par_env_parallel_--session_mksh EW: 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]: level0alias: inaccessible or not found
par_env_parallel_--session_mksh par_env_parallel_--session_mksh
par_env_parallel_--session_mksh fail par_env_parallel_--session_mksh fail
par_env_parallel_--session_mksh W: /bin/mksh: level0func: inaccessible or not found par_env_parallel_--session_mksh EW: /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: level0alias: inaccessible or not found
par_env_parallel_--session_mksh l1var par_env_parallel_--session_mksh l1var
par_env_parallel_--session_mksh l1func par_env_parallel_--session_mksh l1func
par_env_parallel_--session_mksh l1alias 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 l2func
par_env_parallel_--session_mksh l2alias par_env_parallel_--session_mksh l2alias
par_env_parallel_--session_mksh level2 array OK 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 EW: /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 EW: 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 EW: /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: 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 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 after varafter_OK
par_env_parallel_--session_zsh array after arrayafter_OK par_env_parallel_--session_zsh array after arrayafter_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 OK par_env_parallel_bash OK
par_env_parallel_bash alias line 1 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 bug #52534: Tail of multiline alias is ignored
par_env_parallel_zsh data from stdin par_env_parallel_zsh data from stdin
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 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
par_environment_too_big_bash OK_bigvar_remote 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_sh fail_bigfunc_quote_remote-not-supported
par_environment_too_big_tcsh Not implemented par_environment_too_big_tcsh Not implemented
par_environment_too_big_zsh moved to hwdep1.sh 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 
par_funky_bash -funkymultiline par_funky_bash -funkymultiline
par_funky_bash -funkymultiline par_funky_bash -funkymultiline
par_funky_bash space 6 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 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 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 assoc_val_a par_funky_bash assoc_val_a
par_funky_bash function_works par_funky_bash function_works
@ -1797,35 +1623,6 @@ par_funky_zsh function_works
par_funky_zsh function_works_over_ssh par_funky_zsh function_works_over_ssh
par_funky_zsh myvar works par_funky_zsh myvar works
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
par_parset_bash ### parset into array par_parset_bash ### parset into array
par_parset_bash foo bar baz 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.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.110 (). Using 1.
par__sshlogin_range parallel: Warning: Could not figure out number of cpus on ip251.0.9.111 (). 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 --embed
par_bash_embed Redirect the output to a file and add your changes at the end: 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 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_once%%
BASH_FUNC_run_test%% BASH_FUNC_run_test%%
_ _
mysqlrootpass
qTMPDIR qTMPDIR
qqTMPDIR qqTMPDIR
testsuitedir testsuitedir
@ -1062,19 +1061,16 @@ cat: num_%header: No such file or directory
/usr/bin/bash: line 2: foo: command not found /usr/bin/bash: line 2: foo: command not found
#!/usr/bin/perl #!/usr/bin/perl
print "@ARGV\n" print "@ARGV\n"
Warning: unknown mime-type for "@ARGV\n" -- using "application/octet-stream"
Error: no such file "@ARGV\n" Error: no such file "@ARGV\n"
parallel perl_echo ::: foo bar parallel perl_echo ::: foo bar
/usr/bin/bash: line 1: perl_echo: command not found /usr/bin/bash: line 1: perl_echo: command not found
#!/usr/bin/parallel --shebang-wrap /usr/bin/perl #!/usr/bin/parallel --shebang-wrap /usr/bin/perl
print "@ARGV\n" print "@ARGV\n"
Warning: unknown mime-type for "@ARGV\n" -- using "application/octet-stream"
Error: no such file "@ARGV\n" Error: no such file "@ARGV\n"
perl_echo foo bar perl_echo foo bar
/usr/bin/bash: line 1: perl_echo: command not found /usr/bin/bash: line 1: perl_echo: command not found
#!/usr/bin/parallel --shebang-wrap /usr/bin/perl #!/usr/bin/parallel --shebang-wrap /usr/bin/perl
print "Arguments @ARGV\n"; print "Arguments @ARGV\n";
Warning: unknown mime-type for "Arguments @ARGV\n" -- using "application/octet-stream"
Error: no such file "Arguments @ARGV\n" Error: no such file "Arguments @ARGV\n"
#!/usr/bin/parallel --shebang-wrap /usr/bin/python #!/usr/bin/parallel --shebang-wrap /usr/bin/python
print 'Arguments', str(sys.argv) print 'Arguments', str(sys.argv)
@ -1095,7 +1091,6 @@ Arguments
#!/usr/bin/parallel --shebang-wrap /usr/bin/ruby #!/usr/bin/parallel --shebang-wrap /usr/bin/ruby
print "Arguments " print "Arguments "
puts ARGV puts ARGV
Warning: unknown mime-type for "Arguments " -- using "application/octet-stream"
Error: no such file "Arguments " Error: no such file "Arguments "
/usr/bin/bash: line 4: puts: command not found /usr/bin/bash: line 4: puts: command not found
#!/usr/bin/parallel --shebang-wrap /usr/bin/octave #!/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 Bash exit value 159
par_exit 31 Sem 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 31 environment: line 1: PID Bad system call (core dumped) bash -c 'kill -'$1' $$'
par_exit 32 Bash exit value 0 par_exit 32 Bash exit value 160
par_exit 32 Sem exit value 0 par_exit 32 Sem exit value 160
par_exit 33 Bash exit value 0 par_exit 32 environment: line 1: PID Unknown signal 32 bash -c 'kill -'$1' $$'
par_exit 33 Sem exit value 0 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 Bash exit value 162
par_exit 34 Sem 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' $$' par_exit 34 environment: line 1: PID Real-time signal 0 bash -c 'kill -'$1' $$'