Released as 20220622 ('Bongbong')

This commit is contained in:
Ole Tange 2022-06-22 22:32:57 +08:00
parent a91ba03bac
commit 42cc048154
28 changed files with 290 additions and 158 deletions

View file

@ -167,8 +167,11 @@ pack_unpack_and_test_build:
cd parallel-$(YYYYMMDD) && \ cd parallel-$(YYYYMMDD) && \
./configure && make -j && sudo make -j install ./configure && make -j && sudo make -j install
zshcompletion=${datarootdir}/zsh/site-functions/_parallel zshcompletiondir=${datarootdir}/zsh/site-functions
zshcompletion=${zshcompletiondir}/_parallel
install-data-hook: install-data-hook:
mkdir -p ${datarootdir}/bash-completion/completions
mkdir -p ${zshcompletiondir}
parallel --shell-completion bash > ${datarootdir}/bash-completion/completions/parallel parallel --shell-completion bash > ${datarootdir}/bash-completion/completions/parallel
echo '#compdef parallel' > ${zshcompletion} echo '#compdef parallel' > ${zshcompletion}
echo '(( $$+functions[_comp_parallel] )) ||' >> ${zshcompletion} echo '(( $$+functions[_comp_parallel] )) ||' >> ${zshcompletion}

View file

@ -281,7 +281,8 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
SUBDIRS = src SUBDIRS = src
zshcompletion = ${datarootdir}/zsh/site-functions/_parallel zshcompletiondir = ${datarootdir}/zsh/site-functions
zshcompletion = ${zshcompletiondir}/_parallel
EXTRA_DIST = CITATION CITATION.cff CREDITS LICENSES/CC-BY-SA-4.0.txt LICENSES/GFDL-1.3-or-later.txt LICENSES/GPL-3.0-or-later.txt EXTRA_DIST = CITATION CITATION.cff CREDITS LICENSES/CC-BY-SA-4.0.txt LICENSES/GFDL-1.3-or-later.txt LICENSES/GPL-3.0-or-later.txt
all: config.h all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive $(MAKE) $(AM_MAKEFLAGS) all-recursive
@ -928,6 +929,8 @@ pack_unpack_and_test_build:
cd parallel-$(YYYYMMDD) && \ cd parallel-$(YYYYMMDD) && \
./configure && make -j && sudo make -j install ./configure && make -j && sudo make -j install
install-data-hook: install-data-hook:
mkdir -p ${datarootdir}/bash-completion/completions
mkdir -p ${zshcompletiondir}
parallel --shell-completion bash > ${datarootdir}/bash-completion/completions/parallel parallel --shell-completion bash > ${datarootdir}/bash-completion/completions/parallel
echo '#compdef parallel' > ${zshcompletion} echo '#compdef parallel' > ${zshcompletion}
echo '(( $$+functions[_comp_parallel] )) ||' >> ${zshcompletion} echo '(( $$+functions[_comp_parallel] )) ||' >> ${zshcompletion}

17
NEWS
View file

@ -1,3 +1,20 @@
20220622
New in this release:
* , can be used in --sshlogin if quoted as \, or ,,
* --plus {/#regexp/str} replace ^regexp with str.
* --plus {/%regexp/str} replace regexp$ with str.
* --plus {//regexp/str} replace every regexp with str.
* 'make install' installs bash+zsh completion files.
* Bug fixes and man page updates.
20220522 20220522
New in this release: New in this release:

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-20220522.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20220622.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20220522.tar.bz2.sig wget https://ftpmirror.gnu.org/parallel/parallel-20220622.tar.bz2.sig
gpg parallel-20220522.tar.bz2.sig gpg parallel-20220622.tar.bz2.sig
bzip2 -dc parallel-20220522.tar.bz2 | tar xvf - bzip2 -dc parallel-20220622.tar.bz2 | tar xvf -
cd parallel-20220522 cd parallel-20220622
./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-20220522.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20220622.tar.bz2
wget https://ftpmirror.gnu.org/parallel/parallel-20220522.tar.bz2.sig wget https://ftpmirror.gnu.org/parallel/parallel-20220622.tar.bz2.sig
gpg parallel-20220522.tar.bz2.sig gpg parallel-20220622.tar.bz2.sig
bzip2 -dc parallel-20220522.tar.bz2 | tar xvf - bzip2 -dc parallel-20220622.tar.bz2 | tar xvf -
cd parallel-20220522 cd parallel-20220622
./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. (2022, May 22). GNU Parallel 20220522 ('NATO'). Tange, O. (2022, June 22). GNU Parallel 20220622 ('Bongbong').
Zenodo. https://doi.org/10.5281/zenodo.6570228 Zenodo. https://doi.org/10.5281/zenodo.6682930
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 20220522. # Generated by GNU Autoconf 2.71 for parallel 20220622.
# #
# 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='20220522' PACKAGE_VERSION='20220622'
PACKAGE_STRING='parallel 20220522' PACKAGE_STRING='parallel 20220622'
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 20220522 to adapt to many kinds of systems. \`configure' configures parallel 20220622 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 20220522:";; short | recursive ) echo "Configuration of parallel 20220622:";;
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 20220522 parallel configure 20220622
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 20220522, which was It was created by parallel $as_me 20220622, 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='20220522' VERSION='20220622'
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 20220522, which was This file was extended by parallel $as_me 20220622, 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 20220522 parallel config.status 20220622
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],[20220522],[bug-parallel@gnu.org]) AC_INIT([parallel],[20220622],[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

@ -13,9 +13,6 @@ Quote of the month:
I used GNU Parallel to run a script locally that did what a big distributed system did, quicker and more reliably. It got to the point where people would just ask me to "run the thing" on my laptop instead of waiting for the cron. I used GNU Parallel to run a script locally that did what a big distributed system did, quicker and more reliably. It got to the point where people would just ask me to "run the thing" on my laptop instead of waiting for the cron.
-- winrid@ycombinator -- winrid@ycombinator
Parallel has been (and still is) super useful and simple tool for speeding up all kinds of shell tasks during my career.
-- ValtteriL@ycombinator
parallel is so useful and i use it multiple times daily. parallel is so useful and i use it multiple times daily.
-- arrakeen@ycombinator -- arrakeen@ycombinator
@ -189,6 +186,9 @@ https://negfeedback.blogspot.com/2020/05/indispensable-command-line-tools.html
=== Used === === Used ===
Parallel has been (and still is) super useful and simple tool for speeding up all kinds of shell tasks during my career.
-- ValtteriL@ycombinator
It's amazing how fast you can get with bash pipelines and GNU Parallel. It's amazing how fast you can get with bash pipelines and GNU Parallel.
-- Eric Pauley @EricPauley_ -- Eric Pauley @EricPauley_

View file

@ -260,30 +260,23 @@ GNU Parallel 20220522 ('NATO') has been released. It is available for download a
Quote of the month: Quote of the month:
It's amazing how fast you can get with bash pipelines and GNU Parallel. Parallel has been (and still is) super useful and simple tool for speeding up all kinds of shell tasks during my career.
-- Eric Pauley @EricPauley_ -- ValtteriL@ycombinator
New in this release: New in this release:
* --latest-line shows only the latest line of running jobs. * , can be used in --sshlogin if quoted as \, or ,,
* --color colors output in different colors per job (this obsoletes --ctag). * --plus {/#regexp/str} replace ^regexp with str.
* xargs compatibility: --process-slot-var foo sets $foo to jobslot-1. * --plus {/%regexp/str} replace regexp$ with str.
* xargs compatibility: --open-tty opens the terminal on stdin (standard input). * --plus {//regexp/str} replace every regexp with str.
* 'make install' installs bash+zsh completion files.
* Bug fixes and man page updates. * Bug fixes and man page updates.
News about GNU Parallel:
* Building a fault-tolerant work queue for command-line executions with GNU Parallel https://www.jvt.me/posts/2022/04/28/shell-queue/
* Make your code do more, with less https://www.blopig.com/blog/2022/05/make-your-code-do-more-with-less/
* W09 B IntroHPC II 20220513 gnu parallel https://www.youtube.com/watch?v=2udvC90rIa4
Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html
GNU Parallel - For people who live life in the parallel lane. GNU Parallel - For people who live life in the parallel lane.

View file

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# install - install a program, script, or datafile # install - install a program, script, or datafile
scriptversion=2018-03-11.20; # UTC scriptversion=2020-11-14.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was # This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the # later released in X11R6 (xc/config/util/install.sh) with the
@ -69,6 +69,11 @@ posix_mkdir=
# Desired mode of installed file. # Desired mode of installed file.
mode=0755 mode=0755
# Create dirs (including intermediate dirs) using mode 755.
# This is like GNU 'install' as of coreutils 8.32 (2020).
mkdir_umask=22
backupsuffix=
chgrpcmd= chgrpcmd=
chmodcmd=$chmodprog chmodcmd=$chmodprog
chowncmd= chowncmd=
@ -99,18 +104,28 @@ Options:
--version display version info and exit. --version display version info and exit.
-c (ignored) -c (ignored)
-C install only if different (preserve the last data modification time) -C install only if different (preserve data modification time)
-d create directories instead of installing files. -d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP. -g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE. -m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER. -o USER $chownprog installed files to USER.
-p pass -p to $cpprog.
-s $stripprog installed files. -s $stripprog installed files.
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
-t DIRECTORY install into DIRECTORY. -t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory. -T report an error if DSTFILE is a directory.
Environment variables override the default commands: Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG RMPROG STRIPPROG
By default, rm is invoked with -f; when overridden with RMPROG,
it's up to you to specify -f if you want it.
If -S is not specified, no backups are attempted.
Email bug reports to bug-automake@gnu.org.
Automake home page: https://www.gnu.org/software/automake/
" "
while test $# -ne 0; do while test $# -ne 0; do
@ -137,8 +152,13 @@ while test $# -ne 0; do
-o) chowncmd="$chownprog $2" -o) chowncmd="$chownprog $2"
shift;; shift;;
-p) cpprog="$cpprog -p";;
-s) stripcmd=$stripprog;; -s) stripcmd=$stripprog;;
-S) backupsuffix="$2"
shift;;
-t) -t)
is_target_a_directory=always is_target_a_directory=always
dst_arg=$2 dst_arg=$2
@ -255,6 +275,10 @@ do
dstdir=$dst dstdir=$dst
test -d "$dstdir" test -d "$dstdir"
dstdir_status=$? dstdir_status=$?
# Don't chown directories that already exist.
if test $dstdir_status = 0; then
chowncmd=""
fi
else else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
@ -301,22 +325,6 @@ do
if test $dstdir_status != 0; then if test $dstdir_status != 0; then
case $posix_mkdir in case $posix_mkdir in
'') '')
# Create intermediate dirs using mode 755 as modified by the umask.
# This is like FreeBSD 'install' as of 1997-10-28.
umask=`umask`
case $stripcmd.$umask in
# Optimize common cases.
*[2367][2367]) mkdir_umask=$umask;;
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
*[0-7])
mkdir_umask=`expr $umask + 22 \
- $umask % 100 % 40 + $umask % 20 \
- $umask % 10 % 4 + $umask % 2
`;;
*) mkdir_umask=$umask,go-w;;
esac
# With -d, create the new directory with the user-specified mode. # With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask. # Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then if test -n "$dir_arg"; then
@ -326,22 +334,20 @@ do
fi fi
posix_mkdir=false posix_mkdir=false
case $umask in # The $RANDOM variable is not portable (e.g., dash). Use it
*[123567][0-7][0-7])
# POSIX mkdir -p sets u+wx bits regardless of umask, which
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
# Note that $RANDOM variable is not portable (e.g. dash); Use it
# here however when possible just to lower collision chance. # here however when possible just to lower collision chance.
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 trap '
ret=$?
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
exit $ret
' 0
# Because "mkdir -p" follows existing symlinks and we likely work # Because "mkdir -p" follows existing symlinks and we likely work
# directly in world-writeable /tmp, make sure that the '$tmpdir' # directly in world-writeable /tmp, make sure that the '$tmpdir'
# directory is successfully created first before we actually test # directory is successfully created first before we actually test
# 'mkdir -p' feature. # 'mkdir -p'.
if (umask $mkdir_umask && if (umask $mkdir_umask &&
$mkdirprog $mkdir_mode "$tmpdir" && $mkdirprog $mkdir_mode "$tmpdir" &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
@ -371,7 +377,6 @@ do
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi fi
trap '' 0;; trap '' 0;;
esac;;
esac esac
if if
@ -382,7 +387,7 @@ do
then : then :
else else
# The umask is ridiculous, or mkdir does not conform to POSIX, # mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the # or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go. # directory the slow way, step by step, checking for races as we go.
@ -411,7 +416,7 @@ do
prefixes= prefixes=
else else
if $posix_mkdir; then if $posix_mkdir; then
(umask=$mkdir_umask && (umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently. # Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1 test -d "$prefix" || exit 1
@ -451,7 +456,18 @@ do
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name. # Copy the file name to the temp name.
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && (umask $cp_umask &&
{ test -z "$stripcmd" || {
# Create $dsttmp read-write so that cp doesn't create it read-only,
# which would cause strip to fail.
if test -z "$doit"; then
: >"$dsttmp" # No need to fork-exec 'touch'.
else
$doit touch "$dsttmp"
fi
}
} &&
$doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits. # and set any options; do chmod last to preserve setuid bits.
# #
@ -477,6 +493,13 @@ do
then then
rm -f "$dsttmp" rm -f "$dsttmp"
else else
# If $backupsuffix is set, and the file being installed
# already exists, attempt a backup. Don't worry if it fails,
# e.g., if mv doesn't support -f.
if test -n "$backupsuffix" && test -f "$dst"; then
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
fi
# Rename the file to the real destination. # Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
@ -491,9 +514,9 @@ do
# file should still install successfully. # file should still install successfully.
{ {
test ! -f "$dst" || test ! -f "$dst" ||
$doit $rmcmd -f "$dst" 2>/dev/null || $doit $rmcmd "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
} || } ||
{ echo "$0: cannot unlink or rename $dst" >&2 { echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1 (exit 1); exit 1

View file

@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC scriptversion=2018-03-07.03; # UTC
# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Copyright (C) 1996-2021 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify

View file

@ -1,8 +1,7 @@
<directory name="parallel" rev="326" vrev="2" srcmd5="2ff455f868b451b0acf2559d65b7616c"> <directory name="parallel" rev="328" vrev="2" srcmd5="4bc4f3b4485f9caf2e4fb4f339917564">
<entry name="PKGBUILD" md5="e4fef9aeac03dd91b231bd23876dbdaf" size="936" mtime="1653333334" /> <entry name="PKGBUILD" md5="22c1acdb651034b1d1636e9f78faded9" size="1070" mtime="1655879579" />
<entry name="parallel-20220522.tar.bz2" md5="ce4e3055e5bc318bd4df1fcd74e399bc" size="2372683" mtime="1653333335" /> <entry name="parallel-20220622.tar.bz2" md5="6b189242185b5b550ce98c9cf88bdd27" size="2378286" mtime="1655879584" />
<entry name="parallel.spec" md5="dfa4b6691d57f32d68d5fe022d0e1801" size="5713" mtime="1653216428" /> <entry name="parallel.spec" md5="1ffb17b2aeda963562da6e6461e83c1d" size="5713" mtime="1655878836" />
<entry name="parallel_20220422.tar.gz" md5="4ece6ee823ae7b492081af3991b4ae86" size="2638371" mtime="1653216428" /> <entry name="parallel_20220522.dsc" md5="eaa20305eb8b4af2b004225b3a93cdd4" size="556" mtime="1655878837" />
<entry name="parallel_20220522.dsc" md5="924717a2e509cc1868b8d0ce0e7621ec" size="556" mtime="1653333335" /> <entry name="parallel_20220522.tar.gz" md5="49ce83ed2b11c54d17d7b25e12267101" size="2629819" mtime="1655878845" />
<entry name="parallel_20220522.tar.gz" md5="b2641b739cbf2cdb17fc9b7db9a18913" size="2629816" mtime="1653333335" />
</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: 20220522 Version: 20220622
Release: 1.3 Release: 1.3
License: GPL-3.0-or-later License: GPL-3.0-or-later
Group: Productivity/File utilities Group: Productivity/File utilities

View file

@ -15,7 +15,7 @@ updater() {
export MON=`date +%b` export MON=`date +%b`
export MONTH=`date +%B` export MONTH=`date +%B`
TAG=$(echo $SPCTAG | perl -pe 's/ //g') TAG=$(echo $SPCTAG | perl -pe 's/ //g')
echo Tag=$TAG = "$SPCTAG" Date:$YYYYMMDD Year:$YYYY Mon:$MON Month:$MONTH DOI:$DOI echo Tag=$TAG=\"$SPCTAG\" Date:$YYYYMMDD Year:$YYYY Mon:$MON Month:$MONTH DOI:$DOI
export TITLE="GNU Parallel $YYYYMMDD ('$SPCTAG')" export TITLE="GNU Parallel $YYYYMMDD ('$SPCTAG')"
if [ -z "$DOINO" ] ; then if [ -z "$DOINO" ] ; then

View file

@ -395,7 +395,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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

@ -397,7 +397,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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

@ -395,7 +395,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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

@ -378,7 +378,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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

@ -380,7 +380,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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

@ -395,7 +395,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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

@ -370,7 +370,7 @@ _parset_main() {
fi fi
if [ "$_parset_NAME" = "--version" ] ; then if [ "$_parset_NAME" = "--version" ] ; then
# shellcheck disable=SC2006 # shellcheck disable=SC2006
echo "parset 20220522 (GNU parallel `parallel --minversion 1`)" echo "parset 20220622 (GNU parallel `parallel --minversion 1`)"
echo "Copyright (C) 2007-2022 Ole Tange, http://ole.tange.dk and Free Software" echo "Copyright (C) 2007-2022 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 = 20220522; $Global::version = 20220622;
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

@ -2654,7 +2654,7 @@ sub check_invalid_option_combinations() {
sub init_globals() { sub init_globals() {
# Defaults: # Defaults:
$Global::version = 20220607; $Global::version = 20220622;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$::name = "GNU Parallel"; $::name = "GNU Parallel";
$Global::infinity = 2**31; $Global::infinity = 2**31;
@ -5525,8 +5525,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. (2022, May 22). GNU Parallel 20220522 ('NATO').", " Tange, O. (2022, June 22). GNU Parallel 20220622 ('Bongbong').",
" Zenodo. https://doi.org/10.5281/zenodo.6570228", " Zenodo. https://doi.org/10.5281/zenodo.6682930",
"", "",
# 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
@ -5558,8 +5558,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. (2022, May 22). GNU Parallel 20220522 ('NATO').", " Tange, O. (2022, June 22). GNU Parallel 20220622 ('Bongbong').",
" Zenodo. https://doi.org/10.5281/zenodo.6570228", " Zenodo. https://doi.org/10.5281/zenodo.6682930",
"", "",
# 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
@ -5686,20 +5686,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_2022_6570228,", "\@software{tange_2022_6682930,",
" author = {Tange, Ole},", " author = {Tange, Ole},",
" title = {GNU Parallel 20220522 ('NATO')},", " title = {GNU Parallel 20220622 ('Bongbong')},",
" month = May,", " month = Jun,",
" year = 2022,", " year = 2022,",
" 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.6570228},", " doi = {10.5281/zenodo.6682930},",
" url = {https://doi.org/10.5281/zenodo.6570228}", " url = {https://doi.org/10.5281/zenodo.6682930}",
"}", "}",
"", "",
"(Feel free to use \\nocite{tange_2022_6570228})", "(Feel free to use \\nocite{tange_2022_6682930})",
"", "",
# 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

@ -748,7 +748,7 @@ B<--transfer>, B<--transferfile> or B<--return>.
See also: B<--basefile> B<--transfer> B<--transferfile> B<--sshlogin> See also: B<--basefile> B<--transfer> B<--transferfile> B<--sshlogin>
B<--return> B<--return>
=item B<--color> (alpha testing) =item B<--color> (beta testing)
Colour output. Colour output.
@ -1569,9 +1569,9 @@ Example:
See also: B<--line-buffer> See also: B<--line-buffer>
=item B<--line-buffer> (alpha testing) =item B<--line-buffer> (beta testing)
=item B<--lb> (alpha testing) =item B<--lb> (beta testing)
Buffer output on line basis. Buffer output on line basis.
@ -1811,9 +1811,9 @@ there will be several job sequence 1.
See also: B<--nonall> B<--sshlogin> See also: B<--nonall> B<--sshlogin>
=item B<--open-tty> (alpha testing) =item B<--open-tty> (beta testing)
=item B<-o> (alpha testing) =item B<-o> (beta testing)
Open terminal tty. Open terminal tty.
@ -1912,7 +1912,7 @@ called with B<--sshlogin>).
See also: B<--profile> See also: B<--profile>
=item B<--plus> =item B<--plus> (alpha testing)
Add more replacement strings. Add more replacement strings.
@ -1963,7 +1963,7 @@ inspired by bash's parameter expansion:
See also: B<--rpl> B<{}> See also: B<--rpl> B<{}>
=item B<--process-slot-var> I<varname> (alpha testing) =item B<--process-slot-var> I<varname> (beta testing)
Set the environment variable I<varname> to the jobslot number-1. Set the environment variable I<varname> to the jobslot number-1.
@ -2846,7 +2846,7 @@ B<--shebang-wrap> must be set as the first option.
See also: B<--shebang> See also: B<--shebang>
=item B<--shell-completion> I<shell> (alpha testing) =item B<--shell-completion> I<shell> (beta testing)
Generate shell completion code for interactive shells. Generate shell completion code for interactive shells.
@ -2995,13 +2995,13 @@ I<duration> is in seconds, but can be postfixed with s, m, h, or d.
See also: TIME POSTFIXES B<--sshlogin> B<--delay> See also: TIME POSTFIXES B<--sshlogin> B<--delay>
=item B<--sshlogin> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> =item B<--sshlogin> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> (alpha testing)
=item B<--sshlogin> I<@hostgroup> =item B<--sshlogin> I<@hostgroup> (alpha testing)
=item B<-S> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> =item B<-S> I<[@hostgroups/][ncpus/]sshlogin[,[@hostgroups/][ncpus/]sshlogin[,...]]> (alpha testing)
=item B<-S> I<@hostgroup> =item B<-S> I<@hostgroup> (alpha testing)
Distribute jobs to remote computers. Distribute jobs to remote computers.

View file

@ -3436,6 +3436,81 @@ https://github.com/rudymatela/evenmoreutils/blob/master/man/p.1.adoc
(Last checked: 2022-04) (Last checked: 2022-04)
=head2 DIFFERENCES BETWEEN senechal AND GNU Parallel
Summary (see legend above):
=over
=item I1 - - - - - -
=item M1 - M3 - - M6
=item O1 - O3 O4 - - - x x -
=item E1 - - - - - -
=item - - - - - - - - -
=item - -
=back
B<seneschal> only starts the first job after reading the last job, and
output from the first job is only printed after the last job finishes.
1 byte of output requites 3.5 bytes of RAM.
This makes it impossible to have a total output bigger than the
virtual memory.
Even though output is kept in RAM outputing is quite slow: 30 MB/s.
Output larger than 4 GB causes random problems - it looks like a race
condition.
This:
echo 1 | seneschal --prefix='yes `seq 1000`|head -c 1G' >/dev/null
takes 4100(!) CPU seconds to run on a 64C64T server, but only 140 CPU
seconds on a 4C8T laptop. So it looks like B<seneschal> wastes a lot
of CPU time coordinating the CPUs.
Compare this to:
echo 1 | time -v parallel -N0 'yes `seq 1000`|head -c 1G' >/dev/null
which takes 3-8 CPU seconds.
=head3 EXAMPLES FROM seneschal README.md
1$ echo $REPOS | seneschal --prefix="cd {} && git pull"
# If $REPOS is newline separated
1$ echo "$REPOS" | parallel -k "cd {} && git pull"
# If $REPOS is space separated
1$ echo -n "$REPOS" | parallel -d' ' -k "cd {} && git pull"
COMMANDS="pwd
sleep 5 && echo boom
echo Howdy
whoami"
2$ echo "$COMMANDS" | seneschal --debug
2$ echo "$COMMANDS" | parallel -k -v
3$ ls -1 | seneschal --prefix="pushd {}; git pull; popd;"
3$ ls -1 | parallel -k "pushd {}; git pull; popd;"
# Or if current dir also contains files:
3$ parallel -k "pushd {}; git pull; popd;" ::: */
https://github.com/TheWizardTower/seneschal
(Last checked: 2022-06)
=head2 Todo =head2 Todo
http://code.google.com/p/push/ (cannot compile) http://code.google.com/p/push/ (cannot compile)
@ -3467,6 +3542,7 @@ https://vicerveza.homeunix.net/~viric/soft/ts/
https://github.com/chapmanjacobd/que https://github.com/chapmanjacobd/que
=head1 TESTING OTHER TOOLS =head1 TESTING OTHER TOOLS
There are certain issues that are very common on parallelizing There are certain issues that are very common on parallelizing

View file

@ -122,7 +122,7 @@ GetOptions(
"help" => \$opt::dummy, "help" => \$opt::dummy,
) || exit(255); ) || exit(255);
$Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1]; $Global::progname = ($0 =~ m:(^|/)([^/]+)$:)[1];
$Global::version = 20220522; $Global::version = 20220622;
if($opt::version) { version(); exit 0; } if($opt::version) { version(); exit 0; }
@Global::sortoptions = grep { ! /^-D$/ } @Global::sortoptions = grep { ! /^-D$/ }
shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]); shell_quote(@ARGV_before[0..($#ARGV_before-$#ARGV-1)]);

View file

@ -600,7 +600,7 @@ $Global::Initfile && unlink $Global::Initfile;
exit ($err); exit ($err);
sub parse_options { sub parse_options {
$Global::version = 20220522; $Global::version = 20220622;
$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

@ -35,7 +35,7 @@ install_packages() {
# Shells # Shells
# (csh = bsd-csh that is broken) # (csh = bsd-csh that is broken)
shell_pkgs="ash dash fdclone fish fizsh ksh ksh93u+m ksh93 mksh posh rc rush sash" shell_pkgs="ash dash fdclone fish fizsh ksh ksh93u+m ksh93 mksh posh rc rush sash"
shell_pkgs="$shell_pkgs tcsh yash zsh" shell_pkgs="$shell_pkgs tcsh yash zsh busybox-static"
# Databases # Databases
database_pkgs="postgresql mysql-server sqlite" database_pkgs="postgresql mysql-server sqlite"
@ -187,7 +187,7 @@ create_shell_logins() {
echo '# (Re-)create user' echo '# (Re-)create user'
# Racecondition: if multiple adds a group it will the same group ID # Racecondition: if multiple adds a group it will the same group ID
shellsplus | (shellsplus; echo withpassword) |
parallel --lb --halt soon,fail=1 --timeout 1000% --retries 5 --tag -j1 del_add_user || parallel --lb --halt soon,fail=1 --timeout 1000% --retries 5 --tag -j1 del_add_user ||
(echo Creation failed: $?; false) (echo Creation failed: $?; false)
} }

View file

@ -234,7 +234,16 @@ par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000/sr
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Nothing to be done for 'install-exec-am'. par_test_build_and_install make[0]: Nothing to be done for 'install-exec-am'.
par_test_build_and_install make[0]: Nothing to be done for 'install-data-am'. par_test_build_and_install make install-data-hook
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install mkdir -p /tmp/parallel-install/share/bash-completion/completions
par_test_build_and_install mkdir -p /tmp/parallel-install/share/zsh/site-functions
par_test_build_and_install parallel --shell-completion bash > /tmp/parallel-install/share/bash-completion/completions/parallel
par_test_build_and_install echo '#compdef parallel' > /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo '(( $+functions[_comp_parallel] )) ||' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo ' eval "$(parallel --shell-completion auto)" &&' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo ' _comp_parallel' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
@ -715,7 +724,16 @@ par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000/sr
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Nothing to be done for 'install-exec-am'. par_test_build_and_install make[0]: Nothing to be done for 'install-exec-am'.
par_test_build_and_install make[0]: Nothing to be done for 'install-data-am'. par_test_build_and_install make install-data-hook
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install mkdir -p /tmp/parallel-install/share/bash-completion/completions
par_test_build_and_install mkdir -p /tmp/parallel-install/share/zsh/site-functions
par_test_build_and_install parallel --shell-completion bash > /tmp/parallel-install/share/bash-completion/completions/parallel
par_test_build_and_install echo '#compdef parallel' > /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo '(( $+functions[_comp_parallel] )) ||' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo ' eval "$(parallel --shell-completion auto)" &&' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo ' _comp_parallel' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'
par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Leaving directory '/tmp/parallel-00000000'