mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-25 15:37:56 +00:00
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/parallel
This commit is contained in:
commit
1501d93eea
|
@ -1,7 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Copyright (C) 2013,2014,2015,2017 Ole Tange and Free Software
|
# Copyright (C) 2013-2018 Ole Tange and Free Software Foundation, Inc.
|
||||||
# Foundation, Inc.
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -15,7 +14,7 @@
|
||||||
# If that fails, it does a personal installation.
|
# If that fails, it does a personal installation.
|
||||||
# If that fails, it copies to $HOME/bin
|
# If that fails, it copies to $HOME/bin
|
||||||
#
|
#
|
||||||
# Download and run the script directly by:
|
# You can download and run the script directly by:
|
||||||
# (wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
|
# (wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
|
||||||
|
|
||||||
run() {
|
run() {
|
||||||
|
@ -52,13 +51,40 @@ run() {
|
||||||
$GET http://ftpmirror.gnu.org/parallel/$LATEST.tar.bz2.sig > $LATEST.tar.bz2.sig
|
$GET http://ftpmirror.gnu.org/parallel/$LATEST.tar.bz2.sig > $LATEST.tar.bz2.sig
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
fetch_keys() {
|
||||||
|
if gpg -h 2>/dev/null >/dev/null ; then
|
||||||
|
# GnuPG installed
|
||||||
|
# Setup .gnupg/gpg.conf if not already done
|
||||||
|
echo | gpg 2>/dev/null >/dev/null
|
||||||
|
keyserver1=keys.gnupg.net
|
||||||
|
keyserver2=pool.sks-keyservers.net
|
||||||
|
if gpg --keyserver $keyserver1 --recv-key 0xFFFFFFF1 ||
|
||||||
|
gpg --keyserver $keyserver2 --recv-key 0xFFFFFFF1 ; then
|
||||||
|
if gpg --keyserver $keyserver1 --recv-key 0x88888888 ||
|
||||||
|
gpg --keyserver $keyserver2 --recv-key 0x88888888; then
|
||||||
|
# OK
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "Cannot fetch keyID 0x88888888, so the signature cannot be checked."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "Cannot fetch keyID 0xFFFFFFF1, so the signature cannot be checked."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# GnuPG not installed
|
||||||
|
echo
|
||||||
|
echo "GnuPG (gpg) is not installed so the signature cannot be checked."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Check signature - in case ftpmirror.gnu.org is compromised
|
# Check signature - in case ftpmirror.gnu.org is compromised
|
||||||
if gpg -h 2>/dev/null >/dev/null; then
|
if fetch_keys; then
|
||||||
# GnuPG installed
|
|
||||||
# Setup .gnupg/gpg.conf if not already done
|
|
||||||
echo | gpg 2>/dev/null >/dev/null
|
|
||||||
gpg --keyserver keys.gnupg.net --recv-key FFFFFFF1
|
|
||||||
gpg --keyserver keys.gnupg.net --recv-key 88888888
|
|
||||||
if gpg --with-fingerprint $LATEST.tar.bz2.sig 2>&1 |
|
if gpg --with-fingerprint $LATEST.tar.bz2.sig 2>&1 |
|
||||||
$GREP -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1|^Primary key fingerprint: CDA0 1A42 08C4 F745 0610 7E7B D1AB 4516 8888 8888' ; then
|
$GREP -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1|^Primary key fingerprint: CDA0 1A42 08C4 F745 0610 7E7B D1AB 4516 8888 8888' ; then
|
||||||
# Source code signed by Ole Tange <ole@tange.dk>
|
# Source code signed by Ole Tange <ole@tange.dk>
|
||||||
|
@ -74,8 +100,7 @@ run() {
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# GnuPG not installed
|
# GnuPG not installed or public keys not downloaded
|
||||||
echo "GnuPG (gpg) is not installed so the signature cannot be checked."
|
|
||||||
echo "This means that if the code has been changed by criminals, you will not discover that!"
|
echo "This means that if the code has been changed by criminals, you will not discover that!"
|
||||||
echo
|
echo
|
||||||
echo "Continue anyway? (y/n)"
|
echo "Continue anyway? (y/n)"
|
||||||
|
|
2
CREDITS
2
CREDITS
|
@ -1,5 +1,7 @@
|
||||||
People who have helped GNU Parallel different ways.
|
People who have helped GNU Parallel different ways.
|
||||||
|
|
||||||
|
Jakub Kulík: Maintaining GNU Parallel for Solaris-userland.
|
||||||
|
Rich Burridge: Maintaining GNU Parallel for Solaris-userland.
|
||||||
Jonathan Kamens: Bug patch for chomp.
|
Jonathan Kamens: Bug patch for chomp.
|
||||||
John Rusnak: Feedback on all documentation.
|
John Rusnak: Feedback on all documentation.
|
||||||
FrithMartin: Bug patch for orphan blocks.
|
FrithMartin: Bug patch for orphan blocks.
|
||||||
|
|
|
@ -120,6 +120,7 @@ monitorman:
|
||||||
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &'
|
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &'
|
||||||
|
|
||||||
testurls:
|
testurls:
|
||||||
grep -h -Po 'https?://[^ $$<>")}]+' src/* | perl -pe 's/(>|\{).*//;s/\\//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | parallel -j0 --tag 'wget -qm -l1 -Q1 {}; echo $$?'
|
mkdir -p urls
|
||||||
|
cd urls && grep -v '(dead)' ../src/* | grep -h -Po 'https?://[^ $$<>")}]+' | perl -pe 's/(>|\{).*//;s/\\-/-/g;s/\\n//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | egrep -v 'example.com|##|\*\(' | parallel -j0 --timeout 33 --bar --tag --retries 3 neno wget -m -l1 -Q1 '{=$$_=Q($$_)=}'
|
||||||
|
|
||||||
EXTRA_DIST = CITATION CREDITS cc-by-sa.txt fdl.txt
|
EXTRA_DIST = CITATION CREDITS cc-by-sa.txt fdl.txt
|
||||||
|
|
15
Makefile.in
15
Makefile.in
|
@ -1,7 +1,7 @@
|
||||||
# Makefile.in generated by automake 1.15 from Makefile.am.
|
# Makefile.in generated by automake 1.15.1 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2017 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -500,7 +500,7 @@ distdir: $(DISTFILES)
|
||||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||||
|| chmod -R a+r "$(distdir)"
|
|| chmod -R a+r "$(distdir)"
|
||||||
dist-gzip: distdir
|
dist-gzip: distdir
|
||||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
||||||
$(am__post_remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-bzip2: distdir
|
dist-bzip2: distdir
|
||||||
|
@ -526,7 +526,7 @@ dist-shar: distdir
|
||||||
@echo WARNING: "Support for shar distribution archives is" \
|
@echo WARNING: "Support for shar distribution archives is" \
|
||||||
"deprecated." >&2
|
"deprecated." >&2
|
||||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
||||||
$(am__post_remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-zip: distdir
|
dist-zip: distdir
|
||||||
|
@ -544,7 +544,7 @@ dist dist-all:
|
||||||
distcheck: dist
|
distcheck: dist
|
||||||
case '$(DIST_ARCHIVES)' in \
|
case '$(DIST_ARCHIVES)' in \
|
||||||
*.tar.gz*) \
|
*.tar.gz*) \
|
||||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||||
*.tar.bz2*) \
|
*.tar.bz2*) \
|
||||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||||
*.tar.lz*) \
|
*.tar.lz*) \
|
||||||
|
@ -554,7 +554,7 @@ distcheck: dist
|
||||||
*.tar.Z*) \
|
*.tar.Z*) \
|
||||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||||
*.shar.gz*) \
|
*.shar.gz*) \
|
||||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
||||||
*.zip*) \
|
*.zip*) \
|
||||||
unzip $(distdir).zip ;;\
|
unzip $(distdir).zip ;;\
|
||||||
esac
|
esac
|
||||||
|
@ -868,7 +868,8 @@ monitorman:
|
||||||
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &'
|
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . | parallel -uj1 'echo {=/\.pod$$/ or skip()=};make -j && sudo make install; pdfman {/.} &'
|
||||||
|
|
||||||
testurls:
|
testurls:
|
||||||
grep -h -Po 'https?://[^ $$<>")}]+' src/* | perl -pe 's/(>|\{).*//;s/\\//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | parallel -j0 --tag 'wget -qm -l1 -Q1 {}; echo $$?'
|
mkdir -p urls
|
||||||
|
cd urls && grep -v '(dead)' ../src/* | grep -h -Po 'https?://[^ $$<>")}]+' | perl -pe 's/(>|\{).*//;s/\\-/-/g;s/\\n//g;s/&/&/g;s/&#.*//;'"s/'.*//" | sort -u | egrep -v 'example.com|##|\*\(' | parallel -j0 --timeout 33 --bar --tag --retries 3 neno wget -m -l1 -Q1 '{=$$_=Q($$_)=}'
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
|
63
NEWS
63
NEWS
|
@ -1,3 +1,61 @@
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
20181122
|
||||||
|
|
||||||
|
* Experimental simpler job flow control.
|
||||||
|
|
||||||
|
* 時間がかかるコマンドを GNU parallel で 並列実行する
|
||||||
|
https://qiita.com//grohiro/items/4db3fa951a4778c5c479
|
||||||
|
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
|
20181022
|
||||||
|
|
||||||
|
* env_parallel.fish: --session support (alpha quality)
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: High-throughput sequencing of murine
|
||||||
|
immunoglobulin heavy chain repertoires using single side unique
|
||||||
|
molecular identifiers on an Ion Torrent PGM
|
||||||
|
https://doi.org/10.18632/oncotarget.25493
|
||||||
|
|
||||||
|
* GNU parallel in Japanese Wikipedia
|
||||||
|
https://ja.wikipedia.org/wiki/GNU_parallel
|
||||||
|
|
||||||
|
* Outils de paramétrisation des tâches: lots de tâches, GNU Parallel
|
||||||
|
https://www.eventbrite.ca/e/inscription-outils-de-parametrisation-des-taches-lots-de-taches-gnu-parallel-et-bqtools-midi-conference-de-50271076142
|
||||||
|
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
|
20180922
|
||||||
|
|
||||||
|
* Minix is supported again.
|
||||||
|
|
||||||
|
* Updated graph showing GNU Parallel's overhead per job for each
|
||||||
|
version. https://www.gnu.org/software/parallel/process-time-j2-1700MHz-3000-1000.pdf
|
||||||
|
|
||||||
|
* Intro to Computing at CARC includes introduction to GNU Parallel
|
||||||
|
http://carc.unm.edu/education--training/workshops-and-seminars.html
|
||||||
|
|
||||||
|
* Fast-GBS uses GNU Parallel https://bitbucket.org/jerlar73/fast-gbs/wiki/Home
|
||||||
|
|
||||||
|
* Belgium at 10 m resolution in July 2018 http://www.cesbio.ups-tlse.fr/multitemp/?p=14116
|
||||||
|
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
|
20180822
|
||||||
|
|
||||||
|
* parset sets exit code.
|
||||||
|
|
||||||
|
* How to install GNU Parallel
|
||||||
|
https://www.techrepublic.com/videos/how-to-install-gnu-parallel/
|
||||||
|
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
20180722
|
20180722
|
||||||
|
|
||||||
* The quoting engine has been changed. Instead of using \-quoting GNU
|
* The quoting engine has been changed. Instead of using \-quoting GNU
|
||||||
|
@ -24,6 +82,11 @@
|
||||||
* Parallel download genomic data with GNU-Parallel
|
* Parallel download genomic data with GNU-Parallel
|
||||||
https://digibio.blogspot.com/search/label/GNU-Parallel
|
https://digibio.blogspot.com/search/label/GNU-Parallel
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
|
|
||||||
20180622
|
20180622
|
||||||
|
|
||||||
|
|
12
README
12
README
|
@ -44,9 +44,9 @@ 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-20180722.tar.bz2
|
wget https://ftpmirror.gnu.org/parallel/parallel-20181122.tar.bz2
|
||||||
bzip2 -dc parallel-20180722.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20181122.tar.bz2 | tar xvf -
|
||||||
cd parallel-20180722
|
cd parallel-20181122
|
||||||
./configure && make && sudo make install
|
./configure && make && sudo make install
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,9 +55,9 @@ Full installation of GNU Parallel is as simple as:
|
||||||
If you are not root you can add ~/bin to your path and install in
|
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-20180722.tar.bz2
|
wget https://ftpmirror.gnu.org/parallel/parallel-20181122.tar.bz2
|
||||||
bzip2 -dc parallel-20180722.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20181122.tar.bz2 | tar xvf -
|
||||||
cd parallel-20180722
|
cd parallel-20181122
|
||||||
./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
|
||||||
|
|
34
aclocal.m4
vendored
34
aclocal.m4
vendored
|
@ -1,6 +1,6 @@
|
||||||
# generated automatically by aclocal 1.15 -*- Autoconf -*-
|
# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
|
||||||
If you have problems, you may need to regenerate the build system entirely.
|
If you have problems, you may need to regenerate the build system entirely.
|
||||||
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
|
||||||
|
|
||||||
# Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -35,7 +35,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||||
[am__api_version='1.15'
|
[am__api_version='1.15'
|
||||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||||
dnl require some minimum version. Point them to the right macro.
|
dnl require some minimum version. Point them to the right macro.
|
||||||
m4_if([$1], [1.15], [],
|
m4_if([$1], [1.15.1], [],
|
||||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
||||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
[AM_AUTOMAKE_VERSION([1.15])dnl
|
[AM_AUTOMAKE_VERSION([1.15.1])dnl
|
||||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||||
|
|
||||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
|
||||||
|
|
||||||
# AM_CONDITIONAL -*- Autoconf -*-
|
# AM_CONDITIONAL -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1997-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -143,7 +143,7 @@ fi])])
|
||||||
|
|
||||||
# Do all the work for Automake. -*- Autoconf -*-
|
# Do all the work for Automake. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -340,7 +340,7 @@ for _am_header in $config_headers :; do
|
||||||
done
|
done
|
||||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||||
|
|
||||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -361,7 +361,7 @@ if test x"${install_sh+set}" != xset; then
|
||||||
fi
|
fi
|
||||||
AC_SUBST([install_sh])])
|
AC_SUBST([install_sh])])
|
||||||
|
|
||||||
# Copyright (C) 2003-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2003-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -382,7 +382,7 @@ AC_SUBST([am__leading_dot])])
|
||||||
|
|
||||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1997-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -421,7 +421,7 @@ fi
|
||||||
|
|
||||||
# Helper functions for option handling. -*- Autoconf -*-
|
# Helper functions for option handling. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -452,7 +452,7 @@ AC_DEFUN([_AM_IF_OPTION],
|
||||||
|
|
||||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -533,7 +533,7 @@ AC_CONFIG_COMMANDS_PRE(
|
||||||
rm -f conftest.file
|
rm -f conftest.file
|
||||||
])
|
])
|
||||||
|
|
||||||
# Copyright (C) 2009-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -593,7 +593,7 @@ AC_SUBST([AM_BACKSLASH])dnl
|
||||||
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
|
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
# Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -621,7 +621,7 @@ fi
|
||||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||||
|
|
||||||
# Copyright (C) 2006-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2006-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -640,7 +640,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||||
|
|
||||||
# Check how to create a tarball. -*- Autoconf -*-
|
# Check how to create a tarball. -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 2004-2014 Free Software Foundation, Inc.
|
# Copyright (C) 2004-2017 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -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.69 for parallel 20180722.
|
# Generated by GNU Autoconf 2.69 for parallel 20181122.
|
||||||
#
|
#
|
||||||
# Report bugs to <bug-parallel@gnu.org>.
|
# Report bugs to <bug-parallel@gnu.org>.
|
||||||
#
|
#
|
||||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='parallel'
|
PACKAGE_NAME='parallel'
|
||||||
PACKAGE_TARNAME='parallel'
|
PACKAGE_TARNAME='parallel'
|
||||||
PACKAGE_VERSION='20180722'
|
PACKAGE_VERSION='20181122'
|
||||||
PACKAGE_STRING='parallel 20180722'
|
PACKAGE_STRING='parallel 20181122'
|
||||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1214,7 +1214,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# 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 20180722 to adapt to many kinds of systems.
|
\`configure' configures parallel 20181122 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1281,7 +1281,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 20180722:";;
|
short | recursive ) echo "Configuration of parallel 20181122:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1357,7 +1357,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 20180722
|
parallel configure 20181122
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
@ -1374,7 +1374,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 20180722, which was
|
It was created by parallel $as_me 20181122, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2237,7 +2237,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='parallel'
|
PACKAGE='parallel'
|
||||||
VERSION='20180722'
|
VERSION='20181122'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -2880,7 +2880,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# 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 20180722, which was
|
This file was extended by parallel $as_me 20181122, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -2942,7 +2942,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
parallel config.status 20180722
|
parallel config.status 20181122
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AC_INIT([parallel], [20180722], [bug-parallel@gnu.org])
|
AC_INIT([parallel], [20181122], [bug-parallel@gnu.org])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
|
|
@ -39,7 +39,8 @@ measure() {
|
||||||
|
|
||||||
PATH=/tmp/bin:$PATH
|
PATH=/tmp/bin:$PATH
|
||||||
cd /tmp/bin
|
cd /tmp/bin
|
||||||
ls parallel-* | parallel --shuf -j$CORES --joblog ~/tmp/joblog$CORES-$INNER-$OUTER.csv 'seq '$INNER' | {2} true' :::: <(seq $OUTER) -
|
ls parallel-* |
|
||||||
|
parallel --shuf -j$CORES --joblog ~/tmp/joblog$CORES-$INNER-$OUTER.csv 'seq '$INNER' | {2} true' :::: <(seq $OUTER) -
|
||||||
|
|
||||||
killall forever
|
killall forever
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ measure() {
|
||||||
pdf("/tmp/boxplot.pdf");
|
pdf("/tmp/boxplot.pdf");
|
||||||
par(cex.axis=0.5);
|
par(cex.axis=0.5);
|
||||||
boxplot(JobRuntime/$INNER*1000~Command,data=jl,las=2,outline=F,
|
boxplot(JobRuntime/$INNER*1000~Command,data=jl,las=2,outline=F,
|
||||||
ylab="milliseconds/job",main="GNU Parallel performance of different versions\n$OUTER trials each running $INNER jobs");
|
ylab="milliseconds/job",main="GNU Parallel overhead for different versions\n$OUTER trials each running $INNER jobs");
|
||||||
_
|
_
|
||||||
cp /tmp/boxplot.pdf $HOME/tmp/boxplot-j$CORES-${MHZ}MHz-$OUTER-${INNER}v$VERSION.pdf
|
cp /tmp/boxplot.pdf $HOME/tmp/boxplot-j$CORES-${MHZ}MHz-$OUTER-${INNER}v$VERSION.pdf
|
||||||
evince /tmp/boxplot.pdf
|
evince /tmp/boxplot.pdf
|
|
@ -16,6 +16,7 @@ configure.ac: AC_INIT([parallel], [20100422], [bug-parallel@gnu.org])
|
||||||
src/parallel: $Global::version = 20100422;
|
src/parallel: $Global::version = 20100422;
|
||||||
README: parallel-20130222
|
README: parallel-20130222
|
||||||
|
|
||||||
|
YYYYMMDD=$(echo `yyyymmdd`-1 | bc)
|
||||||
YYYYMMDD=$(echo `yyyymmdd`+1 | bc)
|
YYYYMMDD=$(echo `yyyymmdd`+1 | bc)
|
||||||
YYYYMMDD=`yyyymmdd`
|
YYYYMMDD=`yyyymmdd`
|
||||||
echo $YYYYMMDD
|
echo $YYYYMMDD
|
||||||
|
@ -205,87 +206,22 @@ 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 20181222 ('Kilogram/brexitdeal/Stan Lee/Cesar Sayoc/Tree of Life/Iran') released <<[stable]>>
|
||||||
|
|
||||||
Subject: GNU Parallel 20180722 ('Crimson Hexagon') released [alpha] <<[stable]>>
|
GNU Parallel 20181222 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||||
|
|
||||||
GNU Parallel 20180722 ('Crimson Hexagon') [alpha] <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
|
||||||
|
|
||||||
This release has signficant changes and is considered alpha quality.
|
|
||||||
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
||||||
|
|
||||||
Quote of the month:
|
Quote of the month:
|
||||||
|
|
||||||
I've been using GNU Parallel very much and effectively lately.
|
|
||||||
Such an easy way to get huge speed-ups with my simple bash/Perl/Python
|
|
||||||
programs -- parallelize them!
|
|
||||||
-- Ken Youens-Clark @kycl4rk@twitter
|
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
* The quoting engine has been changed. Instead of using \-quoting GNU Parallel now uses '-quoting in bash/ash/dash/ksh. This should improve compatibility with different locales. This is a big change causing this release to be alpha quality.
|
* https://qiita.com/hana_shin/items/53c3c78525c9c758ae7c
|
||||||
|
|
||||||
* The CPU calculation has changed. By default GNU Parallel uses the number of CPU threads as the number of CPUs. This can be change to the number of CPU cores or number of CPU sockets with --use-cores-instead-of-threads or --use-sockets-instead-of-threads.
|
|
||||||
|
|
||||||
* The detected number of sockets, cores, and threads can be shown with --number-of-sockets, --number-of-cores, and --number-of-threads.
|
|
||||||
|
|
||||||
* env_parallel now support mksh using env_parallel.mksh.
|
|
||||||
|
|
||||||
* GNU Parallel is distributed as part of Snippy https://github.com/tseemann/snippy
|
|
||||||
|
|
||||||
* GNU Parallel: Ejecutar comandos simultáneamente en Linux https://esgeeks.com/gnu-parallel-ejecutar-comandos-simultaneo-linux/
|
|
||||||
|
|
||||||
* Parallel download genomic data with GNU-Parallel https://digibio.blogspot.com/search/label/GNU-Parallel
|
|
||||||
|
|
||||||
<<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>>
|
|
||||||
|
|
||||||
<<Wrong citation https://iris.sissa.it/retrieve/handle/20.500.11767/36149/10823/And%C3%B2_tesi.pdf>>
|
|
||||||
|
|
||||||
<<Wrong citation http://www.cell.com/cms/attachment/2095201602/2077415979/mmc1.pdf>>
|
|
||||||
|
|
||||||
<<Down http://www.nature.com/nprot/journal/v12/n5/full/nprot.2017.022.html?WT.feed_name=subjects_biotechnology>>
|
|
||||||
|
|
||||||
<<Citation not ok: https://arxiv.org/pdf/1704.08997.pdf>>
|
|
||||||
|
|
||||||
<<Citation needed: https://sdstrowes.co.uk/publications/sdstrowes-rdns-aaaa.pdf>>
|
|
||||||
|
|
||||||
<<Citation not ok: https://www.nature.com/articles/s41598-017-01703-6>>
|
|
||||||
|
|
||||||
<<Probably http://www.sciencedirect.com/science/article/pii/S0044848616312194>>
|
|
||||||
|
|
||||||
<<Possibly http://link.springer.com/chapter/10.1007%2F978-3-319-22053-6_46>>
|
|
||||||
|
|
||||||
<<Possibly http://link.springer.com/article/10.1007/s12021-015-9290-5>>
|
|
||||||
|
|
||||||
<<Possibly http://link.springer.com/protocol/10.1007/978-1-4939-3578-9_14>>
|
|
||||||
|
|
||||||
<<kontakt GNU Parallel was used (unfortunately without citation) in: Instrumentation and Trace Analysis for Ad-hoc Python Workflows in Cloud Environments http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7214035>>
|
|
||||||
|
|
||||||
<<Har angiveligt submittet ny version - afventer opdatering>> GNU Parallel was used (unfortunately without citation) in: MUGBAS: a species free gene-based programme suite for post-GWAS analysis http://www.ncbi.nlm.nih.gov/pubmed/25765345
|
|
||||||
|
|
||||||
<<Afventer updateret publisering>> GNU Parallel was used in: Large Scale Author Name Disambiguation in Digital Libraries http://ieeexplore.ieee.org/xpl/abstractReferences.jsp?tp=&arnumber=7004487&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D7004487
|
|
||||||
|
|
||||||
<<kontaktet 2015-06-22 Afventer svar fra journal>> GNU Parallel was used (unfortunately with wrong citation) in: TADSim: Discrete Event-Based Performance Prediction for Temperature-Accelerated Dynamics http://vruehle.de/publications/2015c.pdf
|
|
||||||
http://www.researchgate.net/profile/Christoph_Junghans/publication/276178326_TADSim_Discrete_Event-Based_Performance_Prediction_for_Temperature-Accelerated_Dynamics/links/55562b6708ae980ca60c8369.pdf
|
|
||||||
|
|
||||||
<< Update forventet juni Rachel har lige svaret >> GNU Parallel was used in: SISRS: Site Identification from Short Read Sequences https://github.com/rachelss/SISRS/
|
|
||||||
|
|
||||||
<<Citation needed: A Cache- and Memory-Aware Mapping Algorithm
|
|
||||||
for Big Data Applications https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7323015>>
|
|
||||||
|
|
||||||
<<Citation needed: Introspecting for RSA Key Material to Assist Intrusion Detection http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=7331177&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D7331177>>
|
|
||||||
|
|
||||||
<<Citation needed: 3D-GNOME: an integrated web service for structural modeling of the 3D genome http://nar.oxfordjournals.org/content/early/2016/05/16/nar.gkw437.full.pdf+html>>
|
|
||||||
|
|
||||||
<<link No citation: Next-generation TCP for ns-3 simulator http://www.sciencedirect.com/science/article/pii/S1569190X15300939>>
|
|
||||||
|
|
||||||
<<link No citation: Scalable metagenomics alignment research tool (SMART): a scalable, rapid, and complete search heuristic for the classification of metagenomic sequences from complex sequence populations http://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-016-1159-6#Bib1>>
|
|
||||||
|
|
||||||
<<No citation: Argumentation Models for Cyber Attribution http://arxiv.org/pdf/1607.02171.pdf>>
|
|
||||||
|
|
||||||
<<Possible: http://link.springer.com/article/10.1007/s12021-015-9290-5 http://link.springer.com/protocol/10.1007/978-1-4939-3578-9_14>>
|
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
Get the book: GNU Parallel 2018 http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html
|
||||||
|
|
||||||
GNU Parallel - For people who live life in the parallel lane.
|
GNU Parallel - For people who live life in the parallel lane.
|
||||||
|
|
||||||
|
|
||||||
|
@ -307,7 +243,7 @@ Walk through the tutorial (man parallel_tutorial). Your commandline will love yo
|
||||||
|
|
||||||
When using programs that use GNU Parallel to process data for publication please cite:
|
When using programs that use GNU Parallel to process data for publication please cite:
|
||||||
|
|
||||||
O. Tange (2018): GNU Parallel 2018, April 2018, https://doi.org/10.5281/zenodo.1146014.
|
O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/10.5281/zenodo.1146014.
|
||||||
|
|
||||||
If you like GNU Parallel:
|
If you like GNU Parallel:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<directory name="parallel" rev="222" srcmd5="5d82d3c6f8314f4e507448d39c7517ea" vrev="1">
|
<directory name="parallel" rev="227" srcmd5="21d1e9e6d757ee09c239531d094bac7b" vrev="1">
|
||||||
<entry md5="b3ece6dabdc099c2520a3a400d340988" mtime="1529532492" name="parallel-20180622.tar.bz2" size="1758047" />
|
<entry md5="7f377215f4bfec95ae667a756cdda905" mtime="1542929947" name="parallel-20181122.tar.bz2" size="1797510" />
|
||||||
<entry md5="8aef7a2f3175b86cc8b081c02a46db50" mtime="1529532493" name="parallel.spec" size="4666" />
|
<entry md5="21c2c593abc38419b337648cd12518ae" mtime="1542929947" name="parallel.spec" size="4667" />
|
||||||
<entry md5="6270b8a39a08eea1967eca0b39b5f547" mtime="1529532493" name="parallel_20180622.dsc" size="556" />
|
<entry md5="30d6a27fae9852f24b415b6e00feb43f" mtime="1542929947" name="parallel_20181122.dsc" size="556" />
|
||||||
<entry md5="fb3de72aa9dca6c51df8a80dcd9c1abb" mtime="1529532495" name="parallel_20180622.tar.gz" size="1966457" />
|
<entry md5="4e0cdca7d064c5174b0858b8e2acb1f5" mtime="1542929947" name="parallel_20181122.tar.gz" size="1991811" />
|
||||||
</directory>
|
</directory>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
Summary: Shell tool for executing jobs in parallel
|
Summary: Shell tool for executing jobs in parallel
|
||||||
Name: parallel
|
Name: parallel
|
||||||
Version: 20180622
|
Version: 20181122
|
||||||
Release: 1.2
|
Release: 1.2
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Productivity/File utilities
|
Group: Productivity/File utilities
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
Summary: Shell tool for executing jobs in parallel
|
Summary: Shell tool for executing jobs in parallel
|
||||||
Name: parallel
|
Name: parallel
|
||||||
Version: 20180622
|
Version: 20181122
|
||||||
Release: 1.2
|
Release: 1.2
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Productivity/File utilities
|
Group: Productivity/File utilities
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Makefile.in generated by automake 1.15 from Makefile.am.
|
# Makefile.in generated by automake 1.15.1 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2017 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
|
@ -300,12 +300,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,15 +328,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -347,25 +354,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "`
|
eval "`
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1= cat tmpfile1; rm tmpfile1
|
# var1= cat tmpfile1; rm tmpfile1
|
||||||
# var2= cat tmpfile2; rm tmpfile2
|
# var2= cat tmpfile2; rm tmpfile2
|
||||||
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -pe 's/,/ /g'
|
perl -pe 's/,/ /g'
|
||||||
\`
|
\`
|
||||||
`"
|
`"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# after which 'env_parallel' works
|
# after which 'env_parallel' works
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016,2017,2018
|
# Copyright (C) 2016-2018
|
||||||
# Ole Tange and Free Software Foundation, Inc.
|
# Ole Tange and Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -300,12 +300,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,15 +328,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -347,25 +354,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "$(
|
eval "$(
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1=`cat tmpfile1; rm tmpfile1`
|
# var1=`cat tmpfile1; rm tmpfile1`
|
||||||
# var2=`cat tmpfile2; rm tmpfile2`
|
# var2=`cat tmpfile2; rm tmpfile2`
|
||||||
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
|
parallel --plain -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" | perl -pe 's/,/ /g'
|
||||||
perl -pe 's/,/ /g'
|
|
||||||
)
|
)
|
||||||
)"
|
);
|
||||||
|
"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# after which 'env_parallel' works
|
# after which 'env_parallel' works
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016,2017,2018
|
# Copyright (C) 2016-2018
|
||||||
# Ole Tange and Free Software Foundation, Inc.
|
# Ole Tange and Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -83,6 +83,7 @@ else
|
||||||
# Make a tmpfile for the variable definitions + alias
|
# Make a tmpfile for the variable definitions + alias
|
||||||
set _tMpaLLfILe=`_tempfile`
|
set _tMpaLLfILe=`_tempfile`
|
||||||
foreach _vARnAmE ($_vARnAmES);
|
foreach _vARnAmE ($_vARnAmES);
|
||||||
|
# These 3 lines break in csh version 20110502-3
|
||||||
# if not defined: next
|
# if not defined: next
|
||||||
eval if'(! $?'$_vARnAmE') continue'
|
eval if'(! $?'$_vARnAmE') continue'
|
||||||
# if $#myvar <= 1 echo scalar_myvar=$var
|
# if $#myvar <= 1 echo scalar_myvar=$var
|
||||||
|
|
|
@ -300,12 +300,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,15 +328,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -347,25 +354,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "`
|
eval "`
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1= cat tmpfile1; rm tmpfile1
|
# var1= cat tmpfile1; rm tmpfile1
|
||||||
# var2= cat tmpfile2; rm tmpfile2
|
# var2= cat tmpfile2; rm tmpfile2
|
||||||
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -pe 's/,/ /g'
|
perl -pe 's/,/ /g'
|
||||||
\`
|
\`
|
||||||
`"
|
`"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,17 @@
|
||||||
|
|
||||||
function env_parallel
|
function env_parallel
|
||||||
# env_parallel.fish
|
# env_parallel.fish
|
||||||
|
|
||||||
|
# --session
|
||||||
|
perl -e 'exit grep { /^--session/ } @ARGV' -- $argv; or begin;
|
||||||
|
setenv PARALLEL_IGNORED_NAMES (
|
||||||
|
begin;
|
||||||
|
functions -n
|
||||||
|
set -n;
|
||||||
|
end | perl -pe 's/\n/,/g';
|
||||||
|
)
|
||||||
|
return 0
|
||||||
|
end;
|
||||||
setenv PARALLEL_ENV (
|
setenv PARALLEL_ENV (
|
||||||
begin;
|
begin;
|
||||||
set _grep_REGEXP (
|
set _grep_REGEXP (
|
||||||
|
@ -71,10 +82,14 @@ function env_parallel
|
||||||
"Run \"parallel --record-env\" in a clean environment first.\n";
|
"Run \"parallel --record-env\" in a clean environment first.\n";
|
||||||
} else {
|
} else {
|
||||||
chomp(@ignored_vars = <IN>);
|
chomp(@ignored_vars = <IN>);
|
||||||
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
|
||||||
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($ENV{PARALLEL_IGNORED_NAMES}) {
|
||||||
|
push @ignored_vars, split/,/, $ENV{PARALLEL_IGNORED_NAMES};
|
||||||
|
chomp @ignored_vars;
|
||||||
|
}
|
||||||
|
$vars = join "|",map { quotemeta $_ } @ignored_vars;
|
||||||
|
print $vars ? "($vars)" : "(,,nO,,VaRs,,)";
|
||||||
' -- $argv;
|
' -- $argv;
|
||||||
end;
|
end;
|
||||||
)
|
)
|
||||||
|
|
|
@ -48,7 +48,6 @@ env_parallel() {
|
||||||
typeset +p -f | perl -pe 's/\(\).*//'
|
typeset +p -f | perl -pe 's/\(\).*//'
|
||||||
}
|
}
|
||||||
_bodies_of_FUNCTIONS() {
|
_bodies_of_FUNCTIONS() {
|
||||||
# typeset -f "$@"
|
|
||||||
functions "$@"
|
functions "$@"
|
||||||
}
|
}
|
||||||
_names_of_VARIABLES() {
|
_names_of_VARIABLES() {
|
||||||
|
@ -284,12 +283,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,15 +311,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -331,25 +337,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "`
|
eval "$(
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1= cat tmpfile1; rm tmpfile1
|
# var1=`cat tmpfile1; rm tmpfile1`
|
||||||
# var2= cat tmpfile2; rm tmpfile2
|
# var2=`cat tmpfile2; rm tmpfile2`
|
||||||
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" | perl -pe 's/,/ /g'
|
||||||
perl -pe 's/,/ /g'
|
)
|
||||||
\`
|
);
|
||||||
`"
|
"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -286,12 +286,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,15 +314,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -333,25 +340,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "`
|
eval "$(
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1= cat tmpfile1; rm tmpfile1
|
# var1=`cat tmpfile1; rm tmpfile1`
|
||||||
# var2= cat tmpfile2; rm tmpfile2
|
# var2=`cat tmpfile2; rm tmpfile2`
|
||||||
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" | perl -pe 's/,/ /g'
|
||||||
perl -pe 's/,/ /g'
|
)
|
||||||
\`
|
);
|
||||||
`"
|
"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh mksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: sh ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,6 @@ environment to GNU B<parallel>.
|
||||||
If the shell function is not loaded, a dummy script will be run
|
If the shell function is not loaded, a dummy script will be run
|
||||||
instead that explains how to install the function.
|
instead that explains how to install the function.
|
||||||
|
|
||||||
B<env_parallel> is beta quality and not production ready, but please
|
|
||||||
use it for everyday use and report bugs.
|
|
||||||
|
|
||||||
B<env_parallel> is 100 ms slower at startup than pure GNU
|
B<env_parallel> is 100 ms slower at startup than pure GNU
|
||||||
B<parallel>, and takes up to 30% longer to start a job (typically 15 ms).
|
B<parallel>, and takes up to 30% longer to start a job (typically 15 ms).
|
||||||
|
|
||||||
|
@ -448,7 +445,7 @@ array with the given name. Multiple B<--env>s can be given.
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|
||||||
=head2 mksh (alpha testing)
|
=head2 mksh
|
||||||
|
|
||||||
=head3 Installation
|
=head3 Installation
|
||||||
|
|
||||||
|
@ -744,10 +741,10 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
||||||
|
|
||||||
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange,
|
Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free
|
||||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
Software Foundation, Inc.
|
||||||
|
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# after which 'env_parallel' works
|
# after which 'env_parallel' works
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016,2017,2018
|
# Copyright (C) 2016-2018
|
||||||
# Ole Tange and Free Software Foundation, Inc.
|
# Ole Tange and Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -181,12 +181,12 @@ env_parallel() {
|
||||||
# type returns:
|
# type returns:
|
||||||
# ll is an alias for ls -l (in ash)
|
# ll is an alias for ls -l (in ash)
|
||||||
# bash is a tracked alias for /bin/bash
|
# bash is a tracked alias for /bin/bash
|
||||||
# true is a shell builtin
|
# true is a shell builtin (in bash)
|
||||||
# myfunc is a function (in bash)
|
# myfunc is a function (in bash)
|
||||||
# myfunc is a shell function (in zsh)
|
# myfunc is a shell function (in zsh)
|
||||||
# which is /usr/bin/which
|
# which is /usr/bin/which (in sh, bash)
|
||||||
# which is hashed (/usr/bin/which)
|
# which is hashed (/usr/bin/which)
|
||||||
# aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
|
# gi is aliased to `grep -i' (in bash)
|
||||||
# Return 0 if found, 1 otherwise
|
# Return 0 if found, 1 otherwise
|
||||||
LANG=C type "$@" |
|
LANG=C type "$@" |
|
||||||
perl -pe '$exit += (s/ is an alias for .*// ||
|
perl -pe '$exit += (s/ is an alias for .*// ||
|
||||||
|
@ -300,12 +300,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,15 +328,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -347,25 +354,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "`
|
eval "`
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1= cat tmpfile1; rm tmpfile1
|
# var1= cat tmpfile1; rm tmpfile1
|
||||||
# var2= cat tmpfile2; rm tmpfile2
|
# var2= cat tmpfile2; rm tmpfile2
|
||||||
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -pe 's/,/ /g'
|
perl -pe 's/,/ /g'
|
||||||
\`
|
\`
|
||||||
`"
|
`"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# after which 'env_parallel' works
|
# after which 'env_parallel' works
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016,2017,2018
|
# Copyright (C) 2016-2018
|
||||||
# Ole Tange and Free Software Foundation, Inc.
|
# Ole Tange and Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
|
|
@ -51,7 +51,7 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
_ignore_HARDCODED() {
|
_ignore_HARDCODED() {
|
||||||
# These names cannot be detected
|
# These names cannot be detected
|
||||||
echo '([-\?\#\!\$\*\@\_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID|dis_patchars|patchars|terminfo|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates|funcstack)'
|
echo '([-\?\#\!\$\*\@\_0]|zsh_eval_context|ZSH_EVAL_CONTEXT|LINENO|IFS|commands|functions|options|aliases|EUID|EGID|UID|GID|dis_patchars|patchars|terminfo|galiases|keymaps|parameters|jobdirs|dirstack|functrace|funcsourcetrace|zsh_scheduled_events|dis_aliases|dis_reswords|dis_saliases|modules|reswords|saliases|widgets|userdirs|historywords|nameddirs|termcap|dis_builtins|dis_functions|jobtexts|funcfiletrace|dis_galiases|builtins|history|jobstates|funcstack|run-help)'
|
||||||
}
|
}
|
||||||
_ignore_READONLY() {
|
_ignore_READONLY() {
|
||||||
typeset -pr | perl -e '@r = map {
|
typeset -pr | perl -e '@r = map {
|
||||||
|
@ -277,12 +277,12 @@ env_parallel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
parset() {
|
parset() {
|
||||||
_parset_parallel_prg=parallel
|
_parset_PARALLEL_PRG=parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parset() {
|
env_parset() {
|
||||||
_parset_parallel_prg=env_parallel
|
_parset_PARALLEL_PRG=env_parallel
|
||||||
_parset_main "$@"
|
_parset_main "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,15 +305,22 @@ _parset_main() {
|
||||||
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
# parset "var_a4 var_b4 var_c4" echo ::: {1..3}
|
||||||
# echo $var_c4
|
# echo $var_c4
|
||||||
|
|
||||||
_parset_name="$1"
|
_make_TEMP() {
|
||||||
if [ "$_parset_name" = "" ] ; then
|
# mktemp does not exist on some OS
|
||||||
|
perl -e 'use File::Temp qw(tempfile);
|
||||||
|
$ENV{"TMPDIR"} ||= "/tmp";
|
||||||
|
print((tempfile(DIR=>$ENV{"TMPDIR"}, TEMPLATE => "parXXXXX"))[1])'
|
||||||
|
}
|
||||||
|
|
||||||
|
_parset_NAME="$1"
|
||||||
|
if [ "$_parset_NAME" = "" ] ; then
|
||||||
echo parset: Error: No destination variable given. >&2
|
echo parset: Error: No destination variable given. >&2
|
||||||
echo parset: Error: Try: >&2
|
echo parset: Error: Try: >&2
|
||||||
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
echo parset: Error: ' ' parset myarray echo ::: foo bar >&2
|
||||||
return 255
|
return 255
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" |
|
||||||
perl -ne 'chomp;for (split /[, ]/) {
|
perl -ne 'chomp;for (split /[, ]/) {
|
||||||
# Allow: var_32 var[3]
|
# Allow: var_32 var[3]
|
||||||
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
if(not /^[a-zA-Z_][a-zA-Z_0-9]*(\[\d+\])?$/) {
|
||||||
|
@ -324,25 +331,30 @@ _parset_main() {
|
||||||
}
|
}
|
||||||
exit $exitval;
|
exit $exitval;
|
||||||
' || return 255
|
' || return 255
|
||||||
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
|
_exit_FILE=`_make_TEMP`
|
||||||
# $_parset_name contains , or space
|
if perl -e 'exit not grep /,| /, @ARGV' "$_parset_NAME" ; then
|
||||||
|
# $_parset_NAME contains , or space
|
||||||
# Split on , or space to get the names
|
# Split on , or space to get the names
|
||||||
eval "`
|
eval "$(
|
||||||
# Compute results into files
|
# Compute results into files
|
||||||
$_parset_parallel_prg --files -k "$@" |
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
# var1= cat tmpfile1; rm tmpfile1
|
# var1=`cat tmpfile1; rm tmpfile1`
|
||||||
# var2= cat tmpfile2; rm tmpfile2
|
# var2=`cat tmpfile2; rm tmpfile2`
|
||||||
parallel -q echo {2}='\`cat {1}; rm {1}\`' :::: - :::+ \`
|
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
|
||||||
echo "$_parset_name" |
|
echo "$_parset_NAME" | perl -pe 's/,/ /g'
|
||||||
perl -pe 's/,/ /g'
|
)
|
||||||
\`
|
);
|
||||||
`"
|
"
|
||||||
else
|
else
|
||||||
# $_parset_name does not contain , or space
|
# $_parset_NAME does not contain , or space
|
||||||
# => $_parset_name is the name of the array to put data into
|
# => $_parset_NAME is the name of the array to put data into
|
||||||
# Supported in: bash zsh ksh mksh
|
# Supported in: bash zsh ksh mksh
|
||||||
# Arrays do not work in: sh ash dash
|
# Arrays do not work in: sh ash dash
|
||||||
eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" |
|
eval "$_parset_NAME=( $(
|
||||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
# Compute results into files. Save exit value
|
||||||
|
($_parset_PARALLEL_PRG --files -k "$@"; echo $? > "$_exit_FILE") |
|
||||||
|
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "'
|
||||||
|
) )"
|
||||||
fi
|
fi
|
||||||
|
return `cat "$_exit_FILE"; rm "$_exit_FILE"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,11 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
$Global::progname="niceload";
|
$Global::progname="niceload";
|
||||||
|
<<<<<<< HEAD
|
||||||
$Global::version = 20180723;
|
$Global::version = 20180723;
|
||||||
|
=======
|
||||||
|
$Global::version = 20181124;
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
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) {
|
||||||
|
@ -1147,7 +1151,7 @@ sub io_status_linux {
|
||||||
# throw away all execpt the last Device:-section
|
# throw away all execpt the last Device:-section
|
||||||
my @iostat;
|
my @iostat;
|
||||||
for(reverse @iostat_out) {
|
for(reverse @iostat_out) {
|
||||||
/Device:/ and last;
|
/Device/ and last;
|
||||||
push @iostat, (split(/\s+/,$_))[13];
|
push @iostat, (split(/\s+/,$_))[13];
|
||||||
}
|
}
|
||||||
my $io = ::max(@iostat);
|
my $io = ::max(@iostat);
|
||||||
|
|
|
@ -36,7 +36,10 @@ run 1 second, suspend (3.00-1.00) seconds, run 1 second, suspend
|
||||||
|
|
||||||
=item B<--battery>
|
=item B<--battery>
|
||||||
|
|
||||||
Suspend if the system is running on battery. Shorthand for: -l -1 --sensor 'cat /sys/class/power_supply/BAT0/status /proc/acpi/battery/BAT0/state 2>/dev/null |grep -i -q discharging; echo $?'
|
Suspend if the system is running on battery. Shorthand for:
|
||||||
|
-l -1 --sensor 'cat /sys/class/power_supply/BAT0/status
|
||||||
|
/proc/acpi/battery/BAT0/state 2>/dev/null | grep -i -q discharging;
|
||||||
|
echo $?'
|
||||||
|
|
||||||
|
|
||||||
=item B<-f> I<FACTOR>
|
=item B<-f> I<FACTOR>
|
||||||
|
@ -62,7 +65,7 @@ under the limits. The default is B<--soft>.
|
||||||
Limit for I/O. The amount of disk I/O will be computed as a value 0 -
|
Limit for I/O. The amount of disk I/O will be computed as a value 0 -
|
||||||
10, where 0 is no I/O and 10 is at least one disk is 100% saturated.
|
10, where 0 is no I/O and 10 is at least one disk is 100% saturated.
|
||||||
|
|
||||||
B<--io> will set both B<--start-io> and B<run-io>.
|
B<--io> will set both B<--start-io> and B<--run-io>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--load> I<loadlimit>
|
=item B<--load> I<loadlimit>
|
||||||
|
@ -71,7 +74,7 @@ B<--io> will set both B<--start-io> and B<run-io>.
|
||||||
|
|
||||||
Limit for load average.
|
Limit for load average.
|
||||||
|
|
||||||
B<--load> will set both B<--start-load> and B<run-load>.
|
B<--load> will set both B<--start-load> and B<--run-load>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--mem> I<memlimit>
|
=item B<--mem> I<memlimit>
|
||||||
|
@ -87,7 +90,7 @@ I<memlimit> can be postfixed with K, M, G, T, or P which would
|
||||||
multiply the size with 1024, 1048576, 1073741824, or 1099511627776
|
multiply the size with 1024, 1048576, 1073741824, or 1099511627776
|
||||||
respectively.
|
respectively.
|
||||||
|
|
||||||
B<--mem> will set both B<--start-mem> and B<run-mem>.
|
B<--mem> will set both B<--start-mem> and B<--run-mem>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--noswap>
|
=item B<--noswap>
|
||||||
|
@ -99,7 +102,7 @@ indication that the system is memory stressed.
|
||||||
|
|
||||||
B<--noswap> is over limit if the system is swapping both in and out.
|
B<--noswap> is over limit if the system is swapping both in and out.
|
||||||
|
|
||||||
B<--noswap> will set both B<--start-noswap> and B<run-noswap>.
|
B<--noswap> will set both B<--start-noswap> and B<--run-noswap>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--net>
|
=item B<--net>
|
||||||
|
@ -251,18 +254,19 @@ CPU. When the load rises to 1.0 the process is suspended.
|
||||||
|
|
||||||
=head1 EXAMPLE: Run updatedb
|
=head1 EXAMPLE: Run updatedb
|
||||||
|
|
||||||
Running updatedb can often starve the system for disk I/O and thus result in a high load.
|
Running B<updatedb> can often starve the system for disk I/O and thus result in a high load.
|
||||||
|
|
||||||
Run updatedb but suspend updatedb if the load is above 2.00:
|
Run B<updatedb> but suspend B<updatedb> if the load is above 2.00:
|
||||||
|
|
||||||
B<niceload -L 2 updatedb>
|
B<niceload -L 2 updatedb>
|
||||||
|
|
||||||
|
|
||||||
=head1 EXAMPLE: Run rsync
|
=head1 EXAMPLE: Run rsync
|
||||||
|
|
||||||
rsync can just like updatedb starve the system for disk I/O and thus result in a high load.
|
B<rsync> can, just like B<updatedb>, starve the system for disk I/O
|
||||||
|
and thus result in a high load.
|
||||||
|
|
||||||
Run rsync but keep load below 3.4. If load reaches 7 sleep for
|
Run B<rsync> but keep load below 3.4. If load reaches 7 sleep for
|
||||||
(7-3.4)*12 seconds:
|
(7-3.4)*12 seconds:
|
||||||
|
|
||||||
B<niceload -L 3.4 -f 12 rsync -Ha /home/ /backup/home/>
|
B<niceload -L 3.4 -f 12 rsync -Ha /home/ /backup/home/>
|
||||||
|
@ -299,15 +303,14 @@ Report bugs to <bug-parallel@gnu.org>.
|
||||||
|
|
||||||
Copyright (C) 2004-11-19 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2004-11-19 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2005,2006,2007,2008,2009,2010 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2005-2010 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange,
|
Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free
|
||||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
Software Foundation, Inc.
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Free
|
Copyright (C) 2010-2018 Free Software Foundation, Inc.
|
||||||
Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
656
src/parallel
656
src/parallel
File diff suppressed because it is too large
Load diff
|
@ -4,21 +4,23 @@
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
parallel - build and execute shell command lines from standard input in parallel
|
parallel - build and execute shell command lines from standard input
|
||||||
|
in parallel
|
||||||
|
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
B<parallel> [options] [I<command> [arguments]] < list_of_arguments
|
B<parallel> [options] [I<command> [arguments]] < list_of_arguments
|
||||||
|
|
||||||
B<parallel> [options] [I<command> [arguments]] ( B<:::> arguments | B<:::+> arguments |
|
B<parallel> [options] [I<command> [arguments]] ( B<:::> arguments |
|
||||||
B<::::> argfile(s) | B<::::+> argfile(s) ) ...
|
B<:::+> arguments | B<::::> argfile(s) | B<::::+> argfile(s) ) ...
|
||||||
|
|
||||||
B<parallel> --semaphore [options] I<command>
|
B<parallel> --semaphore [options] I<command>
|
||||||
|
|
||||||
B<#!/usr/bin/parallel> --shebang [options] [I<command> [arguments]]
|
B<#!/usr/bin/parallel> --shebang [options] [I<command> [arguments]]
|
||||||
|
|
||||||
B<#!/usr/bin/parallel> --shebang-wrap [options] [I<command> [arguments]]
|
B<#!/usr/bin/parallel> --shebang-wrap [options] [I<command>
|
||||||
|
[arguments]]
|
||||||
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
@ -118,7 +120,7 @@ replacement string; then the string is not quoted.
|
||||||
|
|
||||||
Input line without extension. This replacement string will be replaced
|
Input line without extension. This replacement string will be replaced
|
||||||
by the input with the extension removed. If the input line contains
|
by the input with the extension removed. If the input line contains
|
||||||
B<.> after the last B</> the last B<.> till the end of the string will
|
B<.> after the last B</>, the last B<.> until the end of the string will
|
||||||
be removed and B<{.}> will be replaced with the
|
be removed and B<{.}> will be replaced with the
|
||||||
remaining. E.g. I<foo.jpg> becomes I<foo>, I<subdir/foo.jpg> becomes
|
remaining. E.g. I<foo.jpg> becomes I<foo>, I<subdir/foo.jpg> becomes
|
||||||
I<subdir/foo>, I<sub.dir/foo.jpg> becomes I<sub.dir/foo>,
|
I<subdir/foo>, I<sub.dir/foo.jpg> becomes I<sub.dir/foo>,
|
||||||
|
@ -659,7 +661,7 @@ equivalent: B<--delay 100000> and B<--delay 1d3.5h16.6m4s>.
|
||||||
Print the job to run on stdout (standard output), but do not run the
|
Print the job to run on stdout (standard output), but do not run the
|
||||||
job. Use B<-v -v> to include the wrapping that GNU Parallel generates
|
job. Use B<-v -v> to include the wrapping that GNU Parallel generates
|
||||||
(for remote jobs, B<--tmux>, B<--nice>, B<--pipe>, B<--pipepart>,
|
(for remote jobs, B<--tmux>, B<--nice>, B<--pipe>, B<--pipepart>,
|
||||||
B<--fifo> and B<--cat>). Do not count on this literaly, though, as the
|
B<--fifo> and B<--cat>). Do not count on this literally, though, as the
|
||||||
job may be scheduled on another computer or the local computer if : is
|
job may be scheduled on another computer or the local computer if : is
|
||||||
in the list.
|
in the list.
|
||||||
|
|
||||||
|
@ -773,7 +775,7 @@ may not be used. B<--gnu> is kept for compatibility.
|
||||||
=item B<--group>
|
=item B<--group>
|
||||||
|
|
||||||
Group output. Output from each job is grouped together and is only
|
Group output. Output from each job is grouped together and is only
|
||||||
printed when the command is finished. stdout (standard output) first
|
printed when the command is finished. Stdout (standard output) first
|
||||||
followed by stderr (standard error).
|
followed by stderr (standard error).
|
||||||
|
|
||||||
This takes in the order of 0.5ms per job and depends on the speed of
|
This takes in the order of 0.5ms per job and depends on the speed of
|
||||||
|
@ -855,7 +857,7 @@ exit when 3% of the jobs have finished. Kill running jobs.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
For backwards compability these also work:
|
For backwards compatibility these also work:
|
||||||
|
|
||||||
=over 12
|
=over 12
|
||||||
|
|
||||||
|
@ -1458,20 +1460,32 @@ on remote computers).
|
||||||
Print the number of physical CPU cores and exit.
|
Print the number of physical CPU cores and exit.
|
||||||
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
=item B<--number-of-cores> (beta testing)
|
=item B<--number-of-cores> (beta testing)
|
||||||
|
=======
|
||||||
|
=item B<--number-of-cores>
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
|
|
||||||
Print the number of physical CPU cores and exit (used by GNU B<parallel> itself
|
Print the number of physical CPU cores and exit (used by GNU B<parallel> itself
|
||||||
to determine the number of physical CPU cores on remote computers).
|
to determine the number of physical CPU cores on remote computers).
|
||||||
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
=item B<--number-of-sockets> (beta testing)
|
=item B<--number-of-sockets> (beta testing)
|
||||||
|
=======
|
||||||
|
=item B<--number-of-sockets>
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
|
|
||||||
Print the number of filled CPU sockets and exit (used by GNU
|
Print the number of filled CPU sockets and exit (used by GNU
|
||||||
B<parallel> itself to determine the number of filled CPU sockets on
|
B<parallel> itself to determine the number of filled CPU sockets on
|
||||||
remote computers).
|
remote computers).
|
||||||
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
=item B<--number-of-threads> (beta testing)
|
=item B<--number-of-threads> (beta testing)
|
||||||
|
=======
|
||||||
|
=item B<--number-of-threads>
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
|
|
||||||
Print the number of hyperthreaded CPU cores and exit (used by GNU
|
Print the number of hyperthreaded CPU cores and exit (used by GNU
|
||||||
B<parallel> itself to determine the number of hyperthreaded CPU cores
|
B<parallel> itself to determine the number of hyperthreaded CPU cores
|
||||||
|
@ -2363,6 +2377,11 @@ open a tty for the job.
|
||||||
|
|
||||||
You can of course override B<-j1> and B<-u>.
|
You can of course override B<-j1> and B<-u>.
|
||||||
|
|
||||||
|
Using B<--tty> unfortunately means that GNU B<parallel> cannot kill
|
||||||
|
the jobs (with B<--timeout>, B<--memfree>, or B<--halt>). This is due
|
||||||
|
to GNU B<parallel> giving each child its own process group, which is
|
||||||
|
then killed. Process groups are dependant on the tty.
|
||||||
|
|
||||||
|
|
||||||
=item B<--tag>
|
=item B<--tag>
|
||||||
|
|
||||||
|
@ -2571,9 +2590,15 @@ Use the replacement string I<replace-str> instead of B<{.}> for input
|
||||||
line without extension.
|
line without extension.
|
||||||
|
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
=item B<--use-sockets-instead-of-threads> (beta testing)
|
=item B<--use-sockets-instead-of-threads> (beta testing)
|
||||||
|
|
||||||
=item B<--use-cores-instead-of-threads> (beta testing)
|
=item B<--use-cores-instead-of-threads> (beta testing)
|
||||||
|
=======
|
||||||
|
=item B<--use-sockets-instead-of-threads>
|
||||||
|
|
||||||
|
=item B<--use-cores-instead-of-threads>
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
|
|
||||||
=item B<--use-cpus-instead-of-cores> (obsolete)
|
=item B<--use-cpus-instead-of-cores> (obsolete)
|
||||||
|
|
||||||
|
@ -3053,12 +3078,20 @@ downloads 10 videos in parallel.
|
||||||
B<{=> and B<=}> mark a perl expression. B<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.
|
||||||
|
|
||||||
|
=head1 EXAMPLE: Save output in ISO8601 dirs
|
||||||
|
|
||||||
=head1 EXAMPLE: Digtal clock with "blinking" :
|
Save output from B<ps aux> every second into dirs named
|
||||||
|
yyyy-mm-ddThh:mm:ss+zz:zz.
|
||||||
|
|
||||||
|
seq 1000 | parallel -N0 -j1 --delay 1 \
|
||||||
|
--results '{= $_=`date -Isec`; chomp=}/' ps aux
|
||||||
|
|
||||||
|
|
||||||
|
=head1 EXAMPLE: Digital clock with "blinking" :
|
||||||
|
|
||||||
The : in a digital clock blinks. To make every other line have a ':'
|
The : in a digital clock blinks. To make every other line have a ':'
|
||||||
and the rest a ' ' a perl expression is used to look at the 3rd input
|
and the rest a ' ' a perl expression is used to look at the 3rd input
|
||||||
source. If the value modudo 2 is 1: Use ":" otherwise use " ":
|
source. If the value modulo 2 is 1: Use ":" otherwise use " ":
|
||||||
|
|
||||||
parallel -k echo {1}'{=3 $_=$_%2?":":" "=}'{2}{3} \
|
parallel -k echo {1}'{=3 $_=$_%2?":":" "=}'{2}{3} \
|
||||||
::: {0..12} ::: {0..5} ::: {0..9}
|
::: {0..12} ::: {0..5} ::: {0..9}
|
||||||
|
@ -4862,9 +4895,9 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
||||||
|
|
||||||
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange,
|
Copyright (C) 2010-2018 Ole Tange,
|
||||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
http://ole.tange.dk and Free Software Foundation, Inc.
|
||||||
|
|
||||||
Parts of the manual concerning B<xargs> compatibility is inspired by
|
Parts of the manual concerning B<xargs> compatibility is inspired by
|
||||||
|
@ -4873,9 +4906,7 @@ the manual of B<xargs> from GNU findutils 4.4.2.
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
||||||
Copyright (C)
|
Copyright (C) 2007-2018 Free Software Foundation, Inc.
|
||||||
2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018 Free
|
|
||||||
Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -13,6 +13,16 @@ There are a lot programs with some of the functionality of GNU
|
||||||
B<parallel>. GNU B<parallel> strives to include the best of the
|
B<parallel>. GNU B<parallel> strives to include the best of the
|
||||||
functionality without sacrificing ease of use.
|
functionality without sacrificing ease of use.
|
||||||
|
|
||||||
|
B<parallel> has existed since 2002 and as GNU B<parallel> since
|
||||||
|
2010. A lot of the alternatives have not had the vitality to survive
|
||||||
|
that long, but have come and gone during that time.
|
||||||
|
|
||||||
|
GNU B<parallel> is actively maintained with a new release every month
|
||||||
|
since 2010. Most other alternatives are fleeting interests of the
|
||||||
|
developers with irregular releases and only maintained for a few
|
||||||
|
years.
|
||||||
|
|
||||||
|
|
||||||
=head2 SUMMARY TABLE
|
=head2 SUMMARY TABLE
|
||||||
|
|
||||||
The following features are in some of the comparable tools:
|
The following features are in some of the comparable tools:
|
||||||
|
@ -205,7 +215,7 @@ composed commands and redirection require using B<bash -c>.
|
||||||
ls | parallel "wc {} >{}.wc"
|
ls | parallel "wc {} >{}.wc"
|
||||||
ls | parallel "echo {}; ls {}|wc"
|
ls | parallel "echo {}; ls {}|wc"
|
||||||
|
|
||||||
becomes (assuming you have 8 cores and that none of the file names
|
becomes (assuming you have 8 cores and that none of the filenames
|
||||||
contain space, " or ').
|
contain space, " or ').
|
||||||
|
|
||||||
ls | xargs -d "\n" -P8 -I {} bash -c "wc {} >{}.wc"
|
ls | xargs -d "\n" -P8 -I {} bash -c "wc {} >{}.wc"
|
||||||
|
@ -216,9 +226,9 @@ https://www.gnu.org/software/findutils/
|
||||||
|
|
||||||
=head2 DIFFERENCES BETWEEN find -exec AND GNU Parallel
|
=head2 DIFFERENCES BETWEEN find -exec AND GNU Parallel
|
||||||
|
|
||||||
B<find -exec> offer some of the same possibilities as GNU B<parallel>.
|
B<find -exec> offers some of the same possibilities as GNU B<parallel>.
|
||||||
|
|
||||||
B<find -exec> only works on files. So processing other input (such as
|
B<find -exec> only works on files. Processing other input (such as
|
||||||
hosts or URLs) will require creating these inputs as files. B<find
|
hosts or URLs) will require creating these inputs as files. B<find
|
||||||
-exec> has no support for running commands in parallel.
|
-exec> has no support for running commands in parallel.
|
||||||
|
|
||||||
|
@ -228,13 +238,13 @@ https://www.gnu.org/software/findutils/
|
||||||
=head2 DIFFERENCES BETWEEN make -j AND GNU Parallel
|
=head2 DIFFERENCES BETWEEN make -j AND GNU Parallel
|
||||||
|
|
||||||
B<make -j> can run jobs in parallel, but requires a crafted Makefile
|
B<make -j> can run jobs in parallel, but requires a crafted Makefile
|
||||||
to do this. That results in extra quoting to get filename containing
|
to do this. That results in extra quoting to get filenames containing
|
||||||
newline to work correctly.
|
newlines to work correctly.
|
||||||
|
|
||||||
B<make -j> computes a dependency graph before running jobs. Jobs run
|
B<make -j> computes a dependency graph before running jobs. Jobs run
|
||||||
by GNU B<parallel> does not depend on eachother.
|
by GNU B<parallel> does not depend on each other.
|
||||||
|
|
||||||
(Very early versions of GNU B<parallel> were coincidently implemented
|
(Very early versions of GNU B<parallel> were coincidentally implemented
|
||||||
using B<make -j>).
|
using B<make -j>).
|
||||||
|
|
||||||
https://www.gnu.org/software/make/
|
https://www.gnu.org/software/make/
|
||||||
|
@ -250,10 +260,10 @@ into files.
|
||||||
|
|
||||||
The argument replace string ($ITEM) cannot be changed. Arguments must
|
The argument replace string ($ITEM) cannot be changed. Arguments must
|
||||||
be quoted - thus arguments containing special characters (space '"&!*)
|
be quoted - thus arguments containing special characters (space '"&!*)
|
||||||
may cause problems. More than one argument is not supported. File
|
may cause problems. More than one argument is not supported. Filenames
|
||||||
names containing newlines are not processed correctly. When reading
|
containing newlines are not processed correctly. When reading input
|
||||||
input from a file null cannot be used as a terminator. B<ppss> needs
|
from a file null cannot be used as a terminator. B<ppss> needs to read
|
||||||
to read the whole input file before starting any jobs.
|
the whole input file before starting any jobs.
|
||||||
|
|
||||||
Output and status information is stored in ppss_dir and thus requires
|
Output and status information is stored in ppss_dir and thus requires
|
||||||
cleanup when completed. If the dir is not removed before running
|
cleanup when completed. If the dir is not removed before running
|
||||||
|
@ -452,15 +462,16 @@ B<dxargs> does not deal well with more simultaneous jobs than SSHD's
|
||||||
MaxStartups. B<dxargs> is only built for remote run jobs, but does not
|
MaxStartups. B<dxargs> is only built for remote run jobs, but does not
|
||||||
support transferring of files.
|
support transferring of files.
|
||||||
|
|
||||||
http://www.semicomplete.com/blog/geekery/distributed-xargs.html
|
https://web.archive.org/web/20120518070250/http://www.semicomplete.com/blog/geekery/distributed-xargs.html
|
||||||
|
|
||||||
|
|
||||||
=head2 DIFFERENCES BETWEEN mdm/middleman AND GNU Parallel
|
=head2 DIFFERENCES BETWEEN mdm/middleman AND GNU Parallel
|
||||||
|
|
||||||
middleman(mdm) is also a tool for running jobs in parallel.
|
middleman(mdm) is also a tool for running jobs in parallel.
|
||||||
|
|
||||||
Here are the shellscripts of http://mdm.berlios.de/usage.html ported
|
Here are the shellscripts of
|
||||||
to GNU B<parallel>:
|
https://web.archive.org/web/20110728064735/http://mdm.berlios.de/usage.html
|
||||||
|
ported to GNU B<parallel>:
|
||||||
|
|
||||||
seq 19 | parallel buffon -o - | sort -n > result
|
seq 19 | parallel buffon -o - | sort -n > result
|
||||||
cat files | parallel cmd
|
cat files | parallel cmd
|
||||||
|
@ -615,7 +626,7 @@ https://github.com/cheusov/paexec
|
||||||
B<map> sees it as a feature to have less features and in doing so it
|
B<map> sees it as a feature to have less features and in doing so it
|
||||||
also handles corner cases incorrectly. A lot of GNU B<parallel>'s code
|
also handles corner cases incorrectly. A lot of GNU B<parallel>'s code
|
||||||
is to handle corner cases correctly on every platform, so you will not
|
is to handle corner cases correctly on every platform, so you will not
|
||||||
get a nasty surprise if a user for example saves a file called: I<My
|
get a nasty surprise if a user, for example, saves a file called: I<My
|
||||||
brother's 12" records.txt>
|
brother's 12" records.txt>
|
||||||
|
|
||||||
B<map>'s example showing how to deal with special characters fails on
|
B<map>'s example showing how to deal with special characters fails on
|
||||||
|
@ -624,17 +635,20 @@ special characters:
|
||||||
echo "The Cure" > My\ brother\'s\ 12\"\ records
|
echo "The Cure" > My\ brother\'s\ 12\"\ records
|
||||||
|
|
||||||
ls | \
|
ls | \
|
||||||
map 'echo -n `gzip < "%" | wc -c`; echo -n '*100/'; wc -c < "%"' | bc
|
map 'echo -n `gzip < "%" | wc -c`; echo -n '*100/'; wc -c < "%"' |
|
||||||
|
bc
|
||||||
|
|
||||||
It works with GNU B<parallel>:
|
It works with GNU B<parallel>:
|
||||||
|
|
||||||
ls | \
|
ls | \
|
||||||
parallel 'echo -n `gzip < {} | wc -c`; echo -n '*100/'; wc -c < {}' | bc
|
parallel \
|
||||||
|
'echo -n `gzip < {} | wc -c`; echo -n '*100/'; wc -c < {}' | bc
|
||||||
|
|
||||||
And you can even get the file name prepended:
|
And you can even get the file name prepended:
|
||||||
|
|
||||||
ls | \
|
ls | \
|
||||||
parallel --tag '(echo -n `gzip < {} | wc -c`'*100/'; wc -c < {}) | bc'
|
parallel --tag \
|
||||||
|
'(echo -n `gzip < {} | wc -c`'*100/'; wc -c < {}) | bc'
|
||||||
|
|
||||||
B<map> has no support for grouping. So this gives the wrong results
|
B<map> has no support for grouping. So this gives the wrong results
|
||||||
without any warnings:
|
without any warnings:
|
||||||
|
@ -655,23 +669,22 @@ completely for certain jobs (and may even be considered less readable):
|
||||||
|
|
||||||
parallel echo -n {} ::: 1 2 3
|
parallel echo -n {} ::: 1 2 3
|
||||||
|
|
||||||
map -p 4 'echo -n % 2>&1 | sed -e "s/^/$$:/"' 1 2 3 | sort | cut -f2- -d:
|
map -p 4 'echo -n % 2>&1 | sed -e "s/^/$$:/"' 1 2 3 | \
|
||||||
|
sort | cut -f2- -d:
|
||||||
|
|
||||||
B<map>s replacement strings (% %D %B %E) can be simulated in GNU
|
B<map>s replacement strings (% %D %B %E) can be simulated in GNU
|
||||||
B<parallel> by putting this in B<~/.parallel/config>:
|
B<parallel> by putting this in B<~/.parallel/config>:
|
||||||
|
|
||||||
--rpl '%'
|
--rpl '%'
|
||||||
--rpl '%D $_=::shell_quote(::dirname($_));'
|
--rpl '%D $_=Q(::dirname($_));'
|
||||||
--rpl '%B s:.*/::;s:\.[^/.]+$::;'
|
--rpl '%B s:.*/::;s:\.[^/.]+$::;'
|
||||||
--rpl '%E s:.*\.::'
|
--rpl '%E s:.*\.::'
|
||||||
|
|
||||||
B<map> cannot handle bundled options: B<map -vp 0 echo this fails>
|
|
||||||
|
|
||||||
B<map> does not have an argument separator on the command line, but
|
B<map> does not have an argument separator on the command line, but
|
||||||
uses the first argument as command. This makes quoting harder which again
|
uses the first argument as command. This makes quoting harder which again
|
||||||
may affect readability. Compare:
|
may affect readability. Compare:
|
||||||
|
|
||||||
map -p 2 perl\\\ -ne\\\ \\\'/^\\\\S+\\\\s+\\\\S+\\\$/\\\ and\\\ print\\\ \\\$ARGV,\\\"\\\\n\\\"\\\' *
|
map -p 2 'perl -ne '"'"'/^\S+\s+\S+$/ and print $ARGV,"\n"'"'" *
|
||||||
|
|
||||||
parallel -q perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ::: *
|
parallel -q perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' ::: *
|
||||||
|
|
||||||
|
@ -680,16 +693,11 @@ context replace:
|
||||||
|
|
||||||
parallel --xargs echo 'BEGIN{'{}'}END' ::: 1 2 3
|
parallel --xargs echo 'BEGIN{'{}'}END' ::: 1 2 3
|
||||||
|
|
||||||
B<map> does not set exit value according to whether one of the jobs
|
map "echo 'BEGIN{'%'}END'" 1 2 3
|
||||||
failed:
|
|
||||||
|
|
||||||
parallel false ::: 1 || echo Job failed
|
|
||||||
|
|
||||||
map false 1 || echo Never run
|
|
||||||
|
|
||||||
B<map> requires Perl v5.10.0 making it harder to use on old systems.
|
B<map> requires Perl v5.10.0 making it harder to use on old systems.
|
||||||
|
|
||||||
B<map> has no way of using % in the command (GNU Parallel has -I to
|
B<map> has no way of using % in the command (GNU B<parallel> has -I to
|
||||||
specify another replacement string than B<{}>).
|
specify another replacement string than B<{}>).
|
||||||
|
|
||||||
By design B<map> is option incompatible with B<xargs>, it does not
|
By design B<map> is option incompatible with B<xargs>, it does not
|
||||||
|
@ -710,18 +718,23 @@ B<ladon> only works on files and the only way to specify files is
|
||||||
using a quoted glob string (such as \*.jpg). It is not possible to
|
using a quoted glob string (such as \*.jpg). It is not possible to
|
||||||
list the files manually.
|
list the files manually.
|
||||||
|
|
||||||
As replacement strings it uses FULLPATH DIRNAME BASENAME EXT RELDIR RELPATH
|
As replacement strings it uses FULLPATH DIRNAME BASENAME EXT RELDIR
|
||||||
|
RELPATH
|
||||||
|
|
||||||
These can be simulated using GNU B<parallel> by putting this in B<~/.parallel/config>:
|
These can be simulated using GNU B<parallel> by putting this in
|
||||||
|
B<~/.parallel/config>:
|
||||||
|
|
||||||
--rpl 'FULLPATH $_=::shell_quote($_);chomp($_=qx{readlink -f $_});'
|
--rpl 'FULLPATH $_=Q($_);chomp($_=qx{readlink -f $_});'
|
||||||
--rpl 'DIRNAME $_=::shell_quote(::dirname($_));chomp($_=qx{readlink -f $_});'
|
--rpl 'DIRNAME $_=Q(::dirname($_));chomp($_=qx{readlink -f $_});'
|
||||||
--rpl 'BASENAME s:.*/::;s:\.[^/.]+$::;'
|
--rpl 'BASENAME s:.*/::;s:\.[^/.]+$::;'
|
||||||
--rpl 'EXT s:.*\.::'
|
--rpl 'EXT s:.*\.::'
|
||||||
--rpl 'RELDIR $_=::shell_quote($_);chomp(($_,$c)=qx{readlink -f $_;pwd});s:\Q$c/\E::;$_=::dirname($_);'
|
--rpl 'RELDIR $_=Q($_);chomp(($_,$c)=qx{readlink -f $_;pwd});
|
||||||
--rpl 'RELPATH $_=::shell_quote($_);chomp(($_,$c)=qx{readlink -f $_;pwd});s:\Q$c/\E::;'
|
s:\Q$c/\E::;$_=::dirname($_);'
|
||||||
|
--rpl 'RELPATH $_=Q($_);chomp(($_,$c)=qx{readlink -f $_;pwd});
|
||||||
|
s:\Q$c/\E::;'
|
||||||
|
|
||||||
B<ladon> deals badly with filenames containing " and newline, and it fails for output larger than 200k:
|
B<ladon> deals badly with filenames containing " and newline, and it
|
||||||
|
fails for output larger than 200k:
|
||||||
|
|
||||||
ladon '*' -- seq 36000 | wc
|
ladon '*' -- seq 36000 | wc
|
||||||
|
|
||||||
|
@ -755,17 +768,23 @@ B<jobflow> can run multiple jobs in parallel.
|
||||||
|
|
||||||
Just like B<xargs> output from B<jobflow> jobs running in parallel mix
|
Just like B<xargs> output from B<jobflow> jobs running in parallel mix
|
||||||
together by default. B<jobflow> can buffer into files (placed in
|
together by default. B<jobflow> can buffer into files (placed in
|
||||||
/run/shm), but these are not cleaned up - not even if B<jobflow> dies
|
/run/shm), but these are not cleaned up if B<jobflow> dies
|
||||||
unexpectently. If the total output is big (in the order of RAM+swap)
|
unexpectedly (e.g. by Ctrl-C). If the total output is big (in the
|
||||||
it can cause the system to run out of memory.
|
order of RAM+swap) it can cause the system to slow to a crawl and
|
||||||
|
eventually run out of memory.
|
||||||
|
|
||||||
B<jobflow> gives no error if the command is unknown, and like B<xargs>
|
B<jobflow> gives no error if the command is unknown, and like B<xargs>
|
||||||
redirection requires wrapping with B<bash -c>.
|
redirection and composed commands require wrapping with B<bash -c>.
|
||||||
|
|
||||||
|
Input lines can at most be 4096 bytes. You can at most have 16 {}'s in
|
||||||
|
the command template. More than that either crashes the program or
|
||||||
|
simple does not execute the command.
|
||||||
|
|
||||||
|
B<jobflow> has no equivalent for B<--pipe>, or B<--sshlogin>.
|
||||||
|
|
||||||
B<jobflow> makes it possible to set resource limits on the running
|
B<jobflow> makes it possible to set resource limits on the running
|
||||||
jobs. This can be emulated by GNU B<parallel> using B<bash>'s B<ulimit>:
|
jobs. This can be emulated by GNU B<parallel> using B<bash>'s B<ulimit>:
|
||||||
|
|
||||||
|
|
||||||
jobflow -limits=mem=100M,cpu=3,fsize=20M,nofiles=300 myjob
|
jobflow -limits=mem=100M,cpu=3,fsize=20M,nofiles=300 myjob
|
||||||
|
|
||||||
parallel 'ulimit -v 102400 -t 3 -f 204800 -n 300 myjob'
|
parallel 'ulimit -v 102400 -t 3 -f 204800 -n 300 myjob'
|
||||||
|
@ -832,7 +851,7 @@ setting SSHPASS and by using B<--ssh "sshpass ssh">.
|
||||||
|
|
||||||
To make the emulation easier, make a simple alias:
|
To make the emulation easier, make a simple alias:
|
||||||
|
|
||||||
alias par_emul="parallel -j0 --ssh 'sshpass ssh' --nonall --tag --linebuffer"
|
alias par_emul="parallel -j0 --ssh 'sshpass ssh' --nonall --tag --lb"
|
||||||
|
|
||||||
If you want to supply a password run:
|
If you want to supply a password run:
|
||||||
|
|
||||||
|
@ -850,8 +869,10 @@ If the above is set up you can then do:
|
||||||
orgalorg -o frontend1 -o frontend2 -p -C top -bid 1
|
orgalorg -o frontend1 -o frontend2 -p -C top -bid 1
|
||||||
par_emul -S frontend1 -S frontend2 top -bid 1
|
par_emul -S frontend1 -S frontend2 top -bid 1
|
||||||
|
|
||||||
orgalorg -o frontend1 -o frontend2 -p -er /tmp -n 'md5sum /tmp/bigfile' -S bigfile
|
orgalorg -o frontend1 -o frontend2 -p -er /tmp -n \
|
||||||
par_emul -S frontend1 -S frontend2 --basefile bigfile --workdir /tmp md5sum /tmp/bigfile
|
'md5sum /tmp/bigfile' -S bigfile
|
||||||
|
par_emul -S frontend1 -S frontend2 --basefile bigfile --workdir /tmp \
|
||||||
|
md5sum /tmp/bigfile
|
||||||
|
|
||||||
B<orgalorg> has a progress indicator for the transferring of a
|
B<orgalorg> has a progress indicator for the transferring of a
|
||||||
file. GNU B<parallel> does not.
|
file. GNU B<parallel> does not.
|
||||||
|
@ -865,8 +886,6 @@ Rust parallel focuses on speed. It is almost as fast as B<xargs>. It
|
||||||
implements a few features from GNU B<parallel>, but lacks many
|
implements a few features from GNU B<parallel>, but lacks many
|
||||||
functions. All these fail:
|
functions. All these fail:
|
||||||
|
|
||||||
# Show what would be executed
|
|
||||||
parallel --dry-run echo ::: a
|
|
||||||
# Read arguments from file
|
# Read arguments from file
|
||||||
parallel -a file echo
|
parallel -a file echo
|
||||||
# Changing the delimiter
|
# Changing the delimiter
|
||||||
|
@ -874,8 +893,6 @@ functions. All these fail:
|
||||||
|
|
||||||
These do something different from GNU B<parallel>
|
These do something different from GNU B<parallel>
|
||||||
|
|
||||||
# Read more arguments at a time -n
|
|
||||||
parallel -n 2 echo ::: 1 a 2 b
|
|
||||||
# -q to protect quoted $ and space
|
# -q to protect quoted $ and space
|
||||||
parallel -q perl -e '$a=shift; print "$a"x10000000' ::: a b c
|
parallel -q perl -e '$a=shift; print "$a"x10000000' ::: a b c
|
||||||
# Generation of combination of inputs
|
# Generation of combination of inputs
|
||||||
|
@ -885,7 +902,7 @@ These do something different from GNU B<parallel>
|
||||||
# --pipe
|
# --pipe
|
||||||
seq 100000 | parallel --pipe wc
|
seq 100000 | parallel --pipe wc
|
||||||
# linked arguments
|
# linked arguments
|
||||||
parallel echo ::: S M L :::+ small medium large ::: R G B :::+ red green blue
|
parallel echo ::: S M L :::+ sml med lrg ::: R G B :::+ red grn blu
|
||||||
# Run different shell dialects
|
# Run different shell dialects
|
||||||
zsh -c 'parallel echo \={} ::: zsh && true'
|
zsh -c 'parallel echo \={} ::: zsh && true'
|
||||||
csh -c 'parallel echo \$\{\} ::: shell && true'
|
csh -c 'parallel echo \$\{\} ::: shell && true'
|
||||||
|
@ -894,15 +911,26 @@ These do something different from GNU B<parallel>
|
||||||
(seq 10; sleep 5; echo 2) | time parallel -j2 'sleep 2; echo'
|
(seq 10; sleep 5; echo 2) | time parallel -j2 'sleep 2; echo'
|
||||||
tail -f /var/log/syslog | parallel echo
|
tail -f /var/log/syslog | parallel echo
|
||||||
|
|
||||||
|
Most of the examples from the book GNU Parallel 2018 do not work, thus
|
||||||
|
Rust parallel is not close to being a compatible replacement.
|
||||||
|
|
||||||
Rust parallel has no remote facilities.
|
Rust parallel has no remote facilities.
|
||||||
|
|
||||||
It uses /tmp/parallel for tmp files and does not clean up if
|
It uses /tmp/parallel for tmp files and does not clean up if
|
||||||
terminated abrubtly. If another user on the system uses Rust parallel,
|
terminated abruptly. If another user on the system uses Rust parallel,
|
||||||
then /tmp/parallel will have the wrong permissions and Rust parallel
|
then /tmp/parallel will have the wrong permissions and Rust parallel
|
||||||
will fail. A malicious user can setup the right permissions and
|
will fail. A malicious user can setup the right permissions and
|
||||||
symlink the output file to one of the user's files and next time the
|
symlink the output file to one of the user's files and next time the
|
||||||
user uses Rust parallel it will overwrite this file.
|
user uses Rust parallel it will overwrite this file.
|
||||||
|
|
||||||
|
attacker$ mkdir /tmp/parallel
|
||||||
|
attacker$ chmod a+rwX /tmp/parallel
|
||||||
|
# Symlink to the file the attacker wants to zero out
|
||||||
|
attacker$ ln -s ~victim/.important-file /tmp/parallel/stderr_1
|
||||||
|
victim$ seq 1000 | parallel echo
|
||||||
|
# This file is now overwritten with stderr from 'echo'
|
||||||
|
victim$ cat ~victim/.important-file
|
||||||
|
|
||||||
If /tmp/parallel runs full during the run, Rust parallel does not
|
If /tmp/parallel runs full during the run, Rust parallel does not
|
||||||
report this, but finishes with success - thereby risking data loss.
|
report this, but finishes with success - thereby risking data loss.
|
||||||
|
|
||||||
|
@ -1112,7 +1140,7 @@ B<15. Interrupt jobs by `Ctrl-C`, rush will stop unfinished commands and exit.>
|
||||||
^C
|
^C
|
||||||
|
|
||||||
B<16. Continue/resume jobs (`-c`). When some jobs failed (by
|
B<16. Continue/resume jobs (`-c`). When some jobs failed (by
|
||||||
execution failure, timeout, or cancelling by user with `Ctrl + C`),
|
execution failure, timeout, or canceling by user with `Ctrl + C`),
|
||||||
please switch flag `-c/--continue` on and run again, so that `rush`
|
please switch flag `-c/--continue` on and run again, so that `rush`
|
||||||
can save successful commands and ignore them in I<NEXT> run.>
|
can save successful commands and ignore them in I<NEXT> run.>
|
||||||
|
|
||||||
|
@ -1144,7 +1172,7 @@ Multi-line jobs:
|
||||||
|
|
||||||
B<17. A comprehensive example: downloading 1K+ pages given by
|
B<17. A comprehensive example: downloading 1K+ pages given by
|
||||||
three URL list files using `phantomjs save_page.js` (some page
|
three URL list files using `phantomjs save_page.js` (some page
|
||||||
contents are dynamicly generated by Javascript, so `wget` does not
|
contents are dynamically generated by Javascript, so `wget` does not
|
||||||
work). Here I set max jobs number (`-j`) as `20`, each job has a max
|
work). Here I set max jobs number (`-j`) as `20`, each job has a max
|
||||||
running time (`-t`) of `60` seconds and `3` retry changes
|
running time (`-t`) of `60` seconds and `3` retry changes
|
||||||
(`-r`). Continue flag `-c` is also switched on, so we can continue
|
(`-r`). Continue flag `-c` is also switched on, so we can continue
|
||||||
|
@ -1286,7 +1314,8 @@ E.g.
|
||||||
|
|
||||||
With GNU B<parallel> this can be emulated by:
|
With GNU B<parallel> this can be emulated by:
|
||||||
|
|
||||||
echo foosuffix | parallel --plus 'p={%suffix}; echo ${p}_new_suffix'
|
echo foosuffix |
|
||||||
|
parallel --plus 'p={%suffix}; echo ${p}_new_suffix'
|
||||||
|
|
||||||
Opposite B<rush> GNU B<parallel> works fine if the input contains
|
Opposite B<rush> GNU B<parallel> works fine if the input contains
|
||||||
double space, ' and ":
|
double space, ' and ":
|
||||||
|
@ -1298,7 +1327,7 @@ double space, ' and ":
|
||||||
=item * Commands of multi-lines
|
=item * Commands of multi-lines
|
||||||
|
|
||||||
While you I<can> use multi-lined commands in GNU B<parallel>, to
|
While you I<can> use multi-lined commands in GNU B<parallel>, to
|
||||||
improve readibilty GNU B<parallel> discourages the use of multi-line
|
improve readability GNU B<parallel> discourages the use of multi-line
|
||||||
commands. In most cases it can be written as a function:
|
commands. In most cases it can be written as a function:
|
||||||
|
|
||||||
seq 1 3 |
|
seq 1 3 |
|
||||||
|
@ -1376,7 +1405,7 @@ It can be emulated with GNU B<parallel> using this Bash function:
|
||||||
parallel $(_cmds "$@")'|| echo exit status $?' ::: */
|
parallel $(_cmds "$@")'|| echo exit status $?' ::: */
|
||||||
}
|
}
|
||||||
|
|
||||||
This works execpt for the B<--exclude> option.
|
This works except for the B<--exclude> option.
|
||||||
|
|
||||||
|
|
||||||
=head2 DIFFERENCES BETWEEN pyargs AND GNU Parallel
|
=head2 DIFFERENCES BETWEEN pyargs AND GNU Parallel
|
||||||
|
@ -1432,7 +1461,7 @@ The output is prepended with the job number, and may be incomplete:
|
||||||
7165
|
7165
|
||||||
|
|
||||||
When pretty printing it caches output in memory. Output mixes by using
|
When pretty printing it caches output in memory. Output mixes by using
|
||||||
test MIX below wether or not output is cached.
|
test MIX below whether or not output is cached.
|
||||||
|
|
||||||
There seems to be no way of making a template command and have
|
There seems to be no way of making a template command and have
|
||||||
B<concurrently> fill that with different args. The full commands must
|
B<concurrently> fill that with different args. The full commands must
|
||||||
|
@ -1457,7 +1486,7 @@ B<map> itself, the output also mixes:
|
||||||
|
|
||||||
seq 10 | map i 'echo start-$i && sleep 0.$i && echo end-$i &'
|
seq 10 | map i 'echo start-$i && sleep 0.$i && echo end-$i &'
|
||||||
|
|
||||||
The major difference is that GNU B<parallel> is build for parallelization
|
The major difference is that GNU B<parallel> is built for parallelization
|
||||||
and map is not. So GNU B<parallel> has lots of ways of dealing with the
|
and map is not. So GNU B<parallel> has lots of ways of dealing with the
|
||||||
issues that parallelization raises:
|
issues that parallelization raises:
|
||||||
|
|
||||||
|
@ -1490,7 +1519,7 @@ Here are the 5 examples converted to GNU Parallel:
|
||||||
|
|
||||||
4$ printf "1\n1\n1\n" | map t 'sleep $t && say done'
|
4$ printf "1\n1\n1\n" | map t 'sleep $t && say done'
|
||||||
4$ printf "1\n1\n1\n" | parallel 'sleep {} && say done'
|
4$ printf "1\n1\n1\n" | parallel 'sleep {} && say done'
|
||||||
4$ paralllel 'sleep {} && say done' ::: 1 1 1
|
4$ parallel 'sleep {} && say done' ::: 1 1 1
|
||||||
|
|
||||||
5$ printf "1\n1\n1\n" | map t 'sleep $t && say done &'
|
5$ printf "1\n1\n1\n" | map t 'sleep $t && say done &'
|
||||||
5$ printf "1\n1\n1\n" | parallel -j0 'sleep {} && say done'
|
5$ printf "1\n1\n1\n" | parallel -j0 'sleep {} && say done'
|
||||||
|
@ -1499,11 +1528,211 @@ Here are the 5 examples converted to GNU Parallel:
|
||||||
https://github.com/soveran/map
|
https://github.com/soveran/map
|
||||||
|
|
||||||
|
|
||||||
|
=head2 DIFFERENCES BETWEEN loop AND GNU Parallel
|
||||||
|
|
||||||
|
B<loop> mixes stdout and stderr:
|
||||||
|
|
||||||
|
loop 'ls /no-such-file' >/dev/null
|
||||||
|
|
||||||
|
B<loop>'s replacement string B<$ITEM> does not quote strings:
|
||||||
|
|
||||||
|
echo 'two spaces' | loop 'echo $ITEM'
|
||||||
|
|
||||||
|
B<loop> cannot run functions:
|
||||||
|
|
||||||
|
myfunc() { echo joe; }
|
||||||
|
export -f myfunc
|
||||||
|
loop 'myfunc this fails'
|
||||||
|
|
||||||
|
Some of the examples from https://github.com/Miserlou/Loop/ can be
|
||||||
|
emulated with GNU B<parallel>:
|
||||||
|
|
||||||
|
# A couple of functions will make the code easier to read
|
||||||
|
$ loopy() {
|
||||||
|
yes | parallel -uN0 -j1 "$@"
|
||||||
|
}
|
||||||
|
$ export -f loopy
|
||||||
|
$ time_out() {
|
||||||
|
parallel -uN0 -q --timeout "$@" ::: 1
|
||||||
|
}
|
||||||
|
$ match() {
|
||||||
|
perl -0777 -ne 'grep /'"$1"'/,$_ and print or exit 1'
|
||||||
|
}
|
||||||
|
$ export -f match
|
||||||
|
|
||||||
|
$ loop 'ls' --every 10s
|
||||||
|
$ loopy --delay 10s ls
|
||||||
|
|
||||||
|
$ loop 'touch $COUNT.txt' --count-by 5
|
||||||
|
$ loopy touch '{= $_=seq()*5 =}'.txt
|
||||||
|
|
||||||
|
$ loop --until-contains 200 -- ./get_response_code.sh --site mysite.biz`
|
||||||
|
$ loopy --halt now,success=1 './get_response_code.sh --site mysite.biz |
|
||||||
|
match 200'
|
||||||
|
|
||||||
|
$ loop './poke_server' --for-duration 8h
|
||||||
|
$ time_out 8h loopy ./poke_server
|
||||||
|
|
||||||
|
$ loop './poke_server' --until-success
|
||||||
|
$ loopy --halt now,success=1 ./poke_server
|
||||||
|
|
||||||
|
$ cat files_to_create.txt | loop 'touch $ITEM'
|
||||||
|
$ cat files_to_create.txt | parallel touch {}
|
||||||
|
|
||||||
|
$ loop 'ls' --for-duration 10min --summary
|
||||||
|
# --joblog is somewhat more verbose than --summary
|
||||||
|
$ time_out 10m loopy --joblog my.log ./poke_server; cat my.log
|
||||||
|
|
||||||
|
$ loop 'echo hello'
|
||||||
|
$ loopy echo hello
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT'
|
||||||
|
# GNU Parallel counts from 1
|
||||||
|
$ loopy echo {#}
|
||||||
|
# Counting from 0 can be forced
|
||||||
|
$ loopy echo '{= $_=seq()-1 =}'
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT' --count-by 2
|
||||||
|
$ loopy echo '{= $_=2*(seq()-1) =}'
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT' --count-by 2 --offset 10
|
||||||
|
$ loopy echo '{= $_=10+2*(seq()-1) =}'
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT' --count-by 1.1
|
||||||
|
# GNU Parallel rounds 3.3000000000000003 to 3.3
|
||||||
|
$ loopy echo '{= $_=1.1*(seq()-1) =}'
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT $ACTUALCOUNT' --count-by 2
|
||||||
|
$ loopy echo '{= $_=2*(seq()-1) =} {#}'
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT' --num 3 --summary
|
||||||
|
# --joblog is somewhat more verbose than --summary
|
||||||
|
$ seq 3 | parallel --joblog my.log echo; cat my.log
|
||||||
|
|
||||||
|
$ loop 'ls -foobarbatz' --num 3 --summary
|
||||||
|
# --joblog is somewhat more verbose than --summary
|
||||||
|
$ seq 3 | parallel --joblog my.log -N0 ls -foobarbatz; cat my.log
|
||||||
|
|
||||||
|
$ loop 'echo $COUNT' --count-by 2 --num 50 --only-last
|
||||||
|
# Can be emulated by running 2 jobs
|
||||||
|
$ seq 49 | parallel echo '{= $_=2*(seq()-1) =}' >/dev/null
|
||||||
|
$ echo 50| parallel echo '{= $_=2*(seq()-1) =}'
|
||||||
|
|
||||||
|
$ loop 'date' --every 5s
|
||||||
|
$ loopy --delay 5s date
|
||||||
|
|
||||||
|
$ loop 'date' --for-duration 8s --every 2s
|
||||||
|
$ time_out 8s loopy --delay 2s date
|
||||||
|
|
||||||
|
$ loop 'date -u' --until-time '2018-05-25 20:50:00' --every 5s
|
||||||
|
$ seconds=$((`date -d 2019-05-25T20:50:00 +%s` - `date +%s`))s
|
||||||
|
$ time_out $seconds loopy --delay 5s date -u
|
||||||
|
|
||||||
|
$ loop 'echo $RANDOM' --until-contains "666"
|
||||||
|
$ loopy --halt now,success=1 'echo $RANDOM | match 666'
|
||||||
|
|
||||||
|
$ loop 'if (( RANDOM % 2 )); then
|
||||||
|
(echo "TRUE"; true);
|
||||||
|
else
|
||||||
|
(echo "FALSE"; false);
|
||||||
|
fi' --until-success
|
||||||
|
$ loopy --halt now,success=1 'if (( $RANDOM % 2 )); then
|
||||||
|
(echo "TRUE"; true);
|
||||||
|
else
|
||||||
|
(echo "FALSE"; false);
|
||||||
|
fi'
|
||||||
|
|
||||||
|
$ loop 'if (( RANDOM % 2 )); then
|
||||||
|
(echo "TRUE"; true);
|
||||||
|
else
|
||||||
|
(echo "FALSE"; false);
|
||||||
|
fi' --until-error
|
||||||
|
$ loopy --halt now,fail=1 'if (( $RANDOM % 2 )); then
|
||||||
|
(echo "TRUE"; true);
|
||||||
|
else
|
||||||
|
(echo "FALSE"; false);
|
||||||
|
fi'
|
||||||
|
|
||||||
|
$ loop 'date' --until-match "(\d{4})"
|
||||||
|
$ loopy --halt now,success=1 'date | match [0-9][0-9][0-9][0-9]'
|
||||||
|
|
||||||
|
$ loop 'echo $ITEM' --for red,green,blue
|
||||||
|
$ parallel echo ::: red green blue
|
||||||
|
|
||||||
|
$ cat /tmp/my-list-of-files-to-create.txt | loop 'touch $ITEM'
|
||||||
|
$ cat /tmp/my-list-of-files-to-create.txt | parallel touch
|
||||||
|
|
||||||
|
$ ls | loop 'cp $ITEM $ITEM.bak'; ls
|
||||||
|
$ ls | parallel cp {} {}.bak; ls
|
||||||
|
|
||||||
|
$ loop 'echo $ITEM | tr a-z A-Z' -i
|
||||||
|
$ parallel 'echo {} | tr a-z A-Z'
|
||||||
|
# Or more efficiently:
|
||||||
|
$ parallel --pipe tr a-z A-Z
|
||||||
|
|
||||||
|
$ loop 'echo $ITEM' --for "`ls`"
|
||||||
|
$ parallel echo {} ::: "`ls`"
|
||||||
|
|
||||||
|
$ ls | loop './my_program $ITEM' --until-success;
|
||||||
|
$ ls | parallel --halt now,success=1 ./my_program {}
|
||||||
|
|
||||||
|
$ ls | loop './my_program $ITEM' --until-fail;
|
||||||
|
$ ls | parallel --halt now,fail=1 ./my_program {}
|
||||||
|
|
||||||
|
$ ./deploy.sh;
|
||||||
|
loop 'curl -sw "%{http_code}" http://coolwebsite.biz' \
|
||||||
|
--every 5s --until-contains 200;
|
||||||
|
./announce_to_slack.sh
|
||||||
|
$ ./deploy.sh;
|
||||||
|
loopy --delay 5s --halt now,success=1 \
|
||||||
|
'curl -sw "%{http_code}" http://coolwebsite.biz | match 200';
|
||||||
|
./announce_to_slack.sh
|
||||||
|
|
||||||
|
$ loop "ping -c 1 mysite.com" --until-success; ./do_next_thing
|
||||||
|
$ loopy --halt now,success=1 ping -c 1 mysite.com; ./do_next_thing
|
||||||
|
|
||||||
|
$ ./create_big_file -o my_big_file.bin;
|
||||||
|
loop 'ls' --until-contains 'my_big_file.bin';
|
||||||
|
./upload_big_file my_big_file.bin
|
||||||
|
# inotifywait is a better tool to detect file system changes.
|
||||||
|
# It can even make sure the file is complete
|
||||||
|
# so you are not uploading an incomplete file
|
||||||
|
$ inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f . |
|
||||||
|
grep my_big_file.bin
|
||||||
|
|
||||||
|
$ ls | loop 'cp $ITEM $ITEM.bak'
|
||||||
|
$ ls | parallel cp {} {}.bak
|
||||||
|
|
||||||
|
$ loop './do_thing.sh' --every 15s --until-success --num 5
|
||||||
|
$ parallel --retries 5 --delay 15s ::: ./do_thing.sh
|
||||||
|
|
||||||
|
https://github.com/Miserlou/Loop/ (Last checked: 2018-10)
|
||||||
|
|
||||||
|
|
||||||
|
=head2 DIFFERENCES BETWEEN lorikeet AND GNU Parallel
|
||||||
|
|
||||||
|
B<lorikeet> can run jobs in parallel. It does this based on a
|
||||||
|
dependency graph described in a file, so this is similar to B<make>.
|
||||||
|
|
||||||
|
https://github.com/cetra3/lorikeet (Last checked: 2018-10)
|
||||||
|
|
||||||
|
=head2 DIFFERENCES BETWEEN spp AND GNU Parallel
|
||||||
|
|
||||||
|
B<spp> can run jobs in parallel. B<spp> does not use a command
|
||||||
|
template to generate the jobs, but requires jobs to be in a
|
||||||
|
file. Output from the jobs mix.
|
||||||
|
|
||||||
|
https://github.com/john01dav/spp
|
||||||
|
|
||||||
=head2 Todo
|
=head2 Todo
|
||||||
|
|
||||||
Url for map, spread
|
Url for spread
|
||||||
|
|
||||||
machma. Requires Go >= 1.7.
|
|
||||||
|
|
||||||
|
https://github.com/amritb/with-this.git
|
||||||
|
|
||||||
|
https://github.com/fd0/machma Requires Go >= 1.7.
|
||||||
|
|
||||||
https://github.com/k-bx/par requires Haskell to work. This limits the
|
https://github.com/k-bx/par requires Haskell to work. This limits the
|
||||||
number of platforms this can work on.
|
number of platforms this can work on.
|
||||||
|
@ -1518,6 +1747,8 @@ https://github.com/Julian/Verge
|
||||||
|
|
||||||
https://github.com/amattn/paral
|
https://github.com/amattn/paral
|
||||||
|
|
||||||
|
https://github.com/mmstick/concurr
|
||||||
|
|
||||||
pyargs
|
pyargs
|
||||||
|
|
||||||
|
|
||||||
|
@ -1559,7 +1790,8 @@ This test stresses whether output mixes.
|
||||||
chmod +x mycommand
|
chmod +x mycommand
|
||||||
|
|
||||||
# Run 30 jobs in parallel
|
# Run 30 jobs in parallel
|
||||||
seq 30 | $paralleltool ./mycommand > >(tr -s abcdef) 2> >(tr -s abcdef >&2)
|
seq 30 |
|
||||||
|
$paralleltool ./mycommand > >(tr -s abcdef) 2> >(tr -s abcdef >&2)
|
||||||
|
|
||||||
# 'a c e' and 'b d f' should always stay together
|
# 'a c e' and 'b d f' should always stay together
|
||||||
# and there should only be a single line per job
|
# and there should only be a single line per job
|
||||||
|
@ -1673,6 +1905,18 @@ Some tools can only insert the argument once.
|
||||||
echo bar | $paralleltool echo {} foo {}
|
echo bar | $paralleltool echo {} foo {}
|
||||||
|
|
||||||
|
|
||||||
|
=head2 INPUTSIZE: Length of input should not be limited
|
||||||
|
|
||||||
|
Some tools limit the length of the input lines artificially with no good
|
||||||
|
reason. GNU B<parallel> does not:
|
||||||
|
|
||||||
|
perl -e 'print "foo."."x"x100_000_000' | parallel echo {.}
|
||||||
|
|
||||||
|
GNU B<parallel> limits the command to run to 128 KB due to execve(1):
|
||||||
|
|
||||||
|
perl -e 'print "x"x131_000' | parallel echo {} | wc
|
||||||
|
|
||||||
|
|
||||||
=head2 NUMWORDS: Speed depends on number of words
|
=head2 NUMWORDS: Speed depends on number of words
|
||||||
|
|
||||||
Some tools become very slow if output lines have many words.
|
Some tools become very slow if output lines have many words.
|
||||||
|
@ -1705,10 +1949,10 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
||||||
|
|
||||||
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange,
|
Copyright (C) 2010-2018 Ole Tange, http://ole.tange.dk and Free
|
||||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
Software Foundation, Inc.
|
||||||
|
|
||||||
Parts of the manual concerning B<xargs> compatibility is inspired by
|
Parts of the manual concerning B<xargs> compatibility is inspired by
|
||||||
the manual of B<xargs> from GNU findutils 4.4.2.
|
the manual of B<xargs> from GNU findutils 4.4.2.
|
||||||
|
@ -1716,8 +1960,7 @@ the manual of B<xargs> from GNU findutils 4.4.2.
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
||||||
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018
|
Copyright (C) 2007-2018 Free Software Foundation, Inc.
|
||||||
Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -15,7 +15,7 @@ situations, and to avoid overloading you with information, the most
|
||||||
used features are presented first.
|
used features are presented first.
|
||||||
|
|
||||||
All the examples are tested in Bash, and most will work in other
|
All the examples are tested in Bash, and most will work in other
|
||||||
shells, too, but there are a few exceptions. So you are recommened to
|
shells, too, but there are a few exceptions. So you are recommended to
|
||||||
use Bash while testing out the examples.
|
use Bash while testing out the examples.
|
||||||
|
|
||||||
|
|
||||||
|
@ -209,8 +209,8 @@ If the input is B<mydir/mysubdir/myfile.myext> then:
|
||||||
{#} = the sequence number of the job
|
{#} = the sequence number of the job
|
||||||
{%} = the job slot number
|
{%} = the job slot number
|
||||||
|
|
||||||
When a job is started it gets sequence number that starts at 1 and
|
When a job is started it gets a sequence number that starts at 1 and
|
||||||
increases with 1 for each new job. The job also gets assigned a slot
|
increases by 1 for each new job. The job also gets assigned a slot
|
||||||
number. This number is from 1 to the number of jobs running in
|
number. This number is from 1 to the number of jobs running in
|
||||||
parallel. It is unique between the running jobs, but is re-used as
|
parallel. It is unique between the running jobs, but is re-used as
|
||||||
soon as a job finishes.
|
soon as a job finishes.
|
||||||
|
@ -349,7 +349,7 @@ A shorthand for B<--transfer --return {} --cleanup> is B<--trc {}>.
|
||||||
|
|
||||||
=head1 Advanced usage
|
=head1 Advanced usage
|
||||||
|
|
||||||
parset fifo, cmd substtition, arrayelements, array with var names and cmds, env_parset
|
parset fifo, cmd substitution, arrayelements, array with var names and cmds, env_parset
|
||||||
|
|
||||||
|
|
||||||
env_parallel
|
env_parallel
|
||||||
|
@ -384,7 +384,7 @@ Interfacing with HTML/?
|
||||||
|
|
||||||
seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo
|
seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo
|
||||||
|
|
||||||
seq 10 | PARALLLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@b.com echo
|
seq 10 | PARALLEL_SSH='ssh -i "key.pem"' parallel --sshlogin a@b.com echo
|
||||||
|
|
||||||
seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@b.com echo
|
seq 10 | parallel --ssh 'ssh -i "key.pem"' --sshlogin a@b.com echo
|
||||||
|
|
||||||
|
|
|
@ -213,10 +213,10 @@ error (stderr).
|
||||||
|
|
||||||
GNU B<parallel> pipes output from the command run into the compression
|
GNU B<parallel> pipes output from the command run into the compression
|
||||||
program which saves to a tmpfile. GNU B<parallel> records the pid of
|
program which saves to a tmpfile. GNU B<parallel> records the pid of
|
||||||
the compress program. At the same time a small perl script (called
|
the compress program. At the same time a small Perl script (called
|
||||||
B<cattail> above) is started: It basically does B<cat> followed by
|
B<cattail> above) is started: It basically does B<cat> followed by
|
||||||
B<tail -f>, but it also removes the tmpfile as soon as the first byte
|
B<tail -f>, but it also removes the tmpfile as soon as the first byte
|
||||||
is read, and it continously checks if the pid of the compression
|
is read, and it continuously checks if the pid of the compression
|
||||||
program is dead. If the compress program is dead, B<cattail> reads the
|
program is dead. If the compress program is dead, B<cattail> reads the
|
||||||
rest of tmpfile and exits.
|
rest of tmpfile and exits.
|
||||||
|
|
||||||
|
@ -539,7 +539,7 @@ needs to know how to read the function.
|
||||||
|
|
||||||
From version 20150122 GNU B<parallel> tries both the ()-version and
|
From version 20150122 GNU B<parallel> tries both the ()-version and
|
||||||
the %%-version, and the function definition works on both pre- and
|
the %%-version, and the function definition works on both pre- and
|
||||||
post-shellshock versions of B<bash>.
|
post-shell shock versions of B<bash>.
|
||||||
|
|
||||||
|
|
||||||
=head2 The remote system wrapper
|
=head2 The remote system wrapper
|
||||||
|
@ -1183,7 +1183,7 @@ software, username, password, host, port, database, and table in a
|
||||||
single string.
|
single string.
|
||||||
|
|
||||||
The DBURL must point to a table name. The table will be dropped and
|
The DBURL must point to a table name. The table will be dropped and
|
||||||
created. The reason for not reusing an exising table is that the user
|
created. The reason for not reusing an existing table is that the user
|
||||||
may have added more input sources which would require more columns in
|
may have added more input sources which would require more columns in
|
||||||
the table. By prepending '+' to the DBURL the table will not be
|
the table. By prepending '+' to the DBURL the table will not be
|
||||||
dropped.
|
dropped.
|
||||||
|
@ -1229,9 +1229,11 @@ cost work and which have not been tested are, however, unlikely to be
|
||||||
prioritized.
|
prioritized.
|
||||||
|
|
||||||
Running B<parallel --citation> one single time takes less than 10
|
Running B<parallel --citation> one single time takes less than 10
|
||||||
seconds, and will silence the citation notice for future runs. If that
|
seconds, and will silence the citation notice for future runs. This is
|
||||||
is too much trouble for you, why not use one of the alternatives
|
comparable to graphical tools where you have to click a checkbox
|
||||||
instead? See a list in: B<man parallel_alternatives>.
|
saying "Do not show this again". But if that is too much trouble for
|
||||||
|
you, why not use one of the alternatives instead? See a list in:
|
||||||
|
B<man parallel_alternatives>.
|
||||||
|
|
||||||
|
|
||||||
=head1 Ideas for new design
|
=head1 Ideas for new design
|
||||||
|
@ -1239,7 +1241,7 @@ instead? See a list in: B<man parallel_alternatives>.
|
||||||
=head2 Multiple processes working together
|
=head2 Multiple processes working together
|
||||||
|
|
||||||
Open3 is slow. Printing is slow. It would be good if they did not tie
|
Open3 is slow. Printing is slow. It would be good if they did not tie
|
||||||
up ressources, but were run in separate threads.
|
up resources, but were run in separate threads.
|
||||||
|
|
||||||
|
|
||||||
=head2 --rrs on remote using a perl wrapper
|
=head2 --rrs on remote using a perl wrapper
|
||||||
|
|
|
@ -2906,7 +2906,7 @@ Output:
|
||||||
=head2 Timeout
|
=head2 Timeout
|
||||||
|
|
||||||
With B<--semaphoretimeout> you can force running the command anyway after
|
With B<--semaphoretimeout> you can force running the command anyway after
|
||||||
a period (postive number) or give up (negative number):
|
a period (positive number) or give up (negative number):
|
||||||
|
|
||||||
sem --id foo -u 'echo Slow started; sleep 5; echo Slow ended' &&
|
sem --id foo -u 'echo Slow started; sleep 5; echo Slow ended' &&
|
||||||
sem --id foo --semaphoretimeout 1 'echo Forced running after 1 sec' &&
|
sem --id foo --semaphoretimeout 1 'echo Forced running after 1 sec' &&
|
||||||
|
@ -2978,7 +2978,7 @@ When asking for help, always report the full output of this:
|
||||||
Output:
|
Output:
|
||||||
|
|
||||||
GNU parallel 20180122
|
GNU parallel 20180122
|
||||||
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018
|
Copyright (C) 2007-2018
|
||||||
Ole Tange and Free Software Foundation, Inc.
|
Ole Tange and Free Software Foundation, Inc.
|
||||||
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||||
This is free software: you are free to change and redistribute it.
|
This is free software: you are free to change and redistribute it.
|
||||||
|
@ -3139,7 +3139,7 @@ https://my.fsf.org/donate/
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
(C) 2013,2014,2015,2016,2017,2018 Ole Tange, GPLv3
|
(C) 2013-2018 Ole Tange, GPLv3
|
||||||
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
|
@ -28,7 +28,9 @@ If I<variablename> is a single variable name, this will be treated as
|
||||||
the destination variable and made into an array.
|
the destination variable and made into an array.
|
||||||
|
|
||||||
If I<variablename> contains multiple names separated by ',' or space,
|
If I<variablename> contains multiple names separated by ',' or space,
|
||||||
the names will be the destination variables.
|
the names will be the destination variables. The number of names must
|
||||||
|
be at least the number of jobs - otherwise some tmp files will not be
|
||||||
|
cleaned up.
|
||||||
|
|
||||||
|
|
||||||
=head1 OPTIONS
|
=head1 OPTIONS
|
||||||
|
@ -39,7 +41,7 @@ variable.
|
||||||
|
|
||||||
=head1 SUPPORTED SHELLS
|
=head1 SUPPORTED SHELLS
|
||||||
|
|
||||||
=head2 Bash/Zsh/Ksh/(Mksh alpha testing)
|
=head2 Bash/Zsh/Ksh/Mksh
|
||||||
|
|
||||||
=head3 Examples
|
=head3 Examples
|
||||||
|
|
||||||
|
@ -178,16 +180,15 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
||||||
|
|
||||||
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2007-10-18 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2008,2009,2010 Ole Tange, http://ole.tange.dk
|
Copyright (C) 2008-2010 Ole Tange, http://ole.tange.dk
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange,
|
Copyright (C) 2010-2018 Ole Tange,
|
||||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
http://ole.tange.dk and Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
||||||
Copyright (C) 2016
|
Copyright (C) 2016 Ole Tange and Free Software Foundation, Inc.
|
||||||
Ole Tange and Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -244,7 +244,7 @@ Report bugs to <bug-parallel@gnu.org>.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 Ole Tange,
|
Copyright (C) 2010-2018 Ole Tange,
|
||||||
http://ole.tange.dk and Free Software Foundation, Inc.
|
http://ole.tange.dk and Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
|
||||||
|
|
4
src/sql
4
src/sql
|
@ -576,7 +576,11 @@ $Global::Initfile && unlink $Global::Initfile;
|
||||||
exit ($err);
|
exit ($err);
|
||||||
|
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
|
<<<<<<< HEAD
|
||||||
$Global::version = 20180723;
|
$Global::version = 20180723;
|
||||||
|
=======
|
||||||
|
$Global::version = 20181124;
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
$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
|
||||||
|
|
|
@ -7,7 +7,7 @@ testsuite: 3
|
||||||
make stopvm
|
make stopvm
|
||||||
|
|
||||||
1: ../src/parallel tests-to-run/* wanted-results/* prereqlocal startdb prereqremote
|
1: ../src/parallel tests-to-run/* wanted-results/* prereqlocal startdb prereqremote
|
||||||
TRIES=1 time bash Start.sh '' 'mem|polarhome|tutorial' || true
|
TRIES=1 time bash Start.sh '' '100s|mem|polarhome|tutorial' || true
|
||||||
touch ~/.parallel/will-cite
|
touch ~/.parallel/will-cite
|
||||||
make stopvm
|
make stopvm
|
||||||
|
|
||||||
|
|
|
@ -100,8 +100,9 @@ parallel -j3 --timeout 3 --retries 10 --tag ssh_a_to_b ::: $shellsplus :::
|
||||||
# Remove env_parallel from .profile
|
# Remove env_parallel from .profile
|
||||||
ssh nopathbash@lo 'perl -i.bak -pe s/.*env_parallel.*// .profile .bashrc'
|
ssh nopathbash@lo 'perl -i.bak -pe s/.*env_parallel.*// .profile .bashrc'
|
||||||
ssh nopathcsh@lo 'echo >> .cshrc setenv PATH /bin:/usr/bin'
|
ssh nopathcsh@lo 'echo >> .cshrc setenv PATH /bin:/usr/bin'
|
||||||
ssh nopathbash@lo 'echo $PATH'
|
ssh nopathbash@lo 'echo $PATH; echo 1 | parallel echo' || echo Should FAIL
|
||||||
ssh nopathcsh@lo 'echo $PATH'
|
ssh nopathcsh@lo 'echo $PATH; echo 1 | parallel echo' || echo Should FAIL
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
ssh-copy-id localhost
|
ssh-copy-id localhost
|
||||||
|
@ -132,3 +133,9 @@ echo
|
||||||
echo Add to /etc/ssh/sshd_config
|
echo Add to /etc/ssh/sshd_config
|
||||||
echo Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc
|
echo Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc
|
||||||
echo KexAlgorithms diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,curve25519-sha256@libssh.org,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
|
echo KexAlgorithms diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,curve25519-sha256@libssh.org,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
|
||||||
|
echo
|
||||||
|
echo If you get:
|
||||||
|
echo Unable to negotiate with server port 22: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se
|
||||||
|
echo add this to .ssh/config
|
||||||
|
echo Ciphers +aes256-cbc
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ freepl >/dev/null &
|
||||||
|
|
||||||
# niceload -q -l 5 perl -e '$a=join"",<>; while(1){push @a,$a}' &
|
# niceload -q -l 5 perl -e '$a=join"",<>; while(1){push @a,$a}' &
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### --rm and --runmem'
|
echo '### --rm and --runmem'
|
||||||
niceload -H --rm 1g free -g | perl -ane '/Mem:/ and print $F[5],"\n"' | grep '[1-9]' >/dev/null && echo OK--rm
|
niceload -H --rm 1g free -g | perl -ane '/Mem:/ and print $F[5],"\n"' | grep '[1-9]' >/dev/null && echo OK--rm
|
||||||
niceload -H --runmem 1g free -g | perl -ane '/Mem:/ and print $F[5],"\n"' | grep '[1-9]' >/dev/null && echo OK--runmem
|
niceload -H --runmem 1g free -g | perl -ane '/Mem:/ and print $F[5],"\n"' | grep '[1-9]' >/dev/null && echo OK--runmem
|
||||||
|
|
|
@ -10,7 +10,7 @@ int() {
|
||||||
}
|
}
|
||||||
export -f int
|
export -f int
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
# The seq 30000000 should take > 1 cpu sec to run.
|
# The seq 30000000 should take > 1 cpu sec to run.
|
||||||
echo '### --soft -f and test if child is actually suspended and thus takes longer'
|
echo '### --soft -f and test if child is actually suspended and thus takes longer'
|
||||||
niceload --soft -f 0.5 'seq 30000000 | nice wc;echo This should finish last' &
|
niceload --soft -f 0.5 'seq 30000000 | nice wc;echo This should finish last' &
|
||||||
|
|
|
@ -9,6 +9,9 @@ ping -c 1 freebsd7.tange.dk >/dev/null 2>&1
|
||||||
ssh freebsd7.tange.dk touch .parallel/will-cite
|
ssh freebsd7.tange.dk touch .parallel/will-cite
|
||||||
scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} freebsd7.tange.dk:bin/
|
scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} freebsd7.tange.dk:bin/
|
||||||
|
|
||||||
|
. `which env_parallel.bash`
|
||||||
|
env_parallel --session
|
||||||
|
|
||||||
par_no_more_procs() {
|
par_no_more_procs() {
|
||||||
echo 'bug #40136: FreeBSD: No more processes'
|
echo 'bug #40136: FreeBSD: No more processes'
|
||||||
sem --jobs 3 --id my_id -u 'echo First started; sleep 10; echo The first finished;echo' &&
|
sem --jobs 3 --id my_id -u 'echo First started; sleep 10; echo The first finished;echo' &&
|
||||||
|
@ -59,24 +62,24 @@ par_shebang() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_shellshock_bug() {
|
par_shellshock_bug() {
|
||||||
bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env _;
|
bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env name;
|
||||||
echo Non-shellshock-hardened to non-shellshock-hardened;
|
echo Non-shellshock-hardened to non-shellshock-hardened;
|
||||||
funky() { echo Function $1; };
|
funky() { echo Function $1; };
|
||||||
export -f funky;
|
export -f funky;
|
||||||
PARALLEL_SHELL=bash parallel --env funky -S localhost funky ::: non-shellshock-hardened'
|
PARALLEL_SHELL=bash parallel --env funky -S localhost funky ::: non-shellshock-hardened'
|
||||||
|
|
||||||
bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env _;
|
bash -c 'echo bug \#43358: shellshock breaks exporting functions using --env name;
|
||||||
echo Non-shellshock-hardened to shellshock-hardened;
|
echo Non-shellshock-hardened to shellshock-hardened;
|
||||||
funky() { echo Function $1; };
|
funky() { echo Function $1; };
|
||||||
export -f funky;
|
export -f funky;
|
||||||
parallel --env funky -S parallel@192.168.1.72 funky ::: shellshock-hardened'
|
PARALLEL_SHELL=bash parallel --env funky -S parallel@192.168.1.72 funky ::: shellshock-hardened'
|
||||||
}
|
}
|
||||||
|
|
||||||
par_load() {
|
par_load() {
|
||||||
echo '### Test --load (must give 1=true)'
|
echo '### Test --load (must give 1=true)'
|
||||||
parallel -j0 -N0 --timeout 5 --nice 10 'bzip2 < /dev/zero >/dev/null' ::: 1 2 3 4 5 6 &
|
parallel -j0 -N0 --timeout 5 --nice 10 'bzip2 < /dev/zero >/dev/null' ::: 1 2 3 4 5 6 &
|
||||||
parallel --argsep ,, --joblog - -N0 parallel --load 100% echo ::: 1 ,, 1 |
|
parallel --argsep ,, --joblog - -N0 parallel --load 100% echo ::: 1 ,, 1 |
|
||||||
parallel --colsep '\t' --header : echo '{=4 $_=$_>5=}'
|
parallel -k --colsep '\t' --header : echo '{=4 $_=$_>5=}'
|
||||||
}
|
}
|
||||||
|
|
||||||
par_env_parallel() {
|
par_env_parallel() {
|
||||||
|
@ -104,7 +107,7 @@ unset TMPDIR
|
||||||
# we get 'shopt'-errors and 'declare'-errors.
|
# we get 'shopt'-errors and 'declare'-errors.
|
||||||
# We can safely ignore those.
|
# We can safely ignore those.
|
||||||
|
|
||||||
env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \
|
PARALLEL_SHELL=sh env_parallel --env _ -vj9 -k --joblog /tmp/jl-`basename $0` --retries 3 \
|
||||||
-S freebsd7.tange.dk --tag '{} 2>&1' \
|
-S freebsd7.tange.dk --tag '{} 2>&1' \
|
||||||
::: $(compgen -A function | grep par_ | sort) \
|
::: $(compgen -A function | grep par_ | sort) \
|
||||||
2> >(grep -Ev 'shopt: not found|declare: not found')
|
2> >(grep -Ev 'shopt: not found|declare: not found')
|
||||||
|
|
|
@ -20,14 +20,14 @@ export SMALLDISK
|
||||||
find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | parallel rm
|
find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | parallel rm
|
||||||
|
|
||||||
stdsort() {
|
stdsort() {
|
||||||
"$@" 2>&1 | sort;
|
"$@" 2>&1 | LC_ALL=C sort;
|
||||||
}
|
}
|
||||||
export -f stdsort
|
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}
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj13 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj13 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)';
|
echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)';
|
||||||
seq 10 | parallel --halt now,fail=1 true;
|
seq 10 | parallel --halt now,fail=1 true;
|
||||||
echo $?
|
echo $?
|
||||||
|
@ -602,13 +602,13 @@ par_retries_replacement_string() {
|
||||||
|
|
||||||
par_tee() {
|
par_tee() {
|
||||||
export PARALLEL='-k --tee --pipe --tag'
|
export PARALLEL='-k --tee --pipe --tag'
|
||||||
seq 1000000 | parallel 'echo {%};LANG=C wc' ::: {1..5} ::: {a..b}
|
seq 1000000 | parallel 'echo {%};LC_ALL=C wc' ::: {1..5} ::: {a..b}
|
||||||
seq 300000 | parallel 'grep {1} | LANG=C wc {2}' ::: {1..5} ::: -l -c
|
seq 300000 | parallel 'grep {1} | LC_ALL=C wc {2}' ::: {1..5} ::: -l -c
|
||||||
}
|
}
|
||||||
|
|
||||||
par_tagstring_pipe() {
|
par_tagstring_pipe() {
|
||||||
echo 'bug #50228: --pipe --tagstring broken'
|
echo 'bug #50228: --pipe --tagstring broken'
|
||||||
seq 3000 | parallel -j4 --pipe -N1000 -k --tagstring {%} LANG=C wc
|
seq 3000 | parallel -j4 --pipe -N1000 -k --tagstring {%} LC_ALL=C wc
|
||||||
}
|
}
|
||||||
|
|
||||||
par_link_files_as_only_arg() {
|
par_link_files_as_only_arg() {
|
||||||
|
@ -706,12 +706,12 @@ par_halt_one_job() {
|
||||||
|
|
||||||
par_blocking_redir() {
|
par_blocking_redir() {
|
||||||
(
|
(
|
||||||
echo 'bug #52740: Bash redirection with process substitution blocks'
|
echo 'bug #52740: Bash redirection with process substitution blocks'
|
||||||
echo Test stdout
|
echo Test stdout
|
||||||
echo 3 | parallel seq > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2)
|
echo 3 | parallel seq > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2)
|
||||||
echo Test stderr
|
echo Test stderr
|
||||||
echo nOfilE | parallel ls > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2)
|
echo nOfilE | parallel ls > >(echo stdout;wc) 2> >(echo stderr >&2; wc >&2)
|
||||||
) 2>&1 | sort
|
) 2>&1 | LC_ALL=C sort
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipepart_recend_recstart() {
|
par_pipepart_recend_recstart() {
|
||||||
|
@ -837,6 +837,34 @@ par_perlexpr_with_newline() {
|
||||||
rm *"Dad's \"famous\" 1' pizza"
|
rm *"Dad's \"famous\" 1' pizza"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_empty_command() {
|
||||||
|
echo 'bug #54647: parset ignores empty lines'
|
||||||
|
# really due to this. Should give an empty line due to -v:
|
||||||
|
parallel -v :::: <(echo)
|
||||||
|
. `which env_parallel.bash`
|
||||||
|
parset a,b,c :::: <(echo echo A; echo; echo echo C)
|
||||||
|
echo Empty: $b
|
||||||
|
parset a,b,c :::: <(echo echo A; echo echo B; echo echo C)
|
||||||
|
echo B: $b
|
||||||
|
}
|
||||||
|
|
||||||
|
par_empty_input_on_stdin() {
|
||||||
|
echo 'https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=910470'
|
||||||
|
echo 'This should give no output'
|
||||||
|
true | stdout parallel --shuf echo
|
||||||
|
}
|
||||||
|
|
||||||
|
par_tee_too_many_args() {
|
||||||
|
echo '### Fail if there are more arguments than --jobs'
|
||||||
|
seq 11 |parallel -k --tag --pipe -j4 --tee grep {} ::: {1..4}
|
||||||
|
seq 11 |parallel -k --tag --pipe -j4 --tee grep {} ::: {1..5}
|
||||||
|
}
|
||||||
|
|
||||||
|
par_space_envvar() {
|
||||||
|
echo "### bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'"
|
||||||
|
export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK'
|
||||||
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'
|
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'
|
||||||
|
|
|
@ -24,6 +24,7 @@ par_exit_code() {
|
||||||
OK="ash bash csh dash fish mksh posh rc sash sh static-sh tcsh"
|
OK="ash bash csh dash fish mksh posh rc sash sh static-sh tcsh"
|
||||||
BAD="fdsh fizsh ksh ksh93 yash zsh"
|
BAD="fdsh fizsh ksh ksh93 yash zsh"
|
||||||
s=100
|
s=100
|
||||||
|
rm -f /tmp/mysleep
|
||||||
cp /bin/sleep /tmp/mysleep
|
cp /bin/sleep /tmp/mysleep
|
||||||
|
|
||||||
echo '# Ideally the command should return the same'
|
echo '# Ideally the command should return the same'
|
||||||
|
@ -34,12 +35,12 @@ par_exit_code() {
|
||||||
'/tmp/mysleep '$s \
|
'/tmp/mysleep '$s \
|
||||||
'parallel --halt-on-error now,fail=1 /tmp/mysleep ::: '$s \
|
'parallel --halt-on-error now,fail=1 /tmp/mysleep ::: '$s \
|
||||||
'parallel --halt-on-error now,done=1 /tmp/mysleep ::: '$s \
|
'parallel --halt-on-error now,done=1 /tmp/mysleep ::: '$s \
|
||||||
'parallel --halt-on-error now,done=1 true ::: '$s \
|
'parallel --halt-on-error now,done=1 /bin/true ::: '$s \
|
||||||
'parallel --halt-on-error now,done=1 exit ::: '$s \
|
'parallel --halt-on-error now,done=1 exit ::: '$s \
|
||||||
'true;/tmp/mysleep '$s \
|
'true;/tmp/mysleep '$s \
|
||||||
'parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: '$s \
|
'parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: '$s \
|
||||||
'parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: '$s \
|
'parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: '$s \
|
||||||
'parallel --halt-on-error now,done=1 "true;true" ::: '$s \
|
'parallel --halt-on-error now,done=1 "true;/bin/true" ::: '$s \
|
||||||
'parallel --halt-on-error now,done=1 "true;exit" ::: '$s
|
'parallel --halt-on-error now,done=1 "true;exit" ::: '$s
|
||||||
}
|
}
|
||||||
export -f runit
|
export -f runit
|
||||||
|
|
|
@ -4,6 +4,28 @@
|
||||||
# Each should be taking 10-30s and be possible to run in parallel
|
# Each should be taking 10-30s and be possible to run in parallel
|
||||||
# I.e.: No race conditions, no logins
|
# I.e.: No race conditions, no logins
|
||||||
|
|
||||||
|
par_sem_2jobs() {
|
||||||
|
echo '### Test semaphore 2 jobs running simultaneously'
|
||||||
|
parallel --semaphore --id 2jobs -u -j2 'echo job1a 1; sleep 4; echo job1b 3'
|
||||||
|
sleep 0.5
|
||||||
|
parallel --semaphore --id 2jobs -u -j2 'echo job2a 2; sleep 4; echo job2b 5'
|
||||||
|
sleep 0.5
|
||||||
|
parallel --semaphore --id 2jobs -u -j2 'echo job3a 4; sleep 4; echo job3b 6'
|
||||||
|
parallel --semaphore --id 2jobs --wait
|
||||||
|
echo done
|
||||||
|
}
|
||||||
|
|
||||||
|
par_semaphore() {
|
||||||
|
echo '### Test if parallel invoked as sem will run parallel --semaphore'
|
||||||
|
sem --id as_sem -u -j2 'echo job1a 1; sleep 3; echo job1b 3'
|
||||||
|
sleep 0.5
|
||||||
|
sem --id as_sem -u -j2 'echo job2a 2; sleep 3; echo job2b 5'
|
||||||
|
sleep 0.5
|
||||||
|
sem --id as_sem -u -j2 'echo job3a 4; sleep 3; echo job3b 6'
|
||||||
|
sem --id as_sem --wait
|
||||||
|
echo done
|
||||||
|
}
|
||||||
|
|
||||||
par_line_buffer() {
|
par_line_buffer() {
|
||||||
echo "### --line-buffer"
|
echo "### --line-buffer"
|
||||||
tmp1=$(tempfile)
|
tmp1=$(tempfile)
|
||||||
|
@ -58,7 +80,7 @@ par__pipe_tee() {
|
||||||
< /dev/zero openssl enc -aes-128-ctr -K 1234 -iv 1234 2>/dev/null |
|
< /dev/zero openssl enc -aes-128-ctr -K 1234 -iv 1234 2>/dev/null |
|
||||||
head -c 1G;
|
head -c 1G;
|
||||||
}
|
}
|
||||||
random1G | parallel --pipe --tee cat ::: {1..3} | LANG=C wc -c
|
random1G | parallel --pipe --tee cat ::: {1..3} | LC_ALL=C wc -c
|
||||||
}
|
}
|
||||||
|
|
||||||
par__pipepart_tee() {
|
par__pipepart_tee() {
|
||||||
|
@ -71,7 +93,7 @@ par__pipepart_tee() {
|
||||||
}
|
}
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
random1G >$tmp
|
random1G >$tmp
|
||||||
parallel --pipepart --tee -a $tmp cat ::: {1..3} | LANG=C wc -c
|
parallel --pipepart --tee -a $tmp cat ::: {1..3} | LC_ALL=C wc -c
|
||||||
rm $tmp
|
rm $tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +148,7 @@ _EOF
|
||||||
echo
|
echo
|
||||||
) | perl -ne 's/\r//g;/\S/ and print' |
|
) | perl -ne 's/\r//g;/\S/ and print' |
|
||||||
# Race will cause the order to change
|
# Race will cause the order to change
|
||||||
sort
|
LC_ALL=C sort
|
||||||
}
|
}
|
||||||
|
|
||||||
par_k() {
|
par_k() {
|
||||||
|
@ -148,7 +170,7 @@ par_k_linebuffer() {
|
||||||
par_maxlinelen_m_I() {
|
par_maxlinelen_m_I() {
|
||||||
echo "### Test max line length -m -I"
|
echo "### Test max line length -m -I"
|
||||||
|
|
||||||
seq 1 60000 | parallel -I :: -km -j1 echo a::b::c | sort >/tmp/114-a$$;
|
seq 1 60000 | parallel -I :: -km -j1 echo a::b::c | LC_ALL=C sort >/tmp/114-a$$;
|
||||||
md5sum </tmp/114-a$$;
|
md5sum </tmp/114-a$$;
|
||||||
export CHAR=$(cat /tmp/114-a$$ | wc -c);
|
export CHAR=$(cat /tmp/114-a$$ | wc -c);
|
||||||
export LINES=$(cat /tmp/114-a$$ | wc -l);
|
export LINES=$(cat /tmp/114-a$$ | wc -l);
|
||||||
|
@ -159,7 +181,7 @@ par_maxlinelen_m_I() {
|
||||||
par_maxlinelen_X_I() {
|
par_maxlinelen_X_I() {
|
||||||
echo "### Test max line length -X -I"
|
echo "### Test max line length -X -I"
|
||||||
|
|
||||||
seq 1 60000 | parallel -I :: -kX -j1 echo a::b::c | sort >/tmp/114-b$$;
|
seq 1 60000 | parallel -I :: -kX -j1 echo a::b::c | LC_ALL=C sort >/tmp/114-b$$;
|
||||||
md5sum </tmp/114-b$$;
|
md5sum </tmp/114-b$$;
|
||||||
export CHAR=$(cat /tmp/114-b$$ | wc -c);
|
export CHAR=$(cat /tmp/114-b$$ | wc -c);
|
||||||
export LINES=$(cat /tmp/114-b$$ | wc -l);
|
export LINES=$(cat /tmp/114-b$$ | wc -l);
|
||||||
|
@ -191,8 +213,11 @@ par_results_csv() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_results_compress() {
|
par_results_compress() {
|
||||||
parallel --results /tmp/ged --compress echo ::: 1 | wc -l
|
tmp=$(mktemp)
|
||||||
parallel --results /tmp/ged echo ::: 1 | wc -l
|
rm "$tmp"
|
||||||
|
parallel --results $tmp --compress echo ::: 1 | wc -l
|
||||||
|
parallel --results $tmp echo ::: 1 | wc -l
|
||||||
|
rm -r "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_kill_children_timeout() {
|
par_kill_children_timeout() {
|
||||||
|
@ -298,15 +323,6 @@ par_plus_dyn_repl() {
|
||||||
parallel --plus echo '{-2,,A}' ::: "wrong" ::: "$myvar" ::: "wrong"
|
parallel --plus echo '{-2,,A}' ::: "wrong" ::: "$myvar" ::: "wrong"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_linebuffer_tag_slow_output() {
|
|
||||||
echo "Test output tag with mixing halflines"
|
|
||||||
halfline() {
|
|
||||||
perl -e '$| = 1; map { print $ARGV[0]; sleep(2); print "$_\n" } split //, "Half\n"' $1
|
|
||||||
}
|
|
||||||
export -f halfline
|
|
||||||
parallel --delay 1 -j0 --tag --line-buffer halfline ::: a b
|
|
||||||
}
|
|
||||||
|
|
||||||
par_retries_all_fail() {
|
par_retries_all_fail() {
|
||||||
echo "bug #53748: -k --retries 10 + out of filehandles = blocking"
|
echo "bug #53748: -k --retries 10 + out of filehandles = blocking"
|
||||||
ulimit -n 30
|
ulimit -n 30
|
||||||
|
@ -338,7 +354,6 @@ par_long_line_remote() {
|
||||||
parallel -j1 -S lo -N 10000 echo {} |wc
|
parallel -j1 -S lo -N 10000 echo {} |wc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1'
|
parallel --joblog /tmp/jl-`basename $0` -j10 --tag -k '{} 2>&1'
|
||||||
|
|
|
@ -62,66 +62,66 @@ par_result() {
|
||||||
echo "### Test --results"
|
echo "### Test --results"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
parallel -k --results /tmp/parallel_results_test/testA echo {1} {2} ::: I II ::: III IIII
|
parallel -k --results /tmp/parallel_results_test/testA echo {1} {2} ::: I II ::: III IIII
|
||||||
ls /tmp/parallel_results_test/testA/*/*/*/*/*
|
ls /tmp/parallel_results_test/testA/*/*/*/*/* | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testA*
|
rm -rf /tmp/parallel_results_test/testA*
|
||||||
|
|
||||||
echo "### Test --res"
|
echo "### Test --res"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
parallel -k --res /tmp/parallel_results_test/testD echo {1} {2} ::: I II ::: III IIII
|
parallel -k --res /tmp/parallel_results_test/testD echo {1} {2} ::: I II ::: III IIII
|
||||||
ls /tmp/parallel_results_test/testD/*/*/*/*/*
|
ls /tmp/parallel_results_test/testD/*/*/*/*/* | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testD*
|
rm -rf /tmp/parallel_results_test/testD*
|
||||||
|
|
||||||
echo "### Test --result"
|
echo "### Test --result"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
parallel -k --result /tmp/parallel_results_test/testE echo {1} {2} ::: I II ::: III IIII
|
parallel -k --result /tmp/parallel_results_test/testE echo {1} {2} ::: I II ::: III IIII
|
||||||
ls /tmp/parallel_results_test/testE/*/*/*/*/*
|
ls /tmp/parallel_results_test/testE/*/*/*/*/* | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testE*
|
rm -rf /tmp/parallel_results_test/testE*
|
||||||
|
|
||||||
echo "### Test --results --header :"
|
echo "### Test --results --header :"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
parallel -k --header : --results /tmp/parallel_results_test/testB echo {1} {2} ::: a I II ::: b III IIII
|
parallel -k --header : --results /tmp/parallel_results_test/testB echo {1} {2} ::: a I II ::: b III IIII
|
||||||
ls /tmp/parallel_results_test/testB/*/*/*/*/*
|
ls /tmp/parallel_results_test/testB/*/*/*/*/* | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testB*
|
rm -rf /tmp/parallel_results_test/testB*
|
||||||
|
|
||||||
echo "### Test --results --header : named - a/b swapped"
|
echo "### Test --results --header : named - a/b swapped"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: b III IIII ::: a I II
|
parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: b III IIII ::: a I II
|
||||||
ls /tmp/parallel_results_test/testC/*/*/*/*/*
|
ls /tmp/parallel_results_test/testC/*/*/*/*/* | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testC*
|
rm -rf /tmp/parallel_results_test/testC*
|
||||||
|
|
||||||
echo "### Test --results --header : piped"
|
echo "### Test --results --header : piped"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
(echo Col; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testF true
|
(echo Col; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testF true
|
||||||
find /tmp/parallel_results_test/testF/*/*/* | sort
|
find /tmp/parallel_results_test/testF/*/*/* | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testF*
|
rm -rf /tmp/parallel_results_test/testF*
|
||||||
|
|
||||||
echo "### Test --results --header : piped - non-existing column header"
|
echo "### Test --results --header : piped - non-existing column header"
|
||||||
mkdir -p /tmp/parallel_results_test
|
mkdir -p /tmp/parallel_results_test
|
||||||
(printf "Col1\t\n"; printf "v1\tv2\tv3\n"; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') |
|
(printf "Col1\t\n"; printf "v1\tv2\tv3\n"; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') |
|
||||||
parallel --header : --result /tmp/parallel_results_test/testG true
|
parallel --header : --result /tmp/parallel_results_test/testG true
|
||||||
find /tmp/parallel_results_test/testG/ | sort
|
find /tmp/parallel_results_test/testG/ | LC_ALL=C sort
|
||||||
rm -rf /tmp/parallel_results_test/testG*
|
rm -rf /tmp/parallel_results_test/testG*
|
||||||
}
|
}
|
||||||
|
|
||||||
par_result_replace() {
|
par_result_replace() {
|
||||||
echo '### bug #49983: --results with {1}'
|
echo '### bug #49983: --results with {1}'
|
||||||
parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz
|
parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz
|
||||||
find /tmp/par_*_49983 | sort
|
find /tmp/par_*_49983 | LC_ALL=C sort
|
||||||
rm -rf /tmp/par_*_49983
|
rm -rf /tmp/par_*_49983
|
||||||
parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz ::: A B C
|
parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz ::: A B C
|
||||||
find /tmp/par_*_49983 | sort
|
find /tmp/par_*_49983 | LC_ALL=C sort
|
||||||
rm -rf /tmp/par_*_49983
|
rm -rf /tmp/par_*_49983
|
||||||
parallel --results /tmp/par_{1}-{2}_49983 -k echo ::: foo bar baz ::: A B C
|
parallel --results /tmp/par_{1}-{2}_49983 -k echo ::: foo bar baz ::: A B C
|
||||||
find /tmp/par_*_49983 | sort
|
find /tmp/par_*_49983 | LC_ALL=C sort
|
||||||
rm -rf /tmp/par_*_49983
|
rm -rf /tmp/par_*_49983
|
||||||
parallel --results /tmp/par__49983 -k echo ::: foo bar baz ::: A B C
|
parallel --results /tmp/par__49983 -k echo ::: foo bar baz ::: A B C
|
||||||
find /tmp/par_*_49983 | sort
|
find /tmp/par_*_49983 | LC_ALL=C sort
|
||||||
rm -rf /tmp/par_*_49983
|
rm -rf /tmp/par_*_49983
|
||||||
parallel --results /tmp/par__49983 --header : -k echo ::: foo bar baz ::: A B C
|
parallel --results /tmp/par__49983 --header : -k echo ::: foo bar baz ::: A B C
|
||||||
find /tmp/par_*_49983 | sort
|
find /tmp/par_*_49983 | LC_ALL=C sort
|
||||||
rm -rf /tmp/par_*_49983
|
rm -rf /tmp/par_*_49983
|
||||||
parallel --results /tmp/par__49983-{}/ --header : -k echo ::: foo bar baz ::: A B C
|
parallel --results /tmp/par__49983-{}/ --header : -k echo ::: foo bar baz ::: A B C
|
||||||
find /tmp/par_*_49983-* | sort
|
find /tmp/par_*_49983-* | LC_ALL=C sort
|
||||||
rm -rf /tmp/par_*_49983-*
|
rm -rf /tmp/par_*_49983-*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,11 @@ par_pipe_compress_blocks() {
|
||||||
seq 3 | parallel -k -j2 --compress -N1 -L1 --pipe cat
|
seq 3 | parallel -k -j2 --compress -N1 -L1 --pipe cat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_too_long_line_X() {
|
||||||
|
echo 'bug #54869: Long lines break'
|
||||||
|
seq 3000 | parallel -Xj1 'echo {} {} {} {} {} {} {} {} {} {} {} {} {} {} | wc'
|
||||||
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'
|
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'
|
||||||
|
|
|
@ -10,7 +10,7 @@ par_sigterm() {
|
||||||
A=$!
|
A=$!
|
||||||
sleep 29; kill -TERM $A
|
sleep 29; kill -TERM $A
|
||||||
wait
|
wait
|
||||||
sort /tmp/parallel$$
|
LC_ALL=C sort /tmp/parallel$$
|
||||||
rm /tmp/parallel$$
|
rm /tmp/parallel$$
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ par_test_detected_shell() {
|
||||||
tmp="/tmp/test_unknown_shell_$shell"
|
tmp="/tmp/test_unknown_shell_$shell"
|
||||||
cp $(which "$shell") "$tmp"
|
cp $(which "$shell") "$tmp"
|
||||||
chmod +x "$tmp"
|
chmod +x "$tmp"
|
||||||
$tmp -c 'ppar -Dinit echo ::: 1; true' |
|
$tmp -c 'parallel -Dinit echo ::: 1; true' |
|
||||||
grep Global::shell
|
grep Global::shell
|
||||||
rm "$tmp"
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,28 +186,6 @@ newlines"' ::: a b c d e | sort
|
||||||
) | perl -pe 's/\0/<null>/g;s/\d+/./g'
|
) | perl -pe 's/\0/<null>/g;s/\d+/./g'
|
||||||
}
|
}
|
||||||
|
|
||||||
par_parcat_mixing() {
|
|
||||||
echo 'parcat output should mix: a b a b'
|
|
||||||
mktmpfifo() {
|
|
||||||
tmp=$(tempfile)
|
|
||||||
rm $tmp
|
|
||||||
mkfifo $tmp
|
|
||||||
echo $tmp
|
|
||||||
}
|
|
||||||
slow_output() {
|
|
||||||
string=$1
|
|
||||||
perl -e 'print "'$string'"x9000,"start\n"'
|
|
||||||
sleep 4
|
|
||||||
perl -e 'print "'$string'"x9000,"end\n"'
|
|
||||||
}
|
|
||||||
tmp1=$(mktmpfifo)
|
|
||||||
tmp2=$(mktmpfifo)
|
|
||||||
slow_output a > $tmp1 &
|
|
||||||
sleep 2
|
|
||||||
slow_output b > $tmp2 &
|
|
||||||
parcat $tmp1 $tmp2 | tr -s ab
|
|
||||||
}
|
|
||||||
|
|
||||||
par_delay_human_readable() {
|
par_delay_human_readable() {
|
||||||
# Test that you can use d h m s in --delay
|
# Test that you can use d h m s in --delay
|
||||||
parallel --delay 0.1s echo ::: a b c
|
parallel --delay 0.1s echo ::: a b c
|
||||||
|
@ -269,4 +247,4 @@ par_nice() {
|
||||||
|
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1'
|
compgen -A function | grep par_ | LC_ALL=C sort | parallel -j6 --tag -k '{} 2>&1'
|
||||||
|
|
|
@ -20,7 +20,7 @@ export -f perl5.14parallel
|
||||||
|
|
||||||
par_2gb_records_N() {
|
par_2gb_records_N() {
|
||||||
echo '### bug #44358: 2 GB records cause problems for -N'
|
echo '### bug #44358: 2 GB records cause problems for -N'
|
||||||
echo '5 GB version: Eats 12.5 GB'
|
echo '5 GB version: Eats 12.5 GB RAM + 4 GB Swap'
|
||||||
(gendata 5000MB; echo FOO;
|
(gendata 5000MB; echo FOO;
|
||||||
gendata 3000MB; echo FOO;
|
gendata 3000MB; echo FOO;
|
||||||
gendata 1000MB;) |
|
gendata 1000MB;) |
|
||||||
|
@ -33,7 +33,7 @@ par_2gb_records_N() {
|
||||||
perl5.14parallel --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
perl5.14parallel --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
||||||
|
|
||||||
echo '### -L >4GB';
|
echo '### -L >4GB';
|
||||||
echo 'Eats 12.5 GB';
|
echo 'Eats 12.5 GB RAM + 6 GB Swap';
|
||||||
(head -c 5000MB /dev/zero; echo FOO;
|
(head -c 5000MB /dev/zero; echo FOO;
|
||||||
head -c 3000MB /dev/zero; echo FOO;
|
head -c 3000MB /dev/zero; echo FOO;
|
||||||
head -c 1000MB /dev/zero;) |
|
head -c 1000MB /dev/zero;) |
|
||||||
|
|
|
@ -29,6 +29,28 @@
|
||||||
echo 1=OK $?' | grep -v '\[1\]' | grep -v 'SHA256'
|
echo 1=OK $?' | grep -v '\[1\]' | grep -v 'SHA256'
|
||||||
#}
|
#}
|
||||||
|
|
||||||
|
par_parcat_mixing() {
|
||||||
|
echo 'parcat output should mix: a b a b'
|
||||||
|
mktmpfifo() {
|
||||||
|
tmp=$(tempfile)
|
||||||
|
rm $tmp
|
||||||
|
mkfifo $tmp
|
||||||
|
echo $tmp
|
||||||
|
}
|
||||||
|
slow_output() {
|
||||||
|
string=$1
|
||||||
|
perl -e 'print "'$string'"x9000,"start\n"'
|
||||||
|
sleep 2
|
||||||
|
perl -e 'print "'$string'"x9000,"end\n"'
|
||||||
|
}
|
||||||
|
tmp1=$(mktmpfifo)
|
||||||
|
tmp2=$(mktmpfifo)
|
||||||
|
slow_output a > $tmp1 &
|
||||||
|
sleep 1
|
||||||
|
slow_output b > $tmp2 &
|
||||||
|
parcat $tmp1 $tmp2 | tr -s ab
|
||||||
|
}
|
||||||
|
|
||||||
par_testhalt() {
|
par_testhalt() {
|
||||||
testhalt_false() {
|
testhalt_false() {
|
||||||
echo '### testhalt --halt '$1;
|
echo '### testhalt --halt '$1;
|
||||||
|
@ -94,6 +116,30 @@ par_tmux_termination() {
|
||||||
stdout parallel --timeout 120 doit ::: 1
|
stdout parallel --timeout 120 doit ::: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_linebuffer_tag_slow_output() {
|
||||||
|
echo "Test output tag with mixing halflines"
|
||||||
|
halfline() {
|
||||||
|
perl -e '$| = 1; map { print $ARGV[0]; sleep(1); print "$_\n" } split //, "Half\n"' $1
|
||||||
|
}
|
||||||
|
export -f halfline
|
||||||
|
parallel --delay 0.5 -j0 --tag --line-buffer halfline ::: a b
|
||||||
|
}
|
||||||
|
|
||||||
|
par_continuous_output() {
|
||||||
|
# After the first batch, each jobs should output when it finishes.
|
||||||
|
# Old versions delayed output by $jobslots jobs
|
||||||
|
doit() {
|
||||||
|
echo "Test delayed output with '$1'"
|
||||||
|
echo "-u is optimal but hard to reach, due to non-mixing"
|
||||||
|
seq 10 |
|
||||||
|
parallel -j1 $1 --delay 1 -N0 echo |
|
||||||
|
parallel -j4 $1 -N0 'sleep 0.6;date' |
|
||||||
|
timestamp -dd |
|
||||||
|
perl -pe 's/(.).*/$1/'
|
||||||
|
}
|
||||||
|
export -f doit
|
||||||
|
parallel -k doit ::: '' -u
|
||||||
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
|
|
|
@ -147,6 +147,11 @@ par_no_table() {
|
||||||
export -f $(compgen -A function | egrep 'p_|par_')
|
export -f $(compgen -A function | egrep 'p_|par_')
|
||||||
# Tested that -j0 in parallel is fastest (up to 15 jobs)
|
# Tested that -j0 in parallel is fastest (up to 15 jobs)
|
||||||
# more than 3 jobs: sqlite locks
|
# more than 3 jobs: sqlite locks
|
||||||
|
<<<<<<< HEAD
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
stdout parallel --timeout 250 -vj40% -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
|
stdout parallel --timeout 250 -vj40% -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
|
||||||
|
=======
|
||||||
|
compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
|
stdout parallel --timeout 200 -vj3 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
|
||||||
|
>>>>>>> 8286e771ec57e60ee17aee87741fe96790880db7
|
||||||
:::: - ::: \$MYSQL \$PG \$SQLITE
|
:::: - ::: \$MYSQL \$PG \$SQLITE
|
||||||
|
|
|
@ -120,8 +120,11 @@ par_empty() {
|
||||||
true;
|
true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hostname=`hostname`
|
||||||
export -f $(compgen -A function | egrep 'p_|par_')
|
export -f $(compgen -A function | egrep 'p_|par_')
|
||||||
# Tested that -j0 in parallel is fastest (up to 15 jobs)
|
# Tested that -j0 in parallel is fastest (up to 15 jobs)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
|
stdout parallel -vj5 -k --tag --joblog /tmp/jl-`basename $0` p_wrapper \
|
||||||
:::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi'
|
:::: - ::: \$MYSQL \$PG \$SQLITE | perl -pe 's/tbl\d+/TBL99999/gi;' |
|
||||||
|
perl -pe 's/(from TBL99999 order) .*/$1/g' |
|
||||||
|
perl -pe "s/$hostname/hostname/g"
|
||||||
|
|
|
@ -6,7 +6,7 @@ mkdir tmp
|
||||||
cd tmp
|
cd tmp
|
||||||
unset run_test
|
unset run_test
|
||||||
|
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj300% -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj300% -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test --load remote'
|
echo '### Test --load remote'
|
||||||
ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -qN0 perl -e while\(1\)\{\ \}' &
|
ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -qN0 perl -e while\(1\)\{\ \}' &
|
||||||
sleep 1;
|
sleep 1;
|
||||||
|
@ -20,17 +20,6 @@ echo '### Stop if all hosts are filtered and there are no hosts left to run on'
|
||||||
echo '### Can csh propagate a variable containing \n';
|
echo '### Can csh propagate a variable containing \n';
|
||||||
export A=$(seq 3); parallel -S csh@lo --env A bash -c \''echo "$A"'\' ::: dummy
|
export A=$(seq 3); parallel -S csh@lo --env A bash -c \''echo "$A"'\' ::: dummy
|
||||||
|
|
||||||
echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores'
|
|
||||||
echo '** test_zsh'
|
|
||||||
FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
echo '** test_zsh_filter'
|
|
||||||
FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
echo '** test_csh'
|
|
||||||
FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
echo '** test_csh_filter'
|
|
||||||
FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
echo '** bug #41805 done'
|
|
||||||
|
|
||||||
echo '### Test bug #34241: --pipe should not spawn unneeded processes'
|
echo '### Test bug #34241: --pipe should not spawn unneeded processes'
|
||||||
seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end
|
seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end
|
||||||
|
|
||||||
|
@ -125,8 +114,8 @@ echo '### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"'
|
||||||
touch -- '/tmp/./--- /A' '/tmp/ ---/B';
|
touch -- '/tmp/./--- /A' '/tmp/ ---/B';
|
||||||
rm -f ./---?/A.a ./?---/B.a;
|
rm -f ./---?/A.a ./?---/B.a;
|
||||||
parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B';
|
parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B';
|
||||||
ls ./---?/A.a ./?---/B.a;
|
ls ./---?/A.a ./?---/B.a | LC_ALL=C sort;
|
||||||
parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK';
|
parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK' | LC_ALL=C sort;
|
||||||
|
|
||||||
echo '### bug #46519: --onall ignores --transfer'
|
echo '### bug #46519: --onall ignores --transfer'
|
||||||
touch bug46519.{a,b,c}; rm -f bug46519.?? bug46519.???;
|
touch bug46519.{a,b,c}; rm -f bug46519.?? bug46519.???;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
|
|
||||||
# SSH only allowed to localhost/lo
|
# SSH only allowed to localhost/lo
|
||||||
cat <<'EOF' | parallel -vj100% --retries 3 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | parallel -vj100% --retries 3 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### trailing space in sshlogin'
|
echo '### trailing space in sshlogin'
|
||||||
echo 'sshlogin trailing space' | parallel --sshlogin "ssh -l parallel localhost " echo
|
echo 'sshlogin trailing space' | parallel --sshlogin "ssh -l parallel localhost " echo
|
||||||
|
|
||||||
|
@ -40,11 +40,6 @@ echo '### bug #45906: {= in header =}'
|
||||||
parallel --rpl '{G} $_=lc($_)' -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: RETURNFILE45906;
|
parallel --rpl '{G} $_=lc($_)' -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: RETURNFILE45906;
|
||||||
ls returnfile45906
|
ls returnfile45906
|
||||||
|
|
||||||
echo '### bug #45907: --header : + --return {header}'
|
|
||||||
rm returnfile45907;
|
|
||||||
ppar --header : -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: G returnfile45907;
|
|
||||||
ls returnfile45907
|
|
||||||
|
|
||||||
echo "### bug #47608: parallel --nonall -S lo 'echo ::: ' blocks"
|
echo "### bug #47608: parallel --nonall -S lo 'echo ::: ' blocks"
|
||||||
parallel --nonall -S lo 'echo ::: '
|
parallel --nonall -S lo 'echo ::: '
|
||||||
|
|
||||||
|
@ -59,6 +54,13 @@ echo '### bug #49404: "Max jobs to run" does not equal the number of jobs specif
|
||||||
stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10
|
stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
par_header_in_return() {
|
||||||
|
echo '### bug #45907: --header : + --return {header}'
|
||||||
|
rm returnfile45907
|
||||||
|
parallel --header : -S parallel@lo --return {G} --cleanup echo {G} '>' {G} ::: G returnfile45907
|
||||||
|
ls returnfile45907
|
||||||
|
}
|
||||||
|
|
||||||
par_trc_with_space() {
|
par_trc_with_space() {
|
||||||
echo '### Test --trc with space added in filename'
|
echo '### Test --trc with space added in filename'
|
||||||
cd
|
cd
|
||||||
|
|
|
@ -5,7 +5,7 @@ unset run_once
|
||||||
|
|
||||||
# SSH only allowed to localhost/lo
|
# SSH only allowed to localhost/lo
|
||||||
# --retries if ssh dies
|
# --retries if ssh dies
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj4 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj4 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### --env _'
|
echo '### --env _'
|
||||||
fUbAr="OK FUBAR" parallel -S parallel@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
fUbAr="OK FUBAR" parallel -S parallel@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
||||||
fUbAr="OK FUBAR" parallel -S csh@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
fUbAr="OK FUBAR" parallel -S csh@lo --env _ echo '$fUbAr $DEBEMAIL' ::: test
|
||||||
|
|
|
@ -48,6 +48,14 @@ par_pipe_retries() {
|
||||||
stdout parallel --retries 2 --roundrobin echo ::: should fail
|
stdout parallel --retries 2 --roundrobin echo ::: should fail
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_env_parallel_onall() {
|
||||||
|
echo "bug #54352: env_parallel -Slo --nonall myfunc broken in 20180722"
|
||||||
|
. `which env_parallel.bash`
|
||||||
|
doit() { echo Myfunc "$@"; }
|
||||||
|
env_parallel -Slo --onall doit ::: works
|
||||||
|
env_parallel -Slo --nonall doit works
|
||||||
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort -r |
|
compgen -A function | grep par_ | sort -r |
|
||||||
parallel --joblog /tmp/jl-`basename $0` -j3 --tag -k --delay 0.1 --retries 3 '{} 2>&1'
|
parallel --joblog /tmp/jl-`basename $0` -j3 --tag -k --delay 0.1 --retries 3 '{} 2>&1'
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -7,7 +7,8 @@ par_path_remote_bash() {
|
||||||
rm -rf /tmp/parallel
|
rm -rf /tmp/parallel
|
||||||
cp /usr/local/bin/parallel /tmp
|
cp /usr/local/bin/parallel /tmp
|
||||||
|
|
||||||
cat <<'_EOS' | stdout ssh nopathbash@lo -T | grep -Ev 'For upgrade information, please visit:|updates are security updates|packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://|from 13 to 17 years|mentor:|New release|do-release-upgrade|public clouds|\s*^$' | uniq
|
cat <<'_EOS' | stdout ssh nopathbash@lo -T | perl -ne '/logged in/..0 and print' | uniq
|
||||||
|
echo logged in
|
||||||
echo BASH Path before: $PATH with no parallel
|
echo BASH Path before: $PATH with no parallel
|
||||||
parallel echo ::: 1
|
parallel echo ::: 1
|
||||||
# Race condition stderr/stdout
|
# Race condition stderr/stdout
|
||||||
|
@ -28,7 +29,8 @@ par_path_remote_csh() {
|
||||||
rm -rf /tmp/parallel
|
rm -rf /tmp/parallel
|
||||||
cp /usr/local/bin/parallel /tmp
|
cp /usr/local/bin/parallel /tmp
|
||||||
|
|
||||||
cat <<'_EOS' | stdout ssh nopathcsh@lo -T | grep -Ev 'For upgrade information, please visit:|updates are security updates|packages can be updated|System restart required|Welcome to|https://|Ubuntu|http://|from 13 to 17 years|mentor:|New release|do-release-upgrade|public clouds|\s*^$' | uniq
|
cat <<'_EOS' | stdout ssh nopathcsh@lo -T | perl -ne '/logged in/..0 and print' | uniq
|
||||||
|
echo logged in
|
||||||
echo CSH Path before: $PATH with no parallel
|
echo CSH Path before: $PATH with no parallel
|
||||||
which parallel >& /dev/stdout
|
which parallel >& /dev/stdout
|
||||||
echo '^^^^^^^^ Not found is OK'
|
echo '^^^^^^^^ Not found is OK'
|
||||||
|
@ -155,6 +157,6 @@ par_retries_bug_from_2010() {
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
|
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
parallel --joblog /tmp/jl-`basename $0` --delay 0.1 -j10 --tag -k '{} 2>&1' |
|
parallel --joblog /tmp/jl-`basename $0` --delay 0.1 -j10 --tag -k '{} 2>&1' |
|
||||||
grep -Ev 'microk8s|smart connected IoT'
|
grep -Ev 'microk8s|smart connected IoT'
|
||||||
|
|
|
@ -131,11 +131,47 @@ _EOF
|
||||||
ssh zsh@lo "$myscript"
|
ssh zsh@lo "$myscript"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
par_propagate_env() {
|
||||||
|
echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores'
|
||||||
|
echo '** test_zsh'
|
||||||
|
FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
|
echo '** test_zsh_filter'
|
||||||
|
FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
|
echo '** test_csh'
|
||||||
|
FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
|
echo '** test_csh_filter'
|
||||||
|
FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
||||||
|
echo '** bug #41805 done'
|
||||||
|
}
|
||||||
|
|
||||||
|
par_env_parallel_big_env() {
|
||||||
|
echo '### bug #54128: command too long when exporting big env'
|
||||||
|
. `which env_parallel.bash`
|
||||||
|
a=`rand | perl -pe 's/\0//g'| head -c 75000`
|
||||||
|
env_parallel -Slo echo should not ::: fail 2>&1
|
||||||
|
a=`rand | perl -pe 's/\0//g'| head -c 80000`
|
||||||
|
env_parallel -Slo echo should ::: fail 2>/dev/null || echo OK
|
||||||
|
}
|
||||||
|
|
||||||
|
par_no_route_to_host() {
|
||||||
|
echo '### no route to host with | and -j0 causes inf loop'
|
||||||
|
via_parallel() {
|
||||||
|
seq 11 | stdout parallel -j0 -S 192.168.1.199 echo
|
||||||
|
}
|
||||||
|
export -f via_parallel
|
||||||
|
raw() {
|
||||||
|
stdout ssh 192.168.1.199 echo
|
||||||
|
}
|
||||||
|
export -f raw
|
||||||
|
|
||||||
|
parallel -k ::: raw via_parallel
|
||||||
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
|
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
|
||||||
#compgen -A function | grep par_ | sort |
|
#compgen -A function | grep par_ | sort |
|
||||||
compgen -A function | grep par_ | sort -r |
|
compgen -A function | grep par_ | sort -r |
|
||||||
# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1'
|
# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1'
|
||||||
parallel --joblog /tmp/jl-`basename $0` -j200% --tag -k '{} 2>&1' |
|
parallel --joblog /tmp/jl-`basename $0` --delay 0.1 -j200% --tag -k '{} 2>&1' |
|
||||||
perl -pe 's/line \d\d\d+:/line XXX:/' |
|
perl -pe 's/line \d\d\d+:/line XXX:/' |
|
||||||
perl -pe 's/\[\d\d\d+\]:/[XXX]:/'
|
perl -pe 's/\[\d\d\d+\]:/[XXX]:/'
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo "bug #43654: --bar with command not using {} - only last output line "
|
echo "bug #43654: --bar with command not using {} - only last output line "
|
||||||
COLUMNS=80 stdout parallel --bar true {.} ::: 1 | perl -pe 's/.*\r/\r/'
|
COLUMNS=80 stdout parallel --bar true {.} ::: 1 | perl -pe 's/.*\r/\r/'
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo "### bug #41482: --pipe --compress blocks at different -j/seq combinations"
|
echo "### bug #41482: --pipe --compress blocks at different -j/seq combinations"
|
||||||
seq 1 | parallel -k -j2 --compress -N1 -L1 --pipe cat;
|
seq 1 | parallel -k -j2 --compress -N1 -L1 --pipe cat;
|
||||||
echo echo 1-4 + 1-4
|
echo echo 1-4 + 1-4
|
||||||
|
|
|
@ -9,11 +9,11 @@ PARALLEL=-j8
|
||||||
export PARALLEL
|
export PARALLEL
|
||||||
|
|
||||||
stdsort() {
|
stdsort() {
|
||||||
"$@" 2>&1 | sort;
|
"$@" 2>&1 | LC_ALL=C sort;
|
||||||
}
|
}
|
||||||
export -f stdsort
|
export -f stdsort
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj100 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj100 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### -0 -n3 echo < files0.xi'
|
echo '### -0 -n3 echo < files0.xi'
|
||||||
stdout xargs -0 -n3 echo < files0.xi
|
stdout xargs -0 -n3 echo < files0.xi
|
||||||
stdout parallel -k -0 -n3 echo < files0.xi
|
stdout parallel -k -0 -n3 echo < files0.xi
|
||||||
|
@ -255,13 +255,13 @@ echo 'Because of -t these lines can be flipped around therefore sort'
|
||||||
stdout parallel -k -X -s30 -t echo < stairs.xi | sort
|
stdout parallel -k -X -s30 -t echo < stairs.xi | sort
|
||||||
echo '### -t echo this plus that < space.xi'
|
echo '### -t echo this plus that < space.xi'
|
||||||
stdout xargs -t echo this plus that < space.xi
|
stdout xargs -t echo this plus that < space.xi
|
||||||
stdout parallel -k -t echo this plus that < space.xi
|
stdout parallel -k -t echo this plus that < space.xi | sort
|
||||||
echo '### -n1 printf "@%s@\n" < empty.xi'
|
echo '### -n1 printf "@%s@\n" < empty.xi'
|
||||||
stdout xargs -n1 printf "@%s@\n" < empty.xi
|
stdout xargs -n1 printf "@%s@\n" < empty.xi
|
||||||
stdout parallel -k -n1 printf "@%s@\n" < empty.xi
|
stdout parallel -k -n1 printf "@%s@\n" < empty.xi
|
||||||
echo '### -n2 -t echo < foobar.xi'
|
echo '### -n2 -t echo < foobar.xi'
|
||||||
stdout xargs -n2 -t echo < foobar.xi
|
stdout xargs -n2 -t echo < foobar.xi
|
||||||
stdout parallel -k -n2 -t echo < foobar.xi
|
stdout parallel -k -n2 -t echo < foobar.xi | sort
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
|
@ -8,22 +8,22 @@ cd $TMP/
|
||||||
echo echo test of cat pipe sh | parallel -j 50 2>&1
|
echo echo test of cat pipe sh | parallel -j 50 2>&1
|
||||||
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/}
|
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/}
|
||||||
|
|
||||||
ls | parallel ls | sort
|
ls | parallel ls | LC_ALL=C sort
|
||||||
ls | parallel echo ls | sort
|
ls | parallel echo ls | LC_ALL=C sort
|
||||||
ls | parallel -j 1 echo ls | sort
|
ls | parallel -j 1 echo ls | LC_ALL=C sort
|
||||||
find -type f | parallel diff {} a/foo ">"{}.diff | sort
|
find -type f | parallel diff {} a/foo ">"{}.diff | LC_ALL=C sort
|
||||||
ls | parallel -v --group "ls {}|wc;echo {}" | sort
|
ls | parallel -v --group "ls {}|wc;echo {}" | LC_ALL=C sort
|
||||||
echo '### Check that we can have more input than max procs (-j 0) - touch'
|
echo '### Check that we can have more input than max procs (-j 0) - touch'
|
||||||
perl -e 'print map {"more_than_5000-$_\n" } (4000..9999)' | parallel -vj 0 touch | sort | tail
|
perl -e 'print map {"more_than_5000-$_\n" } (4000..9999)' | parallel -vj 0 touch | LC_ALL=C sort | tail
|
||||||
echo '### rm'
|
echo '### rm'
|
||||||
perl -e 'print map {"more_than_5000-$_\n" } (4000..9900)' | parallel -j 0 rm | sort
|
perl -e 'print map {"more_than_5000-$_\n" } (4000..9900)' | parallel -j 0 rm | LC_ALL=C sort
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 | egrep -v 'parallel: Warning: Starting|parallel: Warning: Consider'
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 | egrep -v 'parallel: Warning: Starting|parallel: Warning: Consider'
|
||||||
ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort
|
ls | parallel -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | LC_ALL=C sort
|
||||||
ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | sort
|
ls | parallel --group -j500 'sleep 1; find {} -type f | perl -ne "END{print $..\" "{=$_=pQ($_)=}"\n\"}"' | LC_ALL=C sort
|
||||||
find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort
|
find . -type f | parallel --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | LC_ALL=C sort
|
||||||
find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | sort
|
find . -type f | parallel -v --group "perl -ne '/^\\S+\\s+\\S+$/ and print \$ARGV,\"\\n\"'" | LC_ALL=C sort
|
||||||
find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort
|
find . -type f | parallel -q --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | LC_ALL=C sort
|
||||||
find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | sort
|
find . -type f | parallel -qv --group perl -ne '/^\S+\s+\S+$/ and print $ARGV,"\n"' | LC_ALL=C sort
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cd - >/dev/null
|
cd - >/dev/null
|
||||||
|
|
|
@ -7,7 +7,7 @@ median() { perl -e '@a=sort {$a<=>$b} <>;print $a[$#a/2]';}
|
||||||
export -f median
|
export -f median
|
||||||
|
|
||||||
# -L1 will join lines ending in ' '
|
# -L1 will join lines ending in ' '
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### bug #41565: Print happens in blocks - not after each job complete'
|
echo '### bug #41565: Print happens in blocks - not after each job complete'
|
||||||
echo 'The timing here is important: a full second between each'
|
echo 'The timing here is important: a full second between each'
|
||||||
perl -e 'for(1..30){print("$_\n");`sleep 1`}' | parallel -j3 'echo {#}' | timestamp -dd | perl -pe '$_=int($_+0.3)."\n"' | median
|
perl -e 'for(1..30){print("$_\n");`sleep 1`}' | parallel -j3 'echo {#}' | timestamp -dd | perl -pe '$_=int($_+0.3)."\n"' | median
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# -L1 will join lines ending in ' '
|
# -L1 will join lines ending in ' '
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### bug #38354: -J profile_name should read from `pwd`/profile_name before ~/.parallel/profile_name'
|
echo '### bug #38354: -J profile_name should read from `pwd`/profile_name before ~/.parallel/profile_name'
|
||||||
echo "echo echo from ./local_test_profile" > local_test_profile;
|
echo "echo echo from ./local_test_profile" > local_test_profile;
|
||||||
parallel --profile local_test_profile echo ::: 1;
|
parallel --profile local_test_profile echo ::: 1;
|
||||||
|
@ -50,7 +50,7 @@ echo "bug #37956: --colsep does not default to '\t' as specified in the man page
|
||||||
printf "A\tB\n1\tone" | parallel --header : echo {B} {A}
|
printf "A\tB\n1\tone" | parallel --header : echo {B} {A}
|
||||||
|
|
||||||
echo '### Test --tollef'
|
echo '### Test --tollef'
|
||||||
stdout parallel -k --tollef echo -- 1 2 3 ::: a b c | sort
|
stdout parallel -k --tollef echo -- 1 2 3 ::: a b c | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --tollef --gnu'
|
echo '### Test --tollef --gnu'
|
||||||
stdout parallel -k --tollef --gnu echo ::: 1 2 3 -- a b c
|
stdout parallel -k --tollef --gnu echo ::: 1 2 3 -- a b c
|
||||||
|
@ -133,7 +133,4 @@ echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
|
||||||
echo No .par should exist;
|
echo No .par should exist;
|
||||||
stdout ls *.par
|
stdout ls *.par
|
||||||
|
|
||||||
echo "bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'"
|
|
||||||
export PARALLEL=" -v" && parallel echo ::: 'space in envvar OK'
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
|
@ -52,9 +52,9 @@ test_chr_on_sshlogin() {
|
||||||
stdout parallel -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// LANG=C parallel -k -j1 $onall -S $sshlogin --env V,V2,LANG echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} |
|
stdout parallel -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// LANG=C parallel -k -j1 $onall -S $sshlogin --env V,V2,LANG echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} |
|
||||||
sort |
|
sort |
|
||||||
uniq -c |
|
uniq -c |
|
||||||
grep -v ' 4 '|
|
grep -av ' 4 '|
|
||||||
grep -v xauth |
|
grep -av xauth |
|
||||||
grep -v X11
|
grep -av X11
|
||||||
}
|
}
|
||||||
export -f test_chr_on_sshlogin
|
export -f test_chr_on_sshlogin
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ par_env_160() {
|
||||||
par_env_160_onall() {
|
par_env_160_onall() {
|
||||||
echo '### Test --env for \160 - which kills csh - single and double --onall - no output is good'
|
echo '### Test --env for \160 - which kills csh - single and double --onall - no output is good'
|
||||||
test_chr_on_sshlogin 160 :,1/lo,1/tcsh@lo --onall |
|
test_chr_on_sshlogin 160 :,1/lo,1/tcsh@lo --onall |
|
||||||
grep -v ' 3 '
|
grep -a -v ' 3 '
|
||||||
}
|
}
|
||||||
|
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
|
|
|
@ -34,7 +34,7 @@ ls | parallel -kv rm -- {.}/abc-{.}-{} 2>&1
|
||||||
#test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v rmdir -- {} 2>&1 \
|
#test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v rmdir -- {} 2>&1 \
|
||||||
|
|
||||||
# -L1 will join lines ending in ' '
|
# -L1 will join lines ending in ' '
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj0 -k -L1 --joblog /tmp/jl-`basename $0`
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj0 -k -L1 --joblog /tmp/jl-`basename $0` -r
|
||||||
echo '### Test compress'
|
echo '### Test compress'
|
||||||
seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10'
|
seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10'
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ forceload () {
|
||||||
# Force load avg > number of cpu cores
|
# Force load avg > number of cpu cores
|
||||||
forceload $(parallel --number-of-cores)
|
forceload $(parallel --number-of-cores)
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo "bug #38441: CPU usage goes to 100% if load is higher than --load at first job"
|
echo "bug #38441: CPU usage goes to 100% if load is higher than --load at first job"
|
||||||
/usr/bin/time -f %e parallel --load 100% true ::: a 2>&1 |
|
/usr/bin/time -f %e parallel --load 100% true ::: a 2>&1 |
|
||||||
perl -ne '$_ > 1 and print "More than 1 secs wall clock: OK\n"'
|
perl -ne '$_ > 1 and print "More than 1 secs wall clock: OK\n"'
|
||||||
|
|
|
@ -290,4 +290,4 @@ export -f $(compgen -A function | grep par_)
|
||||||
# Tested with -j1..8
|
# Tested with -j1..8
|
||||||
# -j6 was fastest
|
# -j6 was fastest
|
||||||
#compgen -A function | grep par_ | sort | parallel -j$P --tag -k '{} 2>&1'
|
#compgen -A function | grep par_ | sort | parallel -j$P --tag -k '{} 2>&1'
|
||||||
compgen -A function | grep par_ | sort | parallel -j6 --tag -k '{} 2>&1'
|
compgen -A function | grep par_ | LC_ALL=C sort | parallel -j6 --tag -k '{} 2>&1'
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test of xargs -m command lines > 130k';
|
echo '### Test of xargs -m command lines > 130k';
|
||||||
seq 1 60000 | parallel -m -j1 echo a{}b{}c | tee >(wc >/tmp/awc$$) >(sort | md5sum) >/tmp/a$$;
|
seq 1 60000 | parallel -m -j1 echo a{}b{}c | tee >(wc >/tmp/awc$$) >(sort | md5sum) >/tmp/a$$;
|
||||||
wait;
|
wait;
|
||||||
|
@ -28,7 +28,7 @@ echo '### This causes problems if we kill child processes';
|
||||||
|
|
||||||
echo '### This causes problems if we kill child processes (II)';
|
echo '### This causes problems if we kill child processes (II)';
|
||||||
# 2>/dev/null to avoid parallel: Warning: Starting 45 processes took > 2 sec.
|
# 2>/dev/null to avoid parallel: Warning: Starting 45 processes took > 2 sec.
|
||||||
seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' 2>/dev/null | sort | md5sum
|
seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' 2>/dev/null | LC_ALL=C sort | md5sum
|
||||||
|
|
||||||
echo '### Test -m';
|
echo '### Test -m';
|
||||||
(echo foo;echo bar) | parallel -j1 -m echo 1{}2{}3 A{}B{}C
|
(echo foo;echo bar) | parallel -j1 -m echo 1{}2{}3 A{}B{}C
|
||||||
|
|
|
@ -6,7 +6,7 @@ cp -a input-files/testdir2 tmp
|
||||||
NICEPAR="nice nice parallel"
|
NICEPAR="nice nice parallel"
|
||||||
export NICEPAR
|
export NICEPAR
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### bug #42329: --line-buffer gives wrong output';
|
echo '### bug #42329: --line-buffer gives wrong output';
|
||||||
$NICEPAR --line-buffer --tag seq ::: 10000000 | wc -c;
|
$NICEPAR --line-buffer --tag seq ::: 10000000 | wc -c;
|
||||||
$NICEPAR --line-buffer seq ::: 10000000 | wc -c
|
$NICEPAR --line-buffer seq ::: 10000000 | wc -c
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### -L -n with pipe'
|
echo '### -L -n with pipe'
|
||||||
seq 14 | parallel --pipe -k -L 3 -n 2 'cat;echo 6 Ln line record'
|
seq 14 | parallel --pipe -k -L 3 -n 2 'cat;echo 6 Ln line record'
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ echo '### Test --pipe'
|
||||||
seq 1 1000000 >/tmp/parallel-seq
|
seq 1 1000000 >/tmp/parallel-seq
|
||||||
shuf --random-source=/tmp/parallel-seq /tmp/parallel-seq >/tmp/blocktest
|
shuf --random-source=/tmp/parallel-seq /tmp/parallel-seq >/tmp/blocktest
|
||||||
|
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj2 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj2 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test 200M records with too small block';
|
echo '### Test 200M records with too small block';
|
||||||
(
|
(
|
||||||
echo start;
|
echo start;
|
||||||
|
|
|
@ -1,5 +1,23 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
get_tmux() {
|
||||||
|
# To install tmux in different version run this
|
||||||
|
cd /tmp
|
||||||
|
doit() {
|
||||||
|
wget https://github.com/tmux/tmux/archive/$1.tar.gz
|
||||||
|
tar xvf $1.tar.gz
|
||||||
|
cd tmux-$1
|
||||||
|
./autogen.sh
|
||||||
|
./configure --prefix /tmp/tmux/$1
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
sudo cp /tmp/tmux/$1/bin/tmux /usr/local/bin/tmux-$1
|
||||||
|
}
|
||||||
|
|
||||||
|
. `which env_parallel.bash`
|
||||||
|
seq 1.8 0.1 2.9 | env_parallel --tag --lb doit
|
||||||
|
}
|
||||||
|
|
||||||
par_tmux_filter() {
|
par_tmux_filter() {
|
||||||
# /tmp/parallel-local7/tmsOU2Ig
|
# /tmp/parallel-local7/tmsOU2Ig
|
||||||
perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;s/ p\d+/pID/;'
|
perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;s/ p\d+/pID/;'
|
||||||
|
@ -24,7 +42,7 @@ export -f par_tmux
|
||||||
# echo '### bug #48841: --tmux(pane) --fg should start tmux in foreground'
|
# echo '### bug #48841: --tmux(pane) --fg should start tmux in foreground'
|
||||||
# stdout /usr/bin/time -f %e script -q -f -c /tmp/parallel-local7-script /dev/null | perl -ne '$_ >= 26 and $_ <= 45 and print "OK\n"'
|
# stdout /usr/bin/time -f %e script -q -f -c /tmp/parallel-local7-script /dev/null | perl -ne '$_ >= 26 and $_ <= 45 and print "OK\n"'
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 100 --retries 1 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 --delay 1 --timeout 100 --retries 1 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
|
|
||||||
echo '### tmux-1.9'
|
echo '### tmux-1.9'
|
||||||
seq 0000 10 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
seq 0000 10 1000 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
||||||
|
|
|
@ -7,7 +7,7 @@ export XAP
|
||||||
NICEPAR="nice nice parallel"
|
NICEPAR="nice nice parallel"
|
||||||
export NICEPAR
|
export NICEPAR
|
||||||
|
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo 'bug #41412: --timeout + --delay causes deadlock';
|
echo 'bug #41412: --timeout + --delay causes deadlock';
|
||||||
seq 10 | parallel -j10 --timeout 1 --delay 0.3 echo;
|
seq 10 | parallel -j10 --timeout 1 --delay 0.3 echo;
|
||||||
parallel -j3 --timeout 1 --delay 2 echo ::: 1 2 3;
|
parallel -j3 --timeout 1 --delay 2 echo ::: 1 2 3;
|
||||||
|
|
|
@ -5,24 +5,24 @@ unset TIMEOUT
|
||||||
. `which env_parallel.bash`
|
. `which env_parallel.bash`
|
||||||
env_parallel --session
|
env_parallel --session
|
||||||
|
|
||||||
|
P_ALL="openstep qnx pidora alpha tru64 hpux-ia64 syllable raspbian solaris openindiana aix hpux debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2"
|
||||||
|
P="$P_ALL"
|
||||||
|
|
||||||
P_ALL="alpha tru64 hpux-ia64 syllable pidora raspbian solaris openindiana aix hpux qnx debian-ppc suse solaris-x86 mandriva ubuntu scosysv unixware centos miros macosx redhat netbsd openbsd freebsd debian dragonfly vax ultrix minix irix hurd beaglebone cubieboard2"
|
# tru64 takes 22s to run 4 parallels
|
||||||
P_NOTWORKING="vax alpha openstep"
|
MAXTIME=50
|
||||||
P_NOTWORKING_YET="ultrix irix"
|
RETRIES=2
|
||||||
|
MAXPROC=${maxproc:-11}
|
||||||
|
MAXINNERPROC=${maxinnerproc:-3}
|
||||||
|
|
||||||
P_WORKING="openbsd tru64 debian freebsd redhat netbsd macosx miros centos unixware pidora ubuntu scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux openindiana hpux-ia64"
|
export PARALLEL_SSH="ssh -oLogLevel=quiet"
|
||||||
P_WORKING="openbsd tru64 debian redhat netbsd macosx miros centos unixware pidora scosysv raspbian solaris-x86 aix mandriva debian-ppc suse solaris hpux hurd freebsd ubuntu openindiana"
|
|
||||||
P_TEMPORARILY_BROKEN="minix dragonfly hpux-ia64 beaglebone cubieboard2"
|
|
||||||
|
|
||||||
P="$P_WORKING"
|
# select a running master (debian-ppc, suse, ubuntu, or debian)
|
||||||
POLAR=`parallel -k echo {}.polarhome.com ::: $P`
|
MASTER=$(parallel -j0 --delay 0.1 --halt now,success=1 $PARALLEL_SSH {} echo {} \
|
||||||
S_POLAR=`parallel -k echo -S 1/{}.polarhome.com ::: $P`
|
::: {debian-ppc,ubuntu,debian,suse}.polarhome.com)
|
||||||
|
|
||||||
# 2018-04-22 MAXTIME=20
|
parallel -j0 --delay 0.1 --retries $RETRIES \
|
||||||
MAXTIME=25
|
rsync -L /usr/local/bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \
|
||||||
RETRIES=4
|
::: $MASTER:bin/
|
||||||
|
|
||||||
parallel --retries $RETRIES rsync -a /usr/local/bin/{parallel,env_parallel,env_parallel.*,parcat} ::: redhat.polarhome.com:bin/
|
|
||||||
|
|
||||||
doit() {
|
doit() {
|
||||||
# Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet
|
# Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet
|
||||||
|
@ -30,7 +30,25 @@ doit() {
|
||||||
export PARALLEL_SSH
|
export PARALLEL_SSH
|
||||||
export MAXTIME
|
export MAXTIME
|
||||||
export RETRIES
|
export RETRIES
|
||||||
echo MAXTIME=$MAXTIME RETRIES=$RETRIES
|
export MAXPROC
|
||||||
|
export RET_TIME_K="-k --retries $RETRIES --timeout $MAXTIME"
|
||||||
|
LC_ALL=C
|
||||||
|
|
||||||
|
echo MAXTIME=$MAXTIME RETRIES=$RETRIES MAXPROC=$MAXPROC MAXINNERPROC=$MAXINNERPROC
|
||||||
|
|
||||||
|
echo '### Filter out working servers'
|
||||||
|
# syllable often gives false positive
|
||||||
|
parallel --timeout $MAXTIME -j10 ssh syllable true ::: {1..10} 2>/dev/null >/dev/null &
|
||||||
|
POLAR_ALL="`bin/parallel -j0 -k --timeout 10 echo {} ::: $P`"
|
||||||
|
POLAR="`bin/parallel -j0 -k --timeout 10 $PARALLEL_SSH {} echo {} ::: $P`"
|
||||||
|
diff <(echo "$POLAR_ALL") <(echo "$POLAR")
|
||||||
|
S_POLAR=`bin/parallel -j0 $RET_TIME_K echo -S 1/{} ::: $POLAR`
|
||||||
|
|
||||||
|
sshwithpass() {
|
||||||
|
# Minix requires sshpass. The other servers will use ssh-keys
|
||||||
|
sshpass -f ~/.ssh/minix.password ssh -oLogLevel=quiet "$@"
|
||||||
|
}
|
||||||
|
export -f sshwithpass
|
||||||
|
|
||||||
copy() {
|
copy() {
|
||||||
# scp, but atomic (avoid half files if disconnected)
|
# scp, but atomic (avoid half files if disconnected)
|
||||||
|
@ -38,75 +56,101 @@ doit() {
|
||||||
src="$2"
|
src="$2"
|
||||||
dst="$3"
|
dst="$3"
|
||||||
cat "$src" |
|
cat "$src" |
|
||||||
stdout ssh -oLogLevel=quiet $host "mkdir -p bin;cat > bin/'$dst'.tmp && chmod 755 bin/'$dst'.tmp && mv bin/'$dst'.tmp bin/'$dst'"
|
sshwithpass $host "mkdir -p bin;cat > bin/'$dst'.tmp && chmod 755 bin/'$dst'.tmp && mv bin/'$dst'.tmp bin/'$dst'" 2>&1
|
||||||
}
|
}
|
||||||
export -f copy
|
export -f copy
|
||||||
|
|
||||||
par_nonall() {
|
par_nonall() {
|
||||||
parallel -j15 -k --retries $RETRIES --timeout $MAXTIME --delay 0.1 --tag \
|
sshwithpass() {
|
||||||
--nonall $S_POLAR --argsep ,:- \
|
# Minix requires sshpass. The other servers will use ssh-keys
|
||||||
|
sshpass -f ~/.ssh/minix.password ssh -oLogLevel=quiet "$@"
|
||||||
|
}
|
||||||
|
export -f sshwithpass
|
||||||
|
parallel -j$MAXPROC $RET_TIME_K --delay 0.1 --tag \
|
||||||
|
--nonall $S_POLAR -S "1/sshwithpass minix" --argsep ,:- \
|
||||||
'source setupenv >&/dev/null || . `pwd`/setupenv;' "$@"
|
'source setupenv >&/dev/null || . `pwd`/setupenv;' "$@"
|
||||||
}
|
}
|
||||||
export -f par_nonall
|
export -f par_nonall
|
||||||
|
|
||||||
echo '### Copy commands to servers'
|
echo '### Copy commands to servers'
|
||||||
parallel -vkj15 --retries $RETRIES --timeout $MAXTIME --delay 0.03 --tag \
|
env_parallel -vj$MAXPROC $RET_TIME_K --delay 0.03 --tag copy {2} {1} {1/} \
|
||||||
copy {2} {1} {1/} \
|
::: bin/{parallel,env_parallel,env_parallel.*[^~],parcat,stdout} \
|
||||||
::: bin/{parallel,env_parallel,env_parallel.*,parcat,stdout} \
|
::: $POLAR minix
|
||||||
::: $POLAR
|
|
||||||
echo Done copying
|
echo Done copying
|
||||||
|
|
||||||
# Test empty command
|
env_parallel -d '\n\n' -vkj$MAXINNERPROC --delay 2 <<'EOF'
|
||||||
test_empty_cmd() {
|
|
||||||
echo '### Test if empty command in process list causes problems'
|
|
||||||
perl -e '$0=" ";sleep 10' &
|
|
||||||
parallel echo ::: OK_with_empty_cmd
|
|
||||||
}
|
|
||||||
export -f test_empty_cmd
|
|
||||||
PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1
|
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo '### Works on ...'
|
||||||
|
echo
|
||||||
par_nonall parallel echo Works on {} ::: '`hostname`' 2>&1
|
par_nonall parallel echo Works on {} ::: '`hostname`' 2>&1
|
||||||
par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp |" \
|
|
||||||
"perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' &&" \
|
|
||||||
"echo OK readonly tmp" 2>&1
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '### --number-of-cores/--number-of-cpus should work with no error'
|
echo '### --number-of-cores/--number-of-cpus should work with no error'
|
||||||
echo
|
echo
|
||||||
par_nonall parallel --number-of-sockets 2>&1
|
par_nonall 'parallel --number-of-sockets; parallel --number-of-cores' 2>&1
|
||||||
par_nonall parallel --number-of-cores 2>&1
|
par_nonall 'parallel --number-of-threads; parallel --number-of-cpus' 2>&1
|
||||||
par_nonall parallel --number-of-threads 2>&1
|
|
||||||
par_nonall parallel --number-of-cpus 2>&1
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '### Does exporting a bash function kill parallel'
|
echo '### Fails if tmpdir is R/O'
|
||||||
|
echo
|
||||||
|
par_nonall "stdout parallel --tmpdir / echo ::: test read-only tmp |
|
||||||
|
perl -pe '\$exit += s:/[a-z0-9_]+.arg:/XXXXXXXX.arg:gi; \$exit += s/[0-9][0-9][0-9][0-9]/0000/gi; END { exit not \$exit }' &&
|
||||||
|
echo OK readonly tmp" 2>&1
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo '### Does exporting a bash function make parallel fail?'
|
||||||
|
echo 'If login shell is not bash compatible it fails'
|
||||||
echo
|
echo
|
||||||
# http://zmwangx.github.io/blog/2015-11-25-bash-function-exporting-fiasco.html
|
# http://zmwangx.github.io/blog/2015-11-25-bash-function-exporting-fiasco.html
|
||||||
par_nonall 'func() { cat <(echo bash only A); };export -f func; bin/parallel func ::: 1' 2>&1
|
par_nonall 'echo test funcA
|
||||||
|
funcA() {
|
||||||
|
cat <(echo bash only A)
|
||||||
|
}
|
||||||
|
export -f funcA;
|
||||||
|
bin/parallel funcA ::: 1' 2>&1
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '### Does PARALLEL_SHELL help exporting a bash function not kill parallel'
|
echo '### Does PARALLEL_SHELL help exporting a bash function'
|
||||||
|
echo 'If login shell is not bash compatible it should work'
|
||||||
echo
|
echo
|
||||||
(
|
mkdir -p tmp/bin
|
||||||
mkdir -p tmp/bin;
|
cp /bin/bash tmp/bin
|
||||||
cp /bin/bash tmp/bin
|
cd tmp
|
||||||
cd tmp
|
export PARALLEL_SHELL=bin/bash
|
||||||
PARALLEL_SHELL=bin/bash par_nonall 'func() { cat <(echo bash only B); };export -f func; bin/parallel func ::: 1'
|
par_nonall 'echo test funcB
|
||||||
)
|
funcB() {
|
||||||
|
cat <(echo bash only B)
|
||||||
|
}
|
||||||
|
export -f funcB
|
||||||
|
export PARALLEL_SHELL=bin/bash
|
||||||
|
bin/parallel funcB ::: 1' 2>&1
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '### env_parallel echo :::: <(echo OK)'
|
echo '### env_parallel echo :::: <(echo OK)'
|
||||||
echo '(bash ksh zsh only)'
|
echo '(bash ksh mksh zsh only)'
|
||||||
echo
|
echo
|
||||||
par_nonall 'bin/env_parallel --install && echo install-OK' 2>&1
|
par_nonall 'bin/env_parallel --install && echo install-OK' 2>&1
|
||||||
par_nonall 'env_parallel echo env_parallel ::: run-OK' 2>&1
|
par_nonall 'env_parallel echo env_parallel ::: run-OK' 2>&1
|
||||||
par_nonall 'env_parallel echo reading from process substitution :::: <(echo OK)' |
|
# csh on NetBSD does not support process substitution
|
||||||
# csh on NetBSD does not support process substitution
|
par_nonall 'env_parallel echo reading from process substitution :::: <(echo OK)' 2>&1 |
|
||||||
grep -v ': /tmp/.*: No such file or directory'
|
grep -v ': /tmp/.*: No such file or directory'
|
||||||
|
|
||||||
|
# Test empty command name in process list
|
||||||
|
test_empty_cmd() {
|
||||||
|
echo '### Test if empty command name in process list causes problems'
|
||||||
|
perl -e '$0=" ";sleep 1000' &
|
||||||
|
pid=$!
|
||||||
|
parallel echo ::: OK_with_empty_cmd
|
||||||
|
kill $pid
|
||||||
|
}
|
||||||
|
export -f test_empty_cmd
|
||||||
|
export PARALLEL_SHELL=bin/bash
|
||||||
|
PARALLEL='--env test_empty_cmd' par_nonall test_empty_cmd 2>&1
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '### parset arr seq ::: 2 3 4'
|
echo '### parset arr seq ::: 2 3 4'
|
||||||
echo '(bash ksh zsh only)'
|
echo '(bash ksh mksh zsh only)'
|
||||||
echo
|
echo
|
||||||
par_nonall 'parset arr seq ::: 2 3 4; echo ${arr[*]}' 2>&1
|
par_nonall 'parset arr seq ::: 2 3 4; echo ${arr[*]}' 2>&1
|
||||||
echo '### env_parset arr seq ::: 2 3 4'
|
echo '### env_parset arr seq ::: 2 3 4'
|
||||||
|
@ -114,14 +158,16 @@ doit() {
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo '### parset var1,var2,var3 seq ::: 2 3 4'
|
echo '### parset var1,var2,var3 seq ::: 2 3 4'
|
||||||
echo '(bash ksh zsh ash dash only)'
|
echo '(bash ksh mksh zsh ash dash only)'
|
||||||
echo
|
echo
|
||||||
par_nonall 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' 2>&1
|
par_nonall 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' 2>&1
|
||||||
echo '### env_parset var1,var2,var3 seq ::: 2 3 4'
|
echo '### env_parset var1,var2,var3 seq ::: 2 3 4'
|
||||||
par_nonall 'start=2; env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' 2>&1
|
par_nonall 'start=2; env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' 2>&1
|
||||||
|
EOF
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
env_parallel -u -Sredhat.polarhome.com doit ::: 1
|
env_parallel -u -S$MASTER doit ::: 1
|
||||||
|
|
||||||
# eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }'
|
# eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }'
|
||||||
# env_parallel myfunc ::: a | wc # OK
|
# env_parallel myfunc ::: a | wc # OK
|
||||||
|
|
|
@ -13,7 +13,7 @@ echo 'ssh "$@"; echo "$@" >>/tmp/myssh2-run' >/tmp/myssh2
|
||||||
chmod 755 /tmp/myssh1 /tmp/myssh2
|
chmod 755 /tmp/myssh1 /tmp/myssh2
|
||||||
seq 1 100 | parallel --sshdelay 0.03 --retries 10 --sshlogin "/tmp/myssh1 $SSHLOGIN1,/tmp/myssh2 $SSHLOGIN2" -k echo
|
seq 1 100 | parallel --sshdelay 0.03 --retries 10 --sshlogin "/tmp/myssh1 $SSHLOGIN1,/tmp/myssh2 $SSHLOGIN2" -k echo
|
||||||
|
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/\;s/\$SSHLOGIN3/$SSHLOGIN3/ | parallel -vj3 -k -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/\;s/\$SSHLOGIN3/$SSHLOGIN3/ | parallel -vj3 -k -L1 -r
|
||||||
echo '### test --timeout --retries'
|
echo '### test --timeout --retries'
|
||||||
parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 $SSHLOGIN1 $SSHLOGIN2 $SSHLOGIN3
|
parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 $SSHLOGIN1 $SSHLOGIN2 $SSHLOGIN3
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,8 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/
|
||||||
s/,[a-z]*,\d+.\d+,\d+.\d+/,:,000000000.000,0.000/g;
|
s/,[a-z]*,\d+.\d+,\d+.\d+/,:,000000000.000,0.000/g;
|
||||||
# /usr/bin/time -f %e
|
# /usr/bin/time -f %e
|
||||||
s/^(\d+)\.\d+$/$1/;
|
s/^(\d+)\.\d+$/$1/;
|
||||||
# Base 64 string
|
# Base 64 string with quotes
|
||||||
s:[\\+/a-z0-9=]{50,}:BASE64:ig;
|
s:['"'"'"\\+/a-z0-9=]{50,}:BASE64:ig;
|
||||||
# --workdir ...
|
# --workdir ...
|
||||||
s:parallel/tmp/aspire-\d+-1:TMPWORKDIR:g;
|
s:parallel/tmp/aspire-\d+-1:TMPWORKDIR:g;
|
||||||
# + cat ... | (Bash outputs these in random order)
|
# + cat ... | (Bash outputs these in random order)
|
||||||
|
@ -80,7 +80,11 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/
|
||||||
s/cat: input_file: No such file or directory\n//;
|
s/cat: input_file: No such file or directory\n//;
|
||||||
s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{};
|
s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{};
|
||||||
s{rsync error: some files/attrs were not transferred .*\n}{};
|
s{rsync error: some files/attrs were not transferred .*\n}{};
|
||||||
|
s{.* GtkDialog .*\n}{};
|
||||||
' |
|
' |
|
||||||
|
perl -ne '/GTK2_RC_FILES/ and next;
|
||||||
|
/GTK_RC_FILES/ and next;
|
||||||
|
print' |
|
||||||
uniq
|
uniq
|
||||||
# 3+3 .par files (from --files), 1 .tms-file from tmux attach
|
# 3+3 .par files (from --files), 1 .tms-file from tmux attach
|
||||||
find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | wc -l
|
find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | wc -l
|
||||||
|
|
|
@ -1,31 +1,13 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# -L1 will join lines ending in ' '
|
# -L1 will join lines ending in ' '
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test mutex. This should not mix output';
|
echo '### Test mutex. This should not mix output';
|
||||||
parallel --semaphore --id mutex -u seq 1 10 '|' pv -qL 20;
|
parallel --semaphore --id mutex -u seq 1 10 '|' pv -qL 20;
|
||||||
parallel --semaphore --id mutex -u seq 11 20 '|' pv -qL 100;
|
parallel --semaphore --id mutex -u seq 11 20 '|' pv -qL 100;
|
||||||
parallel --semaphore --id mutex --wait;
|
parallel --semaphore --id mutex --wait;
|
||||||
echo done
|
echo done
|
||||||
|
|
||||||
echo '### Test semaphore 2 jobs running simultaneously'
|
|
||||||
parallel --semaphore --id 2jobs -u -j2 'echo job1a 1; sleep 1; echo job1b 3';
|
|
||||||
sleep 0.2;
|
|
||||||
parallel --semaphore --id 2jobs -u -j2 'echo job2a 2; sleep 1; echo job2b 5';
|
|
||||||
sleep 0.2;
|
|
||||||
parallel --semaphore --id 2jobs -u -j2 'echo job3a 4; sleep 1; echo job3b 6';
|
|
||||||
parallel --semaphore --id 2jobs --wait;
|
|
||||||
echo done
|
|
||||||
|
|
||||||
echo '### Test if parallel invoked as sem will run parallel --semaphore'
|
|
||||||
sem --id as_sem -u -j2 'echo job1a 1; sleep 1; echo job1b 3';
|
|
||||||
sleep 0.2;
|
|
||||||
sem --id as_sem -u -j2 'echo job2a 2; sleep 1; echo job2b 5';
|
|
||||||
sleep 0.2;
|
|
||||||
sem --id as_sem -u -j2 'echo job3a 4; sleep 1; echo job3b 6';
|
|
||||||
sem --id as_sem --wait;
|
|
||||||
echo done
|
|
||||||
|
|
||||||
echo '### Test similar example as from man page - run 2 jobs simultaneously'
|
echo '### Test similar example as from man page - run 2 jobs simultaneously'
|
||||||
echo 'Expect done: 1 2 5 3 4'
|
echo 'Expect done: 1 2 5 3 4'
|
||||||
for i in 5 1 2 3 4 ; do
|
for i in 5 1 2 3 4 ; do
|
||||||
|
|
|
@ -92,7 +92,7 @@ par_newline_on_commandline() {
|
||||||
|
|
||||||
par_showtables() {
|
par_showtables() {
|
||||||
echo "### Test --show-tables"
|
echo "### Test --show-tables"
|
||||||
sql --show-tables :oraunittest | sort
|
sql --show-tables :oraunittest | LC_ALL=C sort
|
||||||
}
|
}
|
||||||
|
|
||||||
par_showdatabases() {
|
par_showdatabases() {
|
||||||
|
|
|
@ -8,7 +8,7 @@ SSHLOGIN2=parallel@$SERVER2
|
||||||
export PARALLEL=-j0
|
export PARALLEL=-j0
|
||||||
#export PARALLEL="--sshdelay 0.3"
|
#export PARALLEL="--sshdelay 0.3"
|
||||||
# Make sure sort order is the same
|
# Make sure sort order is the same
|
||||||
export LANG=C
|
export LC_ALL=C
|
||||||
|
|
||||||
echo '### Test --transfer --return --cleanup'
|
echo '### Test --transfer --return --cleanup'
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ stdout ssh $SSHLOGIN1 ls 'tmp/parallel.file*' || echo OK
|
||||||
stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK
|
stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK
|
||||||
echo 'Input for ssh'
|
echo 'Input for ssh'
|
||||||
cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' |
|
cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' |
|
||||||
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-zA-Z0-9/\\+=]{500,}:base64:;'
|
perl -pe 's/\S*parallel-server\S*/one-server/;s:\S[a-zA-Z0-9/\\+=]{500,}\S:base64:;'
|
||||||
rm /tmp/myssh1-run /tmp/myssh2-run
|
rm /tmp/myssh1-run /tmp/myssh2-run
|
||||||
|
|
||||||
rm -rf /tmp/parallel.file*
|
rm -rf /tmp/parallel.file*
|
||||||
|
|
|
@ -27,7 +27,7 @@ seq 1 13 | parallel echo {} '>' parallel_{}.test
|
||||||
|
|
||||||
ls parallel_*.test | parallel -j+0 --trc {.}.out --bf my_script \
|
ls parallel_*.test | parallel -j+0 --trc {.}.out --bf my_script \
|
||||||
-S $SSHLOGIN1,$SSHLOGIN2,: "./my_script {} > {.}.out"
|
-S $SSHLOGIN1,$SSHLOGIN2,: "./my_script {} > {.}.out"
|
||||||
cat parallel_*.test parallel_*.out
|
ls parallel_*.test parallel_*.out | LC_ALL=C sort | xargs cat
|
||||||
|
|
||||||
## Broken since 2013-03-23
|
## Broken since 2013-03-23
|
||||||
## rm -rf tmp
|
## rm -rf tmp
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test of --eta'
|
echo '### Test of --eta'
|
||||||
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
|
seq 1 10 | stdout parallel --eta "sleep 1; echo {}" | wc -l
|
||||||
|
|
||||||
|
|
|
@ -10,34 +10,34 @@ echo $SERVER2 >~/.parallel/sshloginfile
|
||||||
echo '### Test --wd newtempdir/newdir/tmp/ with space dirs';
|
echo '### Test --wd newtempdir/newdir/tmp/ with space dirs';
|
||||||
ssh $SERVER2 rm -rf newtempdir;
|
ssh $SERVER2 rm -rf newtempdir;
|
||||||
stdout parallel -j9 -k --wd newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.6 -S .. -v echo ">"{}.6 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg';
|
stdout parallel -j9 -k --wd newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.6 -S .. -v echo ">"{}.6 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg';
|
||||||
find . -name '*.6' | sort
|
find . -name '*.6' | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs';
|
echo '### Test --wd /tmp/newtempdir/newdir/tmp/ with space dirs';
|
||||||
ssh $SERVER2 rm -rf /tmp/newtempdir;
|
ssh $SERVER2 rm -rf /tmp/newtempdir;
|
||||||
stdout parallel -j9 -k --wd /tmp/newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.7 -S .. -v echo ">"{}.7 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg';
|
stdout parallel -j9 -k --wd /tmp/newtempdir/newdir/tmp/ --basefile 1-col.txt --trc {}.7 -S .. -v echo ">"{}.7 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg';
|
||||||
find . -name '*.7' | sort
|
find . -name '*.7' | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --workdir ...'
|
echo '### Test --workdir ...'
|
||||||
parallel -j9 -k --workdir ... --trc {}.1 -S .. echo ">"{}.1 ::: 2-col.txt
|
parallel -j9 -k --workdir ... --trc {}.1 -S .. echo ">"{}.1 ::: 2-col.txt
|
||||||
find . -name '*.1' | sort
|
find . -name '*.1' | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --wd ...'
|
echo '### Test --wd ...'
|
||||||
parallel -k --wd ... --trc {}.2 -S .. -v echo ">"{}.2 ::: 2-col.txt
|
parallel -k --wd ... --trc {}.2 -S .. -v echo ">"{}.2 ::: 2-col.txt
|
||||||
find . -name '*.2' | sort
|
find . -name '*.2' | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --wd ... with space dirs'
|
echo '### Test --wd ... with space dirs'
|
||||||
stdout parallel -j9 -k --wd ... --trc {}.3 -S .. -v echo ">"{}.3 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg'
|
stdout parallel -j9 -k --wd ... --trc {}.3 -S .. -v echo ">"{}.3 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg'
|
||||||
# A few rmdir errors are OK as we have multiple files in the same dirs
|
# A few rmdir errors are OK as we have multiple files in the same dirs
|
||||||
find . -name '*.3' | sort
|
find . -name '*.3' | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --wd tmpdir'
|
echo '### Test --wd tmpdir'
|
||||||
parallel -j9 -k --wd tmpdir --basefile 1-col.txt --trc {}.4 -S .. -v echo ">"{}.4 ::: 2-col.txt
|
parallel -j9 -k --wd tmpdir --basefile 1-col.txt --trc {}.4 -S .. -v echo ">"{}.4 ::: 2-col.txt
|
||||||
find . -name '*.4' | sort
|
find . -name '*.4' | LC_ALL=C sort
|
||||||
|
|
||||||
echo '### Test --wd /tmp/ with space dirs'
|
echo '### Test --wd /tmp/ with space dirs'
|
||||||
stdout parallel -k -j9 --wd /tmp/ --basefile 1-col.txt --trc {}.5 -S .. -v echo ">"{}.5 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg'
|
stdout parallel -k -j9 --wd /tmp/ --basefile 1-col.txt --trc {}.5 -S .. -v echo ">"{}.5 ::: './ ab/c"d/ef g' ' ab/c"d/efg' ./b/bar ./b/foo "./ ab /c' d/ ef\"g" ./2-col.txt './a b/cd / ef/efg'
|
||||||
# A few rmdir errors are OK as we have multiple files in the same dirs
|
# A few rmdir errors are OK as we have multiple files in the same dirs
|
||||||
find . -name '*.5' | sort
|
find . -name '*.5' | LC_ALL=C sort
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
rm -rf tmp
|
rm -rf tmp
|
||||||
|
|
|
@ -4,7 +4,7 @@ SERVER1=parallel-server3
|
||||||
SERVER2=parallel-server1
|
SERVER2=parallel-server1
|
||||||
|
|
||||||
# -L1 will join lines ending in ' '
|
# -L1 will join lines ending in ' '
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin'
|
echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin'
|
||||||
seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null"
|
seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null"
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ SSHLOGIN1=parallel@$SERVER1
|
||||||
SSHLOGIN2=parallel@$SERVER2
|
SSHLOGIN2=parallel@$SERVER2
|
||||||
|
|
||||||
# -L1 will join lines ending in ' '
|
# -L1 will join lines ending in ' '
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/\;s/\$SSHLOGIN1/$SSHLOGIN1/\;s/\$SSHLOGIN2/$SSHLOGIN2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r
|
||||||
echo '### Test --onall';
|
echo '### Test --onall';
|
||||||
parallel --onall -S $SSHLOGIN1,$SSHLOGIN2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2
|
parallel --onall -S $SSHLOGIN1,$SSHLOGIN2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c ::: 1 2
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
SERVER1=parallel-server1
|
SERVER1=parallel-server1
|
||||||
SERVER2=parallel-server2
|
SERVER2=parallel-server2
|
||||||
|
|
||||||
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 -r | perl -pe 's/(PARALLEL_PID....)\d+/$1XXXXX/g'
|
||||||
echo '### Test --return of weirdly named file'
|
echo '### Test --return of weirdly named file'
|
||||||
stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' |
|
stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' |
|
||||||
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
|
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
|
||||||
|
|
|
@ -64,10 +64,9 @@ par_shebang with
|
||||||
par_shebang /usr/bin/perl -w ./shebang-wrap-opt options
|
par_shebang /usr/bin/perl -w ./shebang-wrap-opt options
|
||||||
par_shebang options
|
par_shebang options
|
||||||
par_shellshock_bug par_shellshock_bug 2>&1
|
par_shellshock_bug par_shellshock_bug 2>&1
|
||||||
par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env _
|
par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env name
|
||||||
par_shellshock_bug Non-shellshock-hardened to non-shellshock-hardened
|
par_shellshock_bug Non-shellshock-hardened to non-shellshock-hardened
|
||||||
par_shellshock_bug Function non-shellshock-hardened
|
par_shellshock_bug Function non-shellshock-hardened
|
||||||
par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env _
|
par_shellshock_bug bug #43358: shellshock breaks exporting functions using --env name
|
||||||
par_shellshock_bug Non-shellshock-hardened to shellshock-hardened
|
par_shellshock_bug Non-shellshock-hardened to shellshock-hardened
|
||||||
par_shellshock_bug parallel: Warning: Shell functions may not be supported in /bin/sh.
|
|
||||||
par_shellshock_bug Function shellshock-hardened
|
par_shellshock_bug Function shellshock-hardened
|
||||||
|
|
|
@ -1,503 +0,0 @@
|
||||||
### Test installation missing pod2*
|
|
||||||
make[0]: Entering directory '~/privat/parallel'
|
|
||||||
make dist-gzip am__post_remove_distdir='@:'
|
|
||||||
make[0]: Entering directory '~/privat/parallel'
|
|
||||||
if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi
|
|
||||||
test -d "parallel-00000000" || mkdir "parallel-00000000"
|
|
||||||
(cd src && make top_distdir=../parallel-00000000 distdir=../parallel-00000000/src \
|
|
||||||
am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
|
|
||||||
make[0]: Entering directory '~/privat/parallel/src'
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_design.pod > ./parallel_design.7n \
|
|
||||||
&& mv ./parallel_design.7n ./parallel_design.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_design.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_design.7
|
|
||||||
make[0]: Leaving directory '~/privat/parallel/src'
|
|
||||||
test -n "" \
|
|
||||||
|| find "parallel-00000000" -type d ! -perm -755 \
|
|
||||||
-exec chmod u+rwx,go+rx {} \; -o \
|
|
||||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
|
||||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
|
||||||
! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \
|
|
||||||
|| chmod -R a+r "parallel-00000000"
|
|
||||||
tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >parallel-00000000.tar.gz
|
|
||||||
make[0]: Leaving directory '~/privat/parallel'
|
|
||||||
if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi
|
|
||||||
make[0]: Leaving directory '~/privat/parallel'
|
|
||||||
checking for a BSD-compatible install... /usr/bin/install -c
|
|
||||||
checking whether build environment is sane... yes
|
|
||||||
checking for a thread-safe mkdir -p... /bin/mkdir -p
|
|
||||||
checking for gawk... gawk
|
|
||||||
checking whether make sets $(MAKE)... yes
|
|
||||||
checking whether make supports nested variables... yes
|
|
||||||
checking whether ln -s works... yes
|
|
||||||
checking that generated files are newer than configure... done
|
|
||||||
configure: creating ./config.status
|
|
||||||
config.status: creating Makefile
|
|
||||||
config.status: creating src/Makefile
|
|
||||||
config.status: creating config.h
|
|
||||||
Making install in src
|
|
||||||
make[0]: Entering directory '/tmp/parallel-00000000/src'
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./parallel.pod > ./parallel.1n \
|
|
||||||
&& mv ./parallel.1n ./parallel.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./env_parallel.pod > ./env_parallel.1n \
|
|
||||||
&& mv ./env_parallel.1n ./env_parallel.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old env_parallel.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old env_parallel.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./sem.pod > ./sem.1n \
|
|
||||||
&& mv ./sem.1n ./sem.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old sem.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old sem.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./sql > ./sql.1n \
|
|
||||||
&& mv ./sql.1n ./sql.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old sql.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old sql.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./niceload.pod > ./niceload.1n \
|
|
||||||
&& mv ./niceload.1n ./niceload.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old niceload.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old niceload.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \
|
|
||||||
&& mv ./parallel_tutorial.7n ./parallel_tutorial.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_tutorial.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_tutorial.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_book.pod > ./parallel_book.7n \
|
|
||||||
&& mv ./parallel_book.7n ./parallel_book.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_book.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_book.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_design.pod > ./parallel_design.7n \
|
|
||||||
&& mv ./parallel_design.7n ./parallel_design.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_design.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_design.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_alternatives.pod > ./parallel_alternatives.7n \
|
|
||||||
&& mv ./parallel_alternatives.7n ./parallel_alternatives.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_alternatives.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./parcat.pod > ./parcat.1n \
|
|
||||||
&& mv ./parcat.1n ./parcat.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parcat.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parcat.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./parset.pod > ./parset.1n \
|
|
||||||
&& mv ./parset.1n ./parset.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parset.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parset.1
|
|
||||||
pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \
|
|
||||||
&& mv ./parallel.htmln ./parallel.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel with environment" ./env_parallel.pod > ./env_parallel.htmln \
|
|
||||||
&& mv ./env_parallel.htmln ./env_parallel.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old env_parallel.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old env_parallel.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \
|
|
||||||
&& mv ./parallel_tutorial.htmln ./parallel_tutorial.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_tutorial.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_tutorial.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel book" ./parallel_book.pod > ./parallel_book.htmln \
|
|
||||||
&& mv ./parallel_book.htmln ./parallel_book.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_book.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_book.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \
|
|
||||||
&& mv ./parallel_design.htmln ./parallel_design.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_design.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_design.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel alternatives" ./parallel_alternatives.pod > ./parallel_alternatives.htmln \
|
|
||||||
&& mv ./parallel_alternatives.htmln ./parallel_alternatives.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_alternatives.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_alternatives.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \
|
|
||||||
&& mv ./sem.htmln ./sem.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old sem.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old sem.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU SQL" ./sql > ./sql.htmln \
|
|
||||||
&& mv ./sql.htmln ./sql.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old sql.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old sql.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \
|
|
||||||
&& mv ./niceload.htmln ./niceload.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old niceload.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old niceload.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \
|
|
||||||
&& mv ./parcat.htmln ./parcat.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parcat.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parcat.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \
|
|
||||||
&& mv ./parset.htmln ./parset.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parset.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parset.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2texi --output=./parallel.texi ./parallel.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel.texi
|
|
||||||
pod2texi --output=./env_parallel.texi ./env_parallel.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old env_parallel.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old env_parallel.texi
|
|
||||||
pod2texi --output=./sem.texi ./sem.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old sem.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old sem.texi
|
|
||||||
pod2texi --output=./sql.texi ./sql \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old sql.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old sql.texi
|
|
||||||
pod2texi --output=./niceload.texi ./niceload.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old niceload.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old niceload.texi
|
|
||||||
pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_tutorial.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_tutorial.texi
|
|
||||||
pod2texi --output=./parallel_book.texi ./parallel_book.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_book.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_book.texi
|
|
||||||
pod2texi --output=./parallel_design.texi ./parallel_design.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_design.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_design.texi
|
|
||||||
pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_alternatives.texi
|
|
||||||
pod2texi --output=./parcat.texi ./parcat.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parcat.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parcat.texi
|
|
||||||
pod2texi --output=./parset.texi ./parset.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parset.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parset.texi
|
|
||||||
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel.pdf
|
|
||||||
pod2pdf --output-file ./env_parallel.pdf ./env_parallel.pod --title "GNU Parallel with environment" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old env_parallel.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old env_parallel.pdf
|
|
||||||
pod2pdf --output-file ./sem.pdf ./sem.pod --title "GNU sem" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old sem.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old sem.pdf
|
|
||||||
pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old sql.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old sql.pdf
|
|
||||||
pod2pdf --output-file ./niceload.pdf ./niceload.pod --title "GNU niceload" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old niceload.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old niceload.pdf
|
|
||||||
pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "GNU Parallel Tutorial" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_tutorial.pdf
|
|
||||||
pod2pdf --output-file ./parallel_book.pdf ./parallel_book.pod --title "GNU Parallel Book" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_book.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_book.pdf
|
|
||||||
pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_design.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_design.pdf
|
|
||||||
pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --title "GNU Parallel alternatives" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
|
|
||||||
pod2pdf --output-file ./parcat.pdf ./parcat.pod --title "GNU parcat" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parcat.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parcat.pdf
|
|
||||||
pod2pdf --output-file ./parset.pdf ./parset.pod --title "GNU parset" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parset.pdf
|
|
||||||
make[0]: Entering directory '/tmp/parallel-00000000/src'
|
|
||||||
/bin/mkdir -p '/usr/local/bin'
|
|
||||||
/usr/bin/install -c parallel sql niceload parcat parset env_parallel env_parallel.ash env_parallel.bash env_parallel.csh env_parallel.dash env_parallel.fish env_parallel.ksh env_parallel.pdksh env_parallel.sh env_parallel.tcsh env_parallel.zsh '/usr/local/bin'
|
|
||||||
make install-exec-hook
|
|
||||||
make[0]: Entering directory '/tmp/parallel-00000000/src'
|
|
||||||
rm /usr/local/bin/sem || true
|
|
||||||
ln -s parallel /usr/local/bin/sem
|
|
||||||
make[0]: Leaving directory '/tmp/parallel-00000000/src'
|
|
||||||
pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \
|
|
||||||
&& mv ./parallel.htmln ./parallel.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel with environment" ./env_parallel.pod > ./env_parallel.htmln \
|
|
||||||
&& mv ./env_parallel.htmln ./env_parallel.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old env_parallel.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old env_parallel.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel tutorial" ./parallel_tutorial.pod > ./parallel_tutorial.htmln \
|
|
||||||
&& mv ./parallel_tutorial.htmln ./parallel_tutorial.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_tutorial.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_tutorial.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel book" ./parallel_book.pod > ./parallel_book.htmln \
|
|
||||||
&& mv ./parallel_book.htmln ./parallel_book.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_book.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_book.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel design" ./parallel_design.pod > ./parallel_design.htmln \
|
|
||||||
&& mv ./parallel_design.htmln ./parallel_design.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_design.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_design.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU Parallel alternatives" ./parallel_alternatives.pod > ./parallel_alternatives.htmln \
|
|
||||||
&& mv ./parallel_alternatives.htmln ./parallel_alternatives.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parallel_alternatives.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parallel_alternatives.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "sem (GNU Parallel)" ./sem.pod > ./sem.htmln \
|
|
||||||
&& mv ./sem.htmln ./sem.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old sem.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old sem.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU SQL" ./sql > ./sql.htmln \
|
|
||||||
&& mv ./sql.htmln ./sql.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old sql.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old sql.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU niceload" ./niceload.pod > ./niceload.htmln \
|
|
||||||
&& mv ./niceload.htmln ./niceload.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old niceload.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old niceload.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU parcat" ./parcat.pod > ./parcat.htmln \
|
|
||||||
&& mv ./parcat.htmln ./parcat.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parcat.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parcat.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2html --title "GNU parset" ./parset.pod > ./parset.htmln \
|
|
||||||
&& mv ./parset.htmln ./parset.html \
|
|
||||||
|| echo "Warning: pod2html not found. Using old parset.html"
|
|
||||||
/bin/bash: pod2html: command not found
|
|
||||||
Warning: pod2html not found. Using old parset.html
|
|
||||||
rm -f ./pod2htm*
|
|
||||||
pod2texi --output=./parallel.texi ./parallel.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel.texi
|
|
||||||
pod2texi --output=./env_parallel.texi ./env_parallel.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old env_parallel.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old env_parallel.texi
|
|
||||||
pod2texi --output=./sem.texi ./sem.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old sem.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old sem.texi
|
|
||||||
pod2texi --output=./sql.texi ./sql \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old sql.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old sql.texi
|
|
||||||
pod2texi --output=./niceload.texi ./niceload.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old niceload.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old niceload.texi
|
|
||||||
pod2texi --output=./parallel_tutorial.texi ./parallel_tutorial.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_tutorial.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_tutorial.texi
|
|
||||||
pod2texi --output=./parallel_book.texi ./parallel_book.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_book.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_book.texi
|
|
||||||
pod2texi --output=./parallel_design.texi ./parallel_design.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_design.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_design.texi
|
|
||||||
pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parallel_alternatives.texi
|
|
||||||
pod2texi --output=./parcat.texi ./parcat.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parcat.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parcat.texi
|
|
||||||
pod2texi --output=./parset.texi ./parset.pod \
|
|
||||||
|| echo "Warning: pod2texi not found. Using old parset.texi"
|
|
||||||
/bin/bash: pod2texi: command not found
|
|
||||||
Warning: pod2texi not found. Using old parset.texi
|
|
||||||
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel.pdf
|
|
||||||
pod2pdf --output-file ./env_parallel.pdf ./env_parallel.pod --title "GNU Parallel with environment" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old env_parallel.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old env_parallel.pdf
|
|
||||||
pod2pdf --output-file ./sem.pdf ./sem.pod --title "GNU sem" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old sem.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old sem.pdf
|
|
||||||
pod2pdf --output-file ./sql.pdf ./sql --title "GNU SQL" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old sql.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old sql.pdf
|
|
||||||
pod2pdf --output-file ./niceload.pdf ./niceload.pod --title "GNU niceload" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old niceload.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old niceload.pdf
|
|
||||||
pod2pdf --output-file ./parallel_tutorial.pdf ./parallel_tutorial.pod --title "GNU Parallel Tutorial" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_tutorial.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_tutorial.pdf
|
|
||||||
pod2pdf --output-file ./parallel_book.pdf ./parallel_book.pod --title "GNU Parallel Book" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_book.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_book.pdf
|
|
||||||
pod2pdf --output-file ./parallel_design.pdf ./parallel_design.pod --title "GNU Parallel Design" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_design.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_design.pdf
|
|
||||||
pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --title "GNU Parallel alternatives" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
|
|
||||||
pod2pdf --output-file ./parcat.pdf ./parcat.pod --title "GNU parcat" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parcat.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parcat.pdf
|
|
||||||
pod2pdf --output-file ./parset.pdf ./parset.pod --title "GNU parset" \
|
|
||||||
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
|
|
||||||
/bin/bash: pod2pdf: command not found
|
|
||||||
Warning: pod2pdf not found. Using old parset.pdf
|
|
||||||
/bin/mkdir -p '/usr/local/share/doc/parallel'
|
|
||||||
/usr/bin/install -c -m 644 parallel.html env_parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel_book.html parallel_design.html parallel_alternatives.html parcat.html parset.html parallel.texi env_parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel_book.texi parallel_design.texi parallel_alternatives.texi parcat.texi parset.texi parallel.pdf env_parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_book.pdf parallel_design.pdf parallel_alternatives.pdf parcat.pdf parset.pdf '/usr/local/share/doc/parallel'
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./parallel.pod > ./parallel.1n \
|
|
||||||
&& mv ./parallel.1n ./parallel.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./env_parallel.pod > ./env_parallel.1n \
|
|
||||||
&& mv ./env_parallel.1n ./env_parallel.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old env_parallel.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old env_parallel.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./sem.pod > ./sem.1n \
|
|
||||||
&& mv ./sem.1n ./sem.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old sem.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old sem.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./sql > ./sql.1n \
|
|
||||||
&& mv ./sql.1n ./sql.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old sql.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old sql.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./niceload.pod > ./niceload.1n \
|
|
||||||
&& mv ./niceload.1n ./niceload.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old niceload.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old niceload.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_tutorial.pod > ./parallel_tutorial.7n \
|
|
||||||
&& mv ./parallel_tutorial.7n ./parallel_tutorial.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_tutorial.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_tutorial.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_book.pod > ./parallel_book.7n \
|
|
||||||
&& mv ./parallel_book.7n ./parallel_book.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_book.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_book.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_design.pod > ./parallel_design.7n \
|
|
||||||
&& mv ./parallel_design.7n ./parallel_design.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_design.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_design.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=7 ./parallel_alternatives.pod > ./parallel_alternatives.7n \
|
|
||||||
&& mv ./parallel_alternatives.7n ./parallel_alternatives.7 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parallel_alternatives.7
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./parcat.pod > ./parcat.1n \
|
|
||||||
&& mv ./parcat.1n ./parcat.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parcat.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parcat.1
|
|
||||||
pod2man --release='00000000' --center='parallel' \
|
|
||||||
--section=1 ./parset.pod > ./parset.1n \
|
|
||||||
&& mv ./parset.1n ./parset.1 \
|
|
||||||
|| echo "Warning: pod2man not found. Using old parset.1"
|
|
||||||
/bin/bash: pod2man: command not found
|
|
||||||
Warning: pod2man not found. Using old parset.1
|
|
||||||
/bin/mkdir -p '/usr/local/share/man/man1'
|
|
||||||
/usr/bin/install -c -m 644 parallel.1 env_parallel.1 sem.1 sql.1 niceload.1 parcat.1 parset.1 '/usr/local/share/man/man1'
|
|
||||||
/bin/mkdir -p '/usr/local/share/man/man7'
|
|
||||||
/usr/bin/install -c -m 644 parallel_tutorial.7 parallel_book.7 parallel_design.7 parallel_alternatives.7 '/usr/local/share/man/man7'
|
|
||||||
make[0]: Leaving directory '/tmp/parallel-00000000/src'
|
|
||||||
make[0]: Leaving directory '/tmp/parallel-00000000/src'
|
|
||||||
make[0]: Entering directory '/tmp/parallel-00000000'
|
|
||||||
make[0]: Entering directory '/tmp/parallel-00000000'
|
|
||||||
make[0]: Nothing to be done for 'install-exec-am'.
|
|
||||||
make[0]: Nothing to be done for 'install-data-am'.
|
|
||||||
make[0]: Leaving directory '/tmp/parallel-00000000'
|
|
||||||
make[0]: Leaving directory '/tmp/parallel-00000000'
|
|
|
@ -389,7 +389,7 @@ d
|
||||||
(echo a_b' ';echo c;echo d) | xargs -L1 echo
|
(echo a_b' ';echo c;echo d) | xargs -L1 echo
|
||||||
a_b c
|
a_b c
|
||||||
d
|
d
|
||||||
echo '### xargs -L2 echo'
|
echo '### xargs -L2 echo'
|
||||||
### xargs -L2 echo
|
### xargs -L2 echo
|
||||||
(echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo
|
(echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo
|
||||||
a_b c d
|
a_b c d
|
||||||
|
@ -400,7 +400,7 @@ e
|
||||||
(echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo
|
(echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo
|
||||||
a_b c d
|
a_b c d
|
||||||
e
|
e
|
||||||
echo '### xargs -l echo'
|
echo '### xargs -l echo'
|
||||||
### xargs -l echo
|
### xargs -l echo
|
||||||
(echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong
|
(echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong
|
||||||
a_b c
|
a_b c
|
||||||
|
@ -414,7 +414,7 @@ e
|
||||||
a_b c
|
a_b c
|
||||||
d
|
d
|
||||||
e
|
e
|
||||||
echo '### xargs -l2 echo'
|
echo '### xargs -l2 echo'
|
||||||
### xargs -l2 echo
|
### xargs -l2 echo
|
||||||
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo
|
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo
|
||||||
a_b c d
|
a_b c d
|
||||||
|
@ -425,7 +425,7 @@ e
|
||||||
(echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo
|
(echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo
|
||||||
a_b c d
|
a_b c d
|
||||||
e
|
e
|
||||||
echo '### xargs -l1 echo'
|
echo '### xargs -l1 echo'
|
||||||
### xargs -l1 echo
|
### xargs -l1 echo
|
||||||
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo
|
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo
|
||||||
a_b c
|
a_b c
|
||||||
|
@ -439,7 +439,7 @@ e
|
||||||
a_b c
|
a_b c
|
||||||
d
|
d
|
||||||
e
|
e
|
||||||
echo '### xargs --max-lines=2 echo'
|
echo '### xargs --max-lines=2 echo'
|
||||||
### xargs --max-lines=2 echo
|
### xargs --max-lines=2 echo
|
||||||
(echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo
|
(echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo
|
||||||
a_b c d
|
a_b c d
|
||||||
|
@ -450,7 +450,7 @@ e
|
||||||
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo
|
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo
|
||||||
a_b c d
|
a_b c d
|
||||||
e
|
e
|
||||||
echo '### xargs --max-lines echo'
|
echo '### xargs --max-lines echo'
|
||||||
### xargs --max-lines echo
|
### xargs --max-lines echo
|
||||||
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong
|
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong
|
||||||
a_b c
|
a_b c
|
||||||
|
@ -464,7 +464,7 @@ e
|
||||||
a_b c
|
a_b c
|
||||||
d
|
d
|
||||||
e
|
e
|
||||||
echo '### test too long args'
|
echo '### test too long args'
|
||||||
### test too long args
|
### test too long args
|
||||||
perl -e 'print "z"x1000000' | parallel echo 2>&1
|
perl -e 'print "z"x1000000' | parallel echo 2>&1
|
||||||
parallel: Error: Command line too long (1000005 >= 131049) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
parallel: Error: Command line too long (1000005 >= 131049) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
||||||
|
@ -491,7 +491,7 @@ xargs: argument line too long
|
||||||
7 8
|
7 8
|
||||||
9 10
|
9 10
|
||||||
parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
|
||||||
echo '### Test -x'
|
echo '### Test -x'
|
||||||
### Test -x
|
### Test -x
|
||||||
(seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo
|
(seq 1 10; echo 12345; seq 12 15) | stdsort parallel -j1 -km -s 10 -x echo
|
||||||
1 2
|
1 2
|
||||||
|
@ -546,7 +546,7 @@ xargs: argument line too long
|
||||||
5 6
|
5 6
|
||||||
7 8
|
7 8
|
||||||
9 10
|
9 10
|
||||||
echo '### Test -a and --arg-file: Read input from file instead of stdin'
|
echo '### Test -a and --arg-file: Read input from file instead of stdin'
|
||||||
### Test -a and --arg-file: Read input from file instead of stdin
|
### Test -a and --arg-file: Read input from file instead of stdin
|
||||||
seq 1 10 >/tmp/parallel_$$-1; parallel -k -a /tmp/parallel_$$-1 echo; rm /tmp/parallel_$$-1
|
seq 1 10 >/tmp/parallel_$$-1; parallel -k -a /tmp/parallel_$$-1 echo; rm /tmp/parallel_$$-1
|
||||||
1
|
1
|
||||||
|
@ -570,7 +570,7 @@ xargs: argument line too long
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
10
|
10
|
||||||
echo '### Test -i and --replace: Replace with argument'
|
echo '### Test -i and --replace: Replace with argument'
|
||||||
### Test -i and --replace: Replace with argument
|
### Test -i and --replace: Replace with argument
|
||||||
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce
|
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce
|
||||||
replace
|
replace
|
||||||
|
@ -590,13 +590,13 @@ replace
|
||||||
replace
|
replace
|
||||||
(echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce
|
(echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce
|
||||||
replace
|
replace
|
||||||
echo '### Test -E: Artificial end-of-file'
|
echo '### Test -E: Artificial end-of-file'
|
||||||
### Test -E: Artificial end-of-file
|
### Test -E: Artificial end-of-file
|
||||||
(echo include this; echo END; echo not this) | parallel -k -E END echo
|
(echo include this; echo END; echo not this) | parallel -k -E END echo
|
||||||
include this
|
include this
|
||||||
(echo include this; echo END; echo not this) | parallel -k -EEND echo
|
(echo include this; echo END; echo not this) | parallel -k -EEND echo
|
||||||
include this
|
include this
|
||||||
echo '### Test -e and --eof: Artificial end-of-file'
|
echo '### Test -e and --eof: Artificial end-of-file'
|
||||||
### Test -e and --eof: Artificial end-of-file
|
### Test -e and --eof: Artificial end-of-file
|
||||||
(echo include this; echo END; echo not this) | parallel -k -e END echo
|
(echo include this; echo END; echo not this) | parallel -k -e END echo
|
||||||
include this
|
include this
|
||||||
|
@ -606,7 +606,7 @@ include this
|
||||||
include this
|
include this
|
||||||
(echo include this; echo END; echo not this) | parallel -k --eof END echo
|
(echo include this; echo END; echo not this) | parallel -k --eof END echo
|
||||||
include this
|
include this
|
||||||
echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)'
|
echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)'
|
||||||
### Test -n and --max-args: Max number of args per line (only with -X and -m)
|
### Test -n and --max-args: Max number of args per line (only with -X and -m)
|
||||||
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo
|
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo
|
||||||
line 1
|
line 1
|
||||||
|
@ -650,7 +650,7 @@ line 3
|
||||||
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo
|
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo
|
||||||
line 1 line 1
|
line 1 line 1
|
||||||
line 2
|
line 2
|
||||||
echo '### Test --max-procs and -P: Number of processes'
|
echo '### Test --max-procs and -P: Number of processes'
|
||||||
### Test --max-procs and -P: Number of processes
|
### Test --max-procs and -P: Number of processes
|
||||||
seq 1 10 | parallel -k --max-procs +0 echo max proc
|
seq 1 10 | parallel -k --max-procs +0 echo max proc
|
||||||
max proc 1
|
max proc 1
|
||||||
|
@ -674,7 +674,7 @@ max proc 10
|
||||||
200% proc 8
|
200% proc 8
|
||||||
200% proc 9
|
200% proc 9
|
||||||
200% proc 10
|
200% proc 10
|
||||||
echo '### Test --delimiter and -d: Delimiter instead of newline'
|
echo '### Test --delimiter and -d: Delimiter instead of newline'
|
||||||
### Test --delimiter and -d: Delimiter instead of newline
|
### Test --delimiter and -d: Delimiter instead of newline
|
||||||
echo '# Yes there is supposed to be an extra newline for -d N'
|
echo '# Yes there is supposed to be an extra newline for -d N'
|
||||||
# Yes there is supposed to be an extra newline for -d N
|
# Yes there is supposed to be an extra newline for -d N
|
||||||
|
@ -696,7 +696,7 @@ line 3
|
||||||
delimiter TAB line 1
|
delimiter TAB line 1
|
||||||
line 2
|
line 2
|
||||||
line 3
|
line 3
|
||||||
echo '### Test --max-chars and -s: Max number of chars in a line'
|
echo '### Test --max-chars and -s: Max number of chars in a line'
|
||||||
### Test --max-chars and -s: Max number of chars in a line
|
### Test --max-chars and -s: Max number of chars in a line
|
||||||
(echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo
|
(echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo
|
||||||
line 1 line 1
|
line 1 line 1
|
||||||
|
@ -704,11 +704,11 @@ line 2
|
||||||
(echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo
|
(echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo
|
||||||
line 1 line 1
|
line 1 line 1
|
||||||
line 2
|
line 2
|
||||||
echo '### Test --no-run-if-empty and -r: This should give no output'
|
echo '### Test --no-run-if-empty and -r: This should give no output'
|
||||||
### Test --no-run-if-empty and -r: This should give no output
|
### Test --no-run-if-empty and -r: This should give no output
|
||||||
echo " " | parallel -r echo
|
echo " " | parallel -r echo
|
||||||
echo " " | parallel --no-run-if-empty echo
|
echo " " | parallel --no-run-if-empty echo
|
||||||
echo '### Test --help and -h: Help output (just check we get the same amount of lines)'
|
echo '### Test --help and -h: Help output (just check we get the same amount of lines)'
|
||||||
### Test --help and -h: Help output (just check we get the same amount of lines)
|
### Test --help and -h: Help output (just check we get the same amount of lines)
|
||||||
echo Output from -h and --help
|
echo Output from -h and --help
|
||||||
Output from -h and --help
|
Output from -h and --help
|
||||||
|
@ -716,11 +716,11 @@ Output from -h and --help
|
||||||
37
|
37
|
||||||
parallel --help | wc -l
|
parallel --help | wc -l
|
||||||
37
|
37
|
||||||
echo '### Test --version: Version output (just check we get the same amount of lines)'
|
echo '### Test --version: Version output (just check we get the same amount of lines)'
|
||||||
### Test --version: Version output (just check we get the same amount of lines)
|
### Test --version: Version output (just check we get the same amount of lines)
|
||||||
parallel --version | wc -l
|
parallel --version | wc -l
|
||||||
11
|
10
|
||||||
echo '### Test --verbose and -t'
|
echo '### Test --verbose and -t'
|
||||||
### Test --verbose and -t
|
### Test --verbose and -t
|
||||||
(echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null
|
(echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null
|
||||||
echo bar
|
echo bar
|
||||||
|
@ -730,7 +730,7 @@ echo far
|
||||||
echo bar
|
echo bar
|
||||||
echo car
|
echo car
|
||||||
echo far
|
echo far
|
||||||
echo '### Test --show-limits'
|
echo '### Test --show-limits'
|
||||||
### Test --show-limits
|
### Test --show-limits
|
||||||
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
|
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
|
||||||
Maximal size of command: 131049
|
Maximal size of command: 131049
|
||||||
|
@ -750,11 +750,11 @@ Execution of will continue now, and it will try to read its input
|
||||||
and run commands; if this is not what you wanted to happen, please
|
and run commands; if this is not what you wanted to happen, please
|
||||||
press CTRL-D or CTRL-C
|
press CTRL-D or CTRL-C
|
||||||
bar car far
|
bar car far
|
||||||
echo '### Test empty line as input'
|
echo '### Test empty line as input'
|
||||||
### Test empty line as input
|
### Test empty line as input
|
||||||
echo | parallel echo empty input line
|
echo | parallel echo empty input line
|
||||||
empty input line
|
empty input line
|
||||||
echo '### Tests if (cat | sh) works'
|
echo '### Tests if (cat | sh) works'
|
||||||
### Tests if (cat | sh) works
|
### Tests if (cat | sh) works
|
||||||
perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort
|
perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort
|
||||||
a 1
|
a 1
|
||||||
|
@ -807,7 +807,7 @@ b 6
|
||||||
b 7
|
b 7
|
||||||
b 8
|
b 8
|
||||||
b 9
|
b 9
|
||||||
echo '### Test if xargs-mode works'
|
echo '### Test if xargs-mode works'
|
||||||
### Test if xargs-mode works
|
### Test if xargs-mode works
|
||||||
perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort
|
perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort
|
||||||
a 1
|
a 1
|
||||||
|
@ -860,12 +860,12 @@ b 6
|
||||||
b 7
|
b 7
|
||||||
b 8
|
b 8
|
||||||
b 9
|
b 9
|
||||||
echo '### Test -q'
|
echo '### Test -q'
|
||||||
### Test -q
|
### Test -q
|
||||||
parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i"
|
parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i"
|
||||||
a b
|
a b
|
||||||
h i
|
h i
|
||||||
echo '### Test -q {#}'
|
echo '### Test -q {#}'
|
||||||
### Test -q {#}
|
### Test -q {#}
|
||||||
parallel -kq echo {#} ::: a b
|
parallel -kq echo {#} ::: a b
|
||||||
1
|
1
|
||||||
|
@ -876,7 +876,7 @@ h i
|
||||||
parallel -kq echo {\\#} ::: a b
|
parallel -kq echo {\\#} ::: a b
|
||||||
{\#} a
|
{\#} a
|
||||||
{\#} b
|
{\#} b
|
||||||
echo '### Test long commands do not take up all memory'
|
echo '### Test long commands do not take up all memory'
|
||||||
### Test long commands do not take up all memory
|
### Test long commands do not take up all memory
|
||||||
seq 1 100 | parallel -j0 -qv perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2>/dev/null | sort
|
seq 1 100 | parallel -j0 -qv perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2>/dev/null | sort
|
||||||
1
|
1
|
||||||
|
@ -1079,7 +1079,7 @@ perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000
|
||||||
perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 97
|
perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 97
|
||||||
perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 98
|
perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 98
|
||||||
perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 99
|
perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 99
|
||||||
echo '### Test 0-arguments'
|
echo '### Test 0-arguments'
|
||||||
### Test 0-arguments
|
### Test 0-arguments
|
||||||
seq 1 2 | parallel -k -n0 echo n0
|
seq 1 2 | parallel -k -n0 echo n0
|
||||||
n0
|
n0
|
||||||
|
@ -1090,34 +1090,34 @@ L0
|
||||||
seq 1 2 | parallel -k -N0 echo N0
|
seq 1 2 | parallel -k -N0 echo N0
|
||||||
N0
|
N0
|
||||||
N0
|
N0
|
||||||
echo '### Because of --tollef -l, then -l0 == -l1, sorry'
|
echo '### Because of --tollef -l, then -l0 == -l1, sorry'
|
||||||
### Because of --tollef -l, then -l0 == -l1, sorry
|
### Because of --tollef -l, then -l0 == -l1, sorry
|
||||||
seq 1 2 | parallel -k -l0 echo l0
|
seq 1 2 | parallel -k -l0 echo l0
|
||||||
l0 1
|
l0 1
|
||||||
l0 2
|
l0 2
|
||||||
echo '### Test replace {}'
|
echo '### Test replace {}'
|
||||||
### Test replace {}
|
### Test replace {}
|
||||||
seq 1 2 | parallel -k -N0 echo replace {} curlies
|
seq 1 2 | parallel -k -N0 echo replace {} curlies
|
||||||
replace curlies
|
replace curlies
|
||||||
replace curlies
|
replace curlies
|
||||||
echo '### Test arguments on commandline'
|
echo '### Test arguments on commandline'
|
||||||
### Test arguments on commandline
|
### Test arguments on commandline
|
||||||
parallel -k -N0 echo args on cmdline ::: 1 2
|
parallel -k -N0 echo args on cmdline ::: 1 2
|
||||||
args on cmdline
|
args on cmdline
|
||||||
args on cmdline
|
args on cmdline
|
||||||
echo '### Test --nice locally'
|
echo '### Test --nice locally'
|
||||||
### Test --nice locally
|
### Test --nice locally
|
||||||
parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b
|
parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b
|
||||||
PAR=a bash -c "echo \$PAR b"
|
PAR=a bash -c "echo \$PAR b"
|
||||||
a b
|
a b
|
||||||
echo '### Test distribute arguments at EOF to 2 jobslots'
|
echo '### Test distribute arguments at EOF to 2 jobslots'
|
||||||
### Test distribute arguments at EOF to 2 jobslots
|
### Test distribute arguments at EOF to 2 jobslots
|
||||||
seq 1 92 | parallel -j2 -kX -s 100 echo
|
seq 1 92 | parallel -j2 -kX -s 100 echo
|
||||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
||||||
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
||||||
66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
||||||
80 81 82 83 84 85 86 87 88 89 90 91 92
|
80 81 82 83 84 85 86 87 88 89 90 91 92
|
||||||
echo '### Test distribute arguments at EOF to 5 jobslots'
|
echo '### Test distribute arguments at EOF to 5 jobslots'
|
||||||
### Test distribute arguments at EOF to 5 jobslots
|
### Test distribute arguments at EOF to 5 jobslots
|
||||||
seq 1 92 | parallel -j5 -kX -s 100 echo
|
seq 1 92 | parallel -j5 -kX -s 100 echo
|
||||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
||||||
|
@ -1127,7 +1127,7 @@ a b
|
||||||
78 79 80 81 82 83
|
78 79 80 81 82 83
|
||||||
84 85 86 87 88 89
|
84 85 86 87 88 89
|
||||||
90 91 92
|
90 91 92
|
||||||
echo '### Test distribute arguments at EOF to infinity jobslots'
|
echo '### Test distribute arguments at EOF to infinity jobslots'
|
||||||
### Test distribute arguments at EOF to infinity jobslots
|
### Test distribute arguments at EOF to infinity jobslots
|
||||||
seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null
|
seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null
|
||||||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
||||||
|
@ -1159,26 +1159,26 @@ a b
|
||||||
90
|
90
|
||||||
91
|
91
|
||||||
92
|
92
|
||||||
echo '### Test -N is not broken by distribution - single line'
|
echo '### Test -N is not broken by distribution - single line'
|
||||||
### Test -N is not broken by distribution - single line
|
### Test -N is not broken by distribution - single line
|
||||||
seq 9 | parallel -N 10 echo
|
seq 9 | parallel -N 10 echo
|
||||||
1 2 3 4 5 6 7 8 9
|
1 2 3 4 5 6 7 8 9
|
||||||
echo '### Test -N is not broken by distribution - two lines'
|
echo '### Test -N is not broken by distribution - two lines'
|
||||||
### Test -N is not broken by distribution - two lines
|
### Test -N is not broken by distribution - two lines
|
||||||
seq 19 | parallel -k -N 10 echo
|
seq 19 | parallel -k -N 10 echo
|
||||||
1 2 3 4 5 6 7 8 9 10
|
1 2 3 4 5 6 7 8 9 10
|
||||||
11 12 13 14 15 16 17 18 19
|
11 12 13 14 15 16 17 18 19
|
||||||
echo '### Test -N context replace'
|
echo '### Test -N context replace'
|
||||||
### Test -N context replace
|
### Test -N context replace
|
||||||
seq 19 | parallel -k -N 10 echo a{}b
|
seq 19 | parallel -k -N 10 echo a{}b
|
||||||
a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
|
a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
|
||||||
a11b a12b a13b a14b a15b a16b a17b a18b a19b
|
a11b a12b a13b a14b a15b a16b a17b a18b a19b
|
||||||
echo '### Test -L context replace'
|
echo '### Test -L context replace'
|
||||||
### Test -L context replace
|
### Test -L context replace
|
||||||
seq 19 | parallel -k -L 10 echo a{}b
|
seq 19 | parallel -k -L 10 echo a{}b
|
||||||
a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
|
a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
|
||||||
a11b a12b a13b a14b a15b a16b a17b a18b a19b
|
a11b a12b a13b a14b a15b a16b a17b a18b a19b
|
||||||
echo '**'
|
echo '**'
|
||||||
**
|
**
|
||||||
echo '### Test {} multiple times in different commands'
|
echo '### Test {} multiple times in different commands'
|
||||||
### Test {} multiple times in different commands
|
### Test {} multiple times in different commands
|
||||||
|
@ -1251,11 +1251,9 @@ par_PARALLEL_ENV OK as file
|
||||||
par_PARALLEL_ENV ### PARALLEL_ENV as fifo
|
par_PARALLEL_ENV ### PARALLEL_ENV as fifo
|
||||||
par_PARALLEL_ENV OK as fifo
|
par_PARALLEL_ENV OK as fifo
|
||||||
par_X_eta_div_zero ### bug #34422: parallel -X --eta crashes with div by zero
|
par_X_eta_div_zero ### bug #34422: parallel -X --eta crashes with div by zero
|
||||||
par_X_eta_div_zero
|
par_X_eta_div_zero 0
|
||||||
par_X_eta_div_zero Computers / CPU cores / Max jobs to run
|
par_X_eta_div_zero Computers / CPU cores / Max jobs to run
|
||||||
par_X_eta_div_zero 0:local / 0 / 0
|
par_X_eta_div_zero 0:local / 0 / 0
|
||||||
par_X_eta_div_zero
|
|
||||||
par_X_eta_div_zero Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
|
||||||
par_append_joblog ### can you append to a joblog using +
|
par_append_joblog ### can you append to a joblog using +
|
||||||
par_append_joblog 1
|
par_append_joblog 1
|
||||||
par_append_joblog 1
|
par_append_joblog 1
|
||||||
|
@ -1313,6 +1311,12 @@ par_dryrun_append_joblog echo 4
|
||||||
par_dryrun_append_joblog 4
|
par_dryrun_append_joblog 4
|
||||||
par_empty bug #:
|
par_empty bug #:
|
||||||
par_empty true
|
par_empty true
|
||||||
|
par_empty_command bug #54647: parset ignores empty lines
|
||||||
|
par_empty_command
|
||||||
|
par_empty_command Empty:
|
||||||
|
par_empty_command B: B
|
||||||
|
par_empty_input_on_stdin https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=910470
|
||||||
|
par_empty_input_on_stdin This should give no output
|
||||||
par_empty_line ### Test bug: empty line for | sh with -k
|
par_empty_line ### Test bug: empty line for | sh with -k
|
||||||
par_empty_line a
|
par_empty_line a
|
||||||
par_empty_line b
|
par_empty_line b
|
||||||
|
@ -1479,6 +1483,9 @@ par_slow_pipe_regexp ### bug #53718: --pipe --regexp -N blocks
|
||||||
par_slow_pipe_regexp This should take a few ms, but took more than 2 hours
|
par_slow_pipe_regexp This should take a few ms, but took more than 2 hours
|
||||||
par_slow_pipe_regexp 979 980 5875
|
par_slow_pipe_regexp 979 980 5875
|
||||||
par_slow_pipe_regexp 25022 25022 150131
|
par_slow_pipe_regexp 25022 25022 150131
|
||||||
|
par_space_envvar ### bug: --gnu was ignored if env var started with space: PARALLEL=' --gnu'
|
||||||
|
par_space_envvar echo 'space in envvar OK'
|
||||||
|
par_space_envvar space in envvar OK
|
||||||
par_tagstring_pipe bug #50228: --pipe --tagstring broken
|
par_tagstring_pipe bug #50228: --pipe --tagstring broken
|
||||||
par_tagstring_pipe 1 1000 1000 3893
|
par_tagstring_pipe 1 1000 1000 3893
|
||||||
par_tagstring_pipe 2 1000 1000 5000
|
par_tagstring_pipe 2 1000 1000 5000
|
||||||
|
@ -1513,6 +1520,14 @@ par_tee 4 -l 122853
|
||||||
par_tee 4 -c 815290
|
par_tee 4 -c 815290
|
||||||
par_tee 5 -l 122853
|
par_tee 5 -l 122853
|
||||||
par_tee 5 -c 815290
|
par_tee 5 -c 815290
|
||||||
|
par_tee_too_many_args ### Fail if there are more arguments than --jobs
|
||||||
|
par_tee_too_many_args 1 1
|
||||||
|
par_tee_too_many_args 1 10
|
||||||
|
par_tee_too_many_args 1 11
|
||||||
|
par_tee_too_many_args 2 2
|
||||||
|
par_tee_too_many_args 3 3
|
||||||
|
par_tee_too_many_args 4 4
|
||||||
|
par_tee_too_many_args parallel: Error: --tee requres --jobs to be higher. Try --jobs 0.
|
||||||
par_testquote ash "#&/
|
par_testquote ash "#&/
|
||||||
par_testquote ash ()*=?'
|
par_testquote ash ()*=?'
|
||||||
par_testquote bash "#&/
|
par_testquote bash "#&/
|
||||||
|
|
|
@ -6,182 +6,182 @@ par_exit_code # but fish 2.4.0 returns 1 while X.X.X returns 0
|
||||||
par_exit_code ash /tmp/mysleep 100 137
|
par_exit_code ash /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,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 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code ash parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code ash parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code ash parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code ash parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code ash true;/tmp/mysleep 100 137
|
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,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;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code ash parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code ash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code ash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code ash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code bash /tmp/mysleep 100 0
|
par_exit_code bash /tmp/mysleep 100 0
|
||||||
par_exit_code bash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code bash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code bash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code bash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code bash parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code bash parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code bash parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code bash parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code bash true;/tmp/mysleep 100 137
|
par_exit_code bash true;/tmp/mysleep 100 137
|
||||||
par_exit_code bash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code bash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code bash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code bash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code bash parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code bash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code bash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code bash 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
|
||||||
par_exit_code csh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code csh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code csh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code csh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code csh true;/tmp/mysleep 100 137
|
par_exit_code csh true;/tmp/mysleep 100 137
|
||||||
par_exit_code csh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code csh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code csh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code csh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code csh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code csh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code csh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code csh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code dash /tmp/mysleep 100 137
|
par_exit_code dash /tmp/mysleep 100 137
|
||||||
par_exit_code dash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code dash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code dash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code dash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code dash parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code dash parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code dash parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code dash parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code dash true;/tmp/mysleep 100 137
|
par_exit_code dash true;/tmp/mysleep 100 137
|
||||||
par_exit_code dash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code dash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code dash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code dash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code dash parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code dash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code dash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code dash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code fish /tmp/mysleep 100 137
|
par_exit_code fish /tmp/mysleep 100 137
|
||||||
par_exit_code fish parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code fish parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code fish parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code fish parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code fish parallel --halt-on-error now,done=1 true ::: 100 1
|
par_exit_code fish parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code fish parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code fish parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code fish true;/tmp/mysleep 100 137
|
par_exit_code fish true;/tmp/mysleep 100 137
|
||||||
par_exit_code fish parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code fish parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code fish parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code fish parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code fish parallel --halt-on-error now,done=1 "true;true" ::: 100 1
|
par_exit_code fish parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code fish parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code fish parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code mksh /tmp/mysleep 100 0
|
par_exit_code mksh /tmp/mysleep 100 0
|
||||||
par_exit_code mksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code mksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code mksh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code mksh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code mksh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code mksh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code mksh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code mksh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code mksh true;/tmp/mysleep 100 137
|
par_exit_code mksh true;/tmp/mysleep 100 137
|
||||||
par_exit_code mksh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code mksh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code mksh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code mksh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code mksh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code mksh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code mksh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code mksh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code posh /tmp/mysleep 100 137
|
par_exit_code posh /tmp/mysleep 100 137
|
||||||
par_exit_code posh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code posh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code posh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code posh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code posh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code posh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code posh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code posh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code posh true;/tmp/mysleep 100 137
|
par_exit_code posh true;/tmp/mysleep 100 137
|
||||||
par_exit_code posh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code posh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code posh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code posh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code posh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code posh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code posh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code posh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code rc /tmp/mysleep 100 1
|
par_exit_code rc /tmp/mysleep 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,done=1 true ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,done=1 /bin/true ::: 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,done=1 exit ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,done=1 exit ::: 100 1
|
||||||
par_exit_code rc true;/tmp/mysleep 100 1
|
par_exit_code rc true;/tmp/mysleep 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,done=1 "true;true" ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 1
|
||||||
par_exit_code rc parallel --halt-on-error now,done=1 "true;exit" ::: 100 1
|
par_exit_code rc parallel --halt-on-error now,done=1 "true;exit" ::: 100 1
|
||||||
par_exit_code sash /tmp/mysleep 100 255
|
par_exit_code sash /tmp/mysleep 100 255
|
||||||
par_exit_code sash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 255
|
par_exit_code sash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 255
|
||||||
par_exit_code sash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 255
|
par_exit_code sash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 255
|
||||||
par_exit_code sash parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code sash parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code sash parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code sash parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code sash true;/tmp/mysleep 100 0
|
par_exit_code sash true;/tmp/mysleep 100 0
|
||||||
par_exit_code sash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 0
|
par_exit_code sash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 0
|
||||||
par_exit_code sash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 0
|
par_exit_code sash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 0
|
||||||
par_exit_code sash parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code sash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code sash parallel --halt-on-error now,done=1 "true;exit" ::: 100 0
|
par_exit_code sash parallel --halt-on-error now,done=1 "true;exit" ::: 100 0
|
||||||
par_exit_code sh /tmp/mysleep 100 137
|
par_exit_code sh /tmp/mysleep 100 137
|
||||||
par_exit_code sh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code sh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code sh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code sh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code sh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code sh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code sh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code sh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code sh true;/tmp/mysleep 100 137
|
par_exit_code sh true;/tmp/mysleep 100 137
|
||||||
par_exit_code sh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code sh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code sh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code sh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code sh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code sh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code sh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code sh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code static-sh /tmp/mysleep 100 137
|
par_exit_code static-sh /tmp/mysleep 100 137
|
||||||
par_exit_code static-sh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code static-sh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code static-sh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code static-sh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code static-sh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code static-sh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code static-sh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code static-sh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code static-sh true;/tmp/mysleep 100 137
|
par_exit_code static-sh true;/tmp/mysleep 100 137
|
||||||
par_exit_code static-sh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code static-sh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code static-sh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code static-sh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code static-sh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code static-sh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code static-sh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code static-sh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code tcsh /tmp/mysleep 100 137
|
par_exit_code tcsh /tmp/mysleep 100 137
|
||||||
par_exit_code tcsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code tcsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code tcsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code tcsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code tcsh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code tcsh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code tcsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code tcsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code tcsh true;/tmp/mysleep 100 137
|
par_exit_code tcsh true;/tmp/mysleep 100 137
|
||||||
par_exit_code tcsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code tcsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code tcsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code tcsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code tcsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code tcsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code tcsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code tcsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code fdsh /tmp/mysleep 100 137
|
par_exit_code fdsh /tmp/mysleep 100 137
|
||||||
par_exit_code fdsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 2
|
par_exit_code fdsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 2
|
||||||
par_exit_code fdsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 2
|
par_exit_code fdsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 2
|
||||||
par_exit_code fdsh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code fdsh parallel --halt-on-error now,done=1 /bin/true ::: 100 2
|
||||||
par_exit_code fdsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code fdsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code fdsh true;/tmp/mysleep 100 137
|
par_exit_code fdsh true;/tmp/mysleep 100 137
|
||||||
par_exit_code fdsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 2
|
par_exit_code fdsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 2
|
||||||
par_exit_code fdsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 2
|
par_exit_code fdsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 2
|
||||||
par_exit_code fdsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code fdsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 2
|
||||||
par_exit_code fdsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code fdsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code fizsh /tmp/mysleep 100 137
|
par_exit_code fizsh /tmp/mysleep 100 137
|
||||||
par_exit_code fizsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code fizsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code fizsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code fizsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code fizsh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code fizsh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code fizsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code fizsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code fizsh true;/tmp/mysleep 100 137
|
par_exit_code fizsh true;/tmp/mysleep 100 137
|
||||||
par_exit_code fizsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code fizsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code fizsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code fizsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code fizsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code fizsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code fizsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code fizsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code ksh /tmp/mysleep 100 0
|
par_exit_code ksh /tmp/mysleep 100 0
|
||||||
par_exit_code ksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code ksh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code ksh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code ksh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code ksh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code ksh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code ksh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code ksh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code ksh true;/tmp/mysleep 100 0
|
par_exit_code ksh true;/tmp/mysleep 100 0
|
||||||
par_exit_code ksh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code ksh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code ksh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code ksh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code ksh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code ksh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code ksh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code ksh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code ksh93 /tmp/mysleep 100 0
|
par_exit_code ksh93 /tmp/mysleep 100 0
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code ksh93 parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code ksh93 parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code ksh93 parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code ksh93 parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code ksh93 true;/tmp/mysleep 100 0
|
par_exit_code ksh93 true;/tmp/mysleep 100 0
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code ksh93 parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code ksh93 parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code yash /tmp/mysleep 100 0
|
par_exit_code yash /tmp/mysleep 100 0
|
||||||
par_exit_code yash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code yash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code yash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code yash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code yash parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code yash parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code yash parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code yash parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code yash true;/tmp/mysleep 100 0
|
par_exit_code yash true;/tmp/mysleep 100 0
|
||||||
par_exit_code yash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code yash parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code yash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code yash parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code yash parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code yash parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code yash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code yash parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code zsh /tmp/mysleep 100 0
|
par_exit_code zsh /tmp/mysleep 100 0
|
||||||
par_exit_code zsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
par_exit_code zsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code zsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
par_exit_code zsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
|
||||||
par_exit_code zsh parallel --halt-on-error now,done=1 true ::: 100 0
|
par_exit_code zsh parallel --halt-on-error now,done=1 /bin/true ::: 100 0
|
||||||
par_exit_code zsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
par_exit_code zsh parallel --halt-on-error now,done=1 exit ::: 100 100
|
||||||
par_exit_code zsh true;/tmp/mysleep 100 0
|
par_exit_code zsh true;/tmp/mysleep 100 0
|
||||||
par_exit_code zsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code zsh parallel --halt-on-error now,fail=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code zsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
par_exit_code zsh parallel --halt-on-error now,done=1 "true;/tmp/mysleep" ::: 100 137
|
||||||
par_exit_code zsh parallel --halt-on-error now,done=1 "true;true" ::: 100 0
|
par_exit_code zsh parallel --halt-on-error now,done=1 "true;/bin/true" ::: 100 0
|
||||||
par_exit_code zsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
par_exit_code zsh parallel --halt-on-error now,done=1 "true;exit" ::: 100 100
|
||||||
par_exit_code parallel: This job finished:
|
par_exit_code parallel: This job finished:
|
||||||
par_exit_code runit
|
par_exit_code runit
|
||||||
|
@ -380,7 +380,7 @@ par_test_build_and_install ! -type d ! -perm -444 -links 1 -exec chmod a+r {}
|
||||||
par_test_build_and_install ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
par_test_build_and_install ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
par_test_build_and_install ! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \
|
par_test_build_and_install ! -type d ! -perm -444 -exec /bin/bash ~/privat/parallel/install-sh -c -m a+r {} {} \; \
|
||||||
par_test_build_and_install || chmod -R a+r "parallel-00000000"
|
par_test_build_and_install || chmod -R a+r "parallel-00000000"
|
||||||
par_test_build_and_install tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >parallel-00000000.tar.gz
|
par_test_build_and_install tardir=parallel-00000000 && ${TAR-tar} chof - "$tardir" | eval GZIP= gzip --best -c >parallel-00000000.tar.gz
|
||||||
par_test_build_and_install make[0]: Leaving directory '~/privat/parallel'
|
par_test_build_and_install make[0]: Leaving directory '~/privat/parallel'
|
||||||
par_test_build_and_install if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi
|
par_test_build_and_install if test -d "parallel-00000000"; then find "parallel-00000000" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "parallel-00000000" || { sleep 5 && rm -rf "parallel-00000000"; }; else :; fi
|
||||||
par_test_build_and_install make[0]: Leaving directory '~/privat/parallel'
|
par_test_build_and_install make[0]: Leaving directory '~/privat/parallel'
|
||||||
|
|
|
@ -27,8 +27,8 @@ par_interactive sleep 0.1; echo opt-p 2 ?...n
|
||||||
par_interactive sleep 0.1; echo opt-p 3 ?...y
|
par_interactive sleep 0.1; echo opt-p 3 ?...y
|
||||||
par_interactive spawn /tmp/parallel-script-for-expect
|
par_interactive spawn /tmp/parallel-script-for-expect
|
||||||
par_k ### Test -k
|
par_k ### Test -k
|
||||||
par_k parallel: Warning: Only enough file handles to run 9 jobs in parallel.
|
par_k parallel: Warning: Only enough file handles to run 8 jobs in parallel.
|
||||||
par_k parallel: Warning: Running 'parallel -j0 -N 9 --pipe parallel -j0' or
|
par_k parallel: Warning: Running 'parallel -j0 -N 8 --pipe parallel -j0' or
|
||||||
par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
|
par_k parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
|
||||||
par_k parallel: Warning: or /proc/sys/fs/file-max may help.
|
par_k parallel: Warning: or /proc/sys/fs/file-max may help.
|
||||||
par_k begin
|
par_k begin
|
||||||
|
@ -243,22 +243,9 @@ par_kill_children_timeout 0 0 0
|
||||||
par_line_buffer ### --line-buffer
|
par_line_buffer ### --line-buffer
|
||||||
par_line_buffer 55 55 120
|
par_line_buffer 55 55 120
|
||||||
par_line_buffer These must diff: 1
|
par_line_buffer These must diff: 1
|
||||||
par_linebuffer_tag_slow_output Test output tag with mixing halflines
|
|
||||||
par_linebuffer_tag_slow_output a aH
|
|
||||||
par_linebuffer_tag_slow_output b bH
|
|
||||||
par_linebuffer_tag_slow_output a aa
|
|
||||||
par_linebuffer_tag_slow_output b ba
|
|
||||||
par_linebuffer_tag_slow_output a al
|
|
||||||
par_linebuffer_tag_slow_output b bl
|
|
||||||
par_linebuffer_tag_slow_output a af
|
|
||||||
par_linebuffer_tag_slow_output b bf
|
|
||||||
par_linebuffer_tag_slow_output a a
|
|
||||||
par_linebuffer_tag_slow_output a
|
|
||||||
par_linebuffer_tag_slow_output b b
|
|
||||||
par_linebuffer_tag_slow_output b
|
|
||||||
par_long_line_remote ### Deal with long command lines on remote servers
|
par_long_line_remote ### Deal with long command lines on remote servers
|
||||||
par_long_line_remote 2 6 30006
|
par_long_line_remote 2 6 30006
|
||||||
par_long_line_remote 2 50 250050
|
par_long_line_remote 3 50 250050
|
||||||
par_maxlinelen_X_I ### Test max line length -X -I
|
par_maxlinelen_X_I ### Test max line length -X -I
|
||||||
par_maxlinelen_X_I 3cfc69ee81b0fe7fdbe8eb059ad2da61 -
|
par_maxlinelen_X_I 3cfc69ee81b0fe7fdbe8eb059ad2da61 -
|
||||||
par_maxlinelen_X_I Chars per line (817788/7): 116826
|
par_maxlinelen_X_I Chars per line (817788/7): 116826
|
||||||
|
@ -338,10 +325,10 @@ par_results_compress 0
|
||||||
par_results_compress 1
|
par_results_compress 1
|
||||||
par_results_csv bug #: --results csv
|
par_results_csv bug #: --results csv
|
||||||
par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
||||||
par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
||||||
par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
|
@ -366,10 +353,10 @@ par_results_csv --header : --tag ",
|
||||||
par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
|
par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
|
||||||
par_results_csv --header : --tag ",
|
par_results_csv --header : --tag ",
|
||||||
par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
||||||
par_results_csv --header : --files --compress 1,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --header : --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --header : --files --compress 2,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --header : --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --header : --files --compress 3,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --header : --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --header : --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --header : --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
|
||||||
par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
|
@ -394,15 +381,15 @@ par_results_csv --header : ",
|
||||||
par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12
|
par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12
|
||||||
par_results_csv --header : ",
|
par_results_csv --header : ",
|
||||||
par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
||||||
par_results_csv --tag --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
||||||
par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmpdir/tmpfile",
|
||||||
|
@ -452,15 +439,15 @@ par_results_csv --tag ",
|
||||||
par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
|
par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
|
||||||
par_results_csv --tag ",
|
par_results_csv --tag ",
|
||||||
par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
||||||
par_results_csv --files --compress 1,:,999.999,999.999,0,31,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 2,:,999.999,999.999,0,31,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 3,:,999.999,999.999,0,31,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 4,:,999.999,999.999,0,31,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 5,:,999.999,999.999,0,31,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 6,:,999.999,999.999,0,31,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 7,:,999.999,999.999,0,31,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 8,:,999.999,999.999,0,31,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files --compress 9,:,999.999,999.999,0,31,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
|
||||||
par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,/tmp/parallel-local-10s-tmpdir/tmpfile,
|
||||||
|
@ -520,6 +507,22 @@ par_retries_all_fail 7
|
||||||
par_retries_all_fail 8
|
par_retries_all_fail 8
|
||||||
par_round_robin_blocks bug #49664: --round-robin does not complete
|
par_round_robin_blocks bug #49664: --round-robin does not complete
|
||||||
par_round_robin_blocks 8
|
par_round_robin_blocks 8
|
||||||
|
par_sem_2jobs ### Test semaphore 2 jobs running simultaneously
|
||||||
|
par_sem_2jobs job1a 1
|
||||||
|
par_sem_2jobs job2a 2
|
||||||
|
par_sem_2jobs job1b 3
|
||||||
|
par_sem_2jobs job3a 4
|
||||||
|
par_sem_2jobs job2b 5
|
||||||
|
par_sem_2jobs job3b 6
|
||||||
|
par_sem_2jobs done
|
||||||
|
par_semaphore ### Test if parallel invoked as sem will run parallel --semaphore
|
||||||
|
par_semaphore job1a 1
|
||||||
|
par_semaphore job2a 2
|
||||||
|
par_semaphore job1b 3
|
||||||
|
par_semaphore job3a 4
|
||||||
|
par_semaphore job2b 5
|
||||||
|
par_semaphore job3b 6
|
||||||
|
par_semaphore done
|
||||||
par_slow_total_jobs bug #51006: Slow total_jobs() eats job
|
par_slow_total_jobs bug #51006: Slow total_jobs() eats job
|
||||||
par_slow_total_jobs a
|
par_slow_total_jobs a
|
||||||
par_slow_total_jobs b
|
par_slow_total_jobs b
|
||||||
|
@ -528,9 +531,9 @@ par_slow_total_jobs 2
|
||||||
par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds.
|
par_slow_total_jobs parallel: Warning: Reading X arguments took longer than XX seconds.
|
||||||
par_sockets_cores_threads ### Test --number-of-sockets/cores/threads
|
par_sockets_cores_threads ### Test --number-of-sockets/cores/threads
|
||||||
par_sockets_cores_threads 1
|
par_sockets_cores_threads 1
|
||||||
par_sockets_cores_threads 2
|
par_sockets_cores_threads 4
|
||||||
par_sockets_cores_threads 2
|
par_sockets_cores_threads 8
|
||||||
par_sockets_cores_threads 2
|
par_sockets_cores_threads 4
|
||||||
par_sockets_cores_threads ### Test --use-sockets-instead-of-threads
|
par_sockets_cores_threads ### Test --use-sockets-instead-of-threads
|
||||||
par_sockets_cores_threads threads done
|
par_sockets_cores_threads threads done
|
||||||
par_sockets_cores_threads sockets done
|
par_sockets_cores_threads sockets done
|
||||||
|
|
|
@ -619,3 +619,6 @@ par_test_XI_mI a7 b1 2 3 4 5 6 7
|
||||||
par_test_XI_mI a8 b1 2 3 4 5 6 7 8
|
par_test_XI_mI a8 b1 2 3 4 5 6 7 8
|
||||||
par_test_XI_mI a9 b1 2 3 4 5 6 7 8 9
|
par_test_XI_mI a9 b1 2 3 4 5 6 7 8 9
|
||||||
par_test_XI_mI a10 b1 2 3 4 5 6 7 8 9 10
|
par_test_XI_mI a10 b1 2 3 4 5 6 7 8 9 10
|
||||||
|
par_too_long_line_X bug #54869: Long lines break
|
||||||
|
par_too_long_line_X 1 29302 131012
|
||||||
|
par_too_long_line_X 1 12698 63490
|
||||||
|
|
|
@ -251,7 +251,7 @@ par_test_detected_shell test_known_shell_c fizsh Global::shell /usr/bin/zsh
|
||||||
par_test_detected_shell test_known_shell_c ksh Global::shell /usr/bin/ksh
|
par_test_detected_shell test_known_shell_c ksh Global::shell /usr/bin/ksh
|
||||||
par_test_detected_shell test_known_shell_c ksh93 Global::shell /bin/ksh93
|
par_test_detected_shell test_known_shell_c ksh93 Global::shell /bin/ksh93
|
||||||
par_test_detected_shell test_known_shell_c mksh Global::shell /bin/mksh
|
par_test_detected_shell test_known_shell_c mksh Global::shell /bin/mksh
|
||||||
par_test_detected_shell test_known_shell_c posh Global::shell /bin/posh
|
par_test_detected_shell test_known_shell_c posh Global::shell /usr/bin/posh
|
||||||
par_test_detected_shell test_known_shell_c rbash Global::shell /bin/rbash
|
par_test_detected_shell test_known_shell_c rbash Global::shell /bin/rbash
|
||||||
par_test_detected_shell test_known_shell_c rush Local configuration error occurred.
|
par_test_detected_shell test_known_shell_c rush Local configuration error occurred.
|
||||||
par_test_detected_shell test_known_shell_c rush Contact the systems administrator for further assistance.
|
par_test_detected_shell test_known_shell_c rush Contact the systems administrator for further assistance.
|
||||||
|
@ -267,11 +267,11 @@ par_test_detected_shell test_known_shell_pipe bash Global::shell /bin/bash
|
||||||
par_test_detected_shell test_known_shell_pipe csh Global::shell /bin/csh
|
par_test_detected_shell test_known_shell_pipe csh Global::shell /bin/csh
|
||||||
par_test_detected_shell test_known_shell_pipe dash Global::shell /bin/dash
|
par_test_detected_shell test_known_shell_pipe dash Global::shell /bin/dash
|
||||||
par_test_detected_shell test_known_shell_pipe fish Global::shell /usr/bin/fish
|
par_test_detected_shell test_known_shell_pipe fish Global::shell /usr/bin/fish
|
||||||
par_test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/zsh
|
par_test_detected_shell test_known_shell_pipe fizsh Global::shell /usr/bin/fizsh
|
||||||
par_test_detected_shell test_known_shell_pipe ksh Global::shell /usr/bin/ksh
|
par_test_detected_shell test_known_shell_pipe ksh Global::shell /usr/bin/ksh
|
||||||
par_test_detected_shell test_known_shell_pipe ksh93 Global::shell /bin/ksh93
|
par_test_detected_shell test_known_shell_pipe ksh93 Global::shell /bin/ksh93
|
||||||
par_test_detected_shell test_known_shell_pipe mksh Global::shell /bin/mksh
|
par_test_detected_shell test_known_shell_pipe mksh Global::shell /bin/mksh
|
||||||
par_test_detected_shell test_known_shell_pipe posh Global::shell /bin/posh
|
par_test_detected_shell test_known_shell_pipe posh Global::shell /usr/bin/posh
|
||||||
par_test_detected_shell test_known_shell_pipe rbash Global::shell /bin/rbash
|
par_test_detected_shell test_known_shell_pipe rbash Global::shell /bin/rbash
|
||||||
par_test_detected_shell test_known_shell_pipe rush Local configuration error occurred.
|
par_test_detected_shell test_known_shell_pipe rush Local configuration error occurred.
|
||||||
par_test_detected_shell test_known_shell_pipe rush Contact the systems administrator for further assistance.
|
par_test_detected_shell test_known_shell_pipe rush Contact the systems administrator for further assistance.
|
||||||
|
|
|
@ -81,11 +81,6 @@ par_nice parallel: SIGTERM received. No new jobs will be started.
|
||||||
par_nice parallel: Waiting for these 2 jobs to finish. Send SIGTERM again to stop now.
|
par_nice parallel: Waiting for these 2 jobs to finish. Send SIGTERM again to stop now.
|
||||||
par_nice parallel: bzip2 < /dev/zero
|
par_nice parallel: bzip2 < /dev/zero
|
||||||
par_nice parallel: bzip2 < /dev/zero
|
par_nice parallel: bzip2 < /dev/zero
|
||||||
par_parcat_mixing parcat output should mix: a b a b
|
|
||||||
par_parcat_mixing astart
|
|
||||||
par_parcat_mixing bstart
|
|
||||||
par_parcat_mixing aend
|
|
||||||
par_parcat_mixing bend
|
|
||||||
par_pipe_unneeded_procs ### Test bug #34241: --pipe should not spawn unneeded processes
|
par_pipe_unneeded_procs ### Test bug #34241: --pipe should not spawn unneeded processes
|
||||||
par_pipe_unneeded_procs 1
|
par_pipe_unneeded_procs 1
|
||||||
par_pipe_unneeded_procs 2
|
par_pipe_unneeded_procs 2
|
||||||
|
|
|
@ -15,7 +15,7 @@ par_2gb_record_reading Eats 4.7 GB
|
||||||
par_2gb_record_reading parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1.
|
par_2gb_record_reading parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1.
|
||||||
par_2gb_record_reading 2300000004
|
par_2gb_record_reading 2300000004
|
||||||
par_2gb_records_N ### bug #44358: 2 GB records cause problems for -N
|
par_2gb_records_N ### bug #44358: 2 GB records cause problems for -N
|
||||||
par_2gb_records_N 5 GB version: Eats 12.5 GB
|
par_2gb_records_N 5 GB version: Eats 12.5 GB RAM + 4 GB Swap
|
||||||
par_2gb_records_N parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001.
|
par_2gb_records_N parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001.
|
||||||
par_2gb_records_N parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003.
|
par_2gb_records_N parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003.
|
||||||
par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647.
|
par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647.
|
||||||
|
@ -28,7 +28,7 @@ par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increa
|
||||||
par_2gb_records_N 4600000007
|
par_2gb_records_N 4600000007
|
||||||
par_2gb_records_N 1000000001
|
par_2gb_records_N 1000000001
|
||||||
par_2gb_records_N ### -L >4GB
|
par_2gb_records_N ### -L >4GB
|
||||||
par_2gb_records_N Eats 12.5 GB
|
par_2gb_records_N Eats 12.5 GB RAM + 6 GB Swap
|
||||||
par_2gb_records_N parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001.
|
par_2gb_records_N parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001.
|
||||||
par_2gb_records_N parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003.
|
par_2gb_records_N parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003.
|
||||||
par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647.
|
par_2gb_records_N parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647.
|
||||||
|
|
|
@ -11,6 +11,30 @@ Control case: Burn for 2.9 seconds
|
||||||
|
|
||||||
stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | \grep -q CPUTIME=1
|
stdout /usr/bin/time -f CPUTIME=%U parallel --timeout 5 -q perl -e "while(1){ }" ::: 1 | \grep -q CPUTIME=1
|
||||||
1=OK 1
|
1=OK 1
|
||||||
|
par_continuous_output Test delayed output with ''
|
||||||
|
par_continuous_output -u is optimal but hard to reach, due to non-mixing
|
||||||
|
par_continuous_output 4
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output Test delayed output with '-u'
|
||||||
|
par_continuous_output -u is optimal but hard to reach, due to non-mixing
|
||||||
|
par_continuous_output 4
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 0
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
|
par_continuous_output 1
|
||||||
par_hostgroup ### --hostgroup force ncpu
|
par_hostgroup ### --hostgroup force ncpu
|
||||||
par_hostgroup parallel
|
par_hostgroup parallel
|
||||||
par_hostgroup parallel
|
par_hostgroup parallel
|
||||||
|
@ -80,6 +104,24 @@ par_hostgroup tange
|
||||||
par_hostgroup tange
|
par_hostgroup tange
|
||||||
par_hostgroup tcsh
|
par_hostgroup tcsh
|
||||||
par_hostgroup tcsh
|
par_hostgroup tcsh
|
||||||
|
par_linebuffer_tag_slow_output Test output tag with mixing halflines
|
||||||
|
par_linebuffer_tag_slow_output a aH
|
||||||
|
par_linebuffer_tag_slow_output b bH
|
||||||
|
par_linebuffer_tag_slow_output a aa
|
||||||
|
par_linebuffer_tag_slow_output b ba
|
||||||
|
par_linebuffer_tag_slow_output a al
|
||||||
|
par_linebuffer_tag_slow_output b bl
|
||||||
|
par_linebuffer_tag_slow_output a af
|
||||||
|
par_linebuffer_tag_slow_output b bf
|
||||||
|
par_linebuffer_tag_slow_output a a
|
||||||
|
par_linebuffer_tag_slow_output a
|
||||||
|
par_linebuffer_tag_slow_output b b
|
||||||
|
par_linebuffer_tag_slow_output b
|
||||||
|
par_parcat_mixing parcat output should mix: a b a b
|
||||||
|
par_parcat_mixing astart
|
||||||
|
par_parcat_mixing bstart
|
||||||
|
par_parcat_mixing aend
|
||||||
|
par_parcat_mixing bend
|
||||||
par_testhalt now fail 0 true ### testhalt --halt now,fail=0
|
par_testhalt now fail 0 true ### testhalt --halt now,fail=0
|
||||||
par_testhalt now fail 0 true job 1
|
par_testhalt now fail 0 true job 1
|
||||||
par_testhalt now fail 0 true parallel: This job failed:
|
par_testhalt now fail 0 true parallel: This job failed:
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -28,36 +28,12 @@ echo '### Stop if all hosts are filtered and there are no hosts left to run on'
|
||||||
### Stop if all hosts are filtered and there are no hosts left to run on
|
### Stop if all hosts are filtered and there are no hosts left to run on
|
||||||
stdout parallel --filter-hosts -S no-such.host echo ::: 1
|
stdout parallel --filter-hosts -S no-such.host echo ::: 1
|
||||||
parallel: Warning: Removed no-such.host.
|
parallel: Warning: Removed no-such.host.
|
||||||
parallel: Error: There are no hosts left to run on.
|
parallel: Error: Cannot run any jobs.
|
||||||
echo '### Can csh propagate a variable containing \n'; export A=$(seq 3); parallel -S csh@lo --env A bash -c \''echo "$A"'\' ::: dummy
|
echo '### Can csh propagate a variable containing \n'; export A=$(seq 3); parallel -S csh@lo --env A bash -c \''echo "$A"'\' ::: dummy
|
||||||
### Can csh propagate a variable containing \n
|
### Can csh propagate a variable containing \n
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
3
|
3
|
||||||
echo '### bug #41805: Idea: propagate --env for parallel --number-of-cores'
|
|
||||||
### bug #41805: Idea: propagate --env for parallel --number-of-cores
|
|
||||||
echo '** test_zsh'
|
|
||||||
** test_zsh
|
|
||||||
FOO=test_zsh parallel --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
FOO=test_zsh
|
|
||||||
HOME=~
|
|
||||||
echo '** test_zsh_filter'
|
|
||||||
** test_zsh_filter
|
|
||||||
FOO=test_zsh_filter parallel --filter-hosts --env FOO,HOME -S zsh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
FOO=test_zsh_filter
|
|
||||||
HOME=~
|
|
||||||
echo '** test_csh'
|
|
||||||
** test_csh
|
|
||||||
FOO=test_csh parallel --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
FOO=test_csh
|
|
||||||
HOME=~
|
|
||||||
echo '** test_csh_filter'
|
|
||||||
** test_csh_filter
|
|
||||||
FOO=test_csh_filter parallel --filter-hosts --env FOO,HOME -S csh@lo -N0 env ::: "" |sort|egrep 'FOO|^HOME'
|
|
||||||
FOO=test_csh_filter
|
|
||||||
HOME=~
|
|
||||||
echo '** bug #41805 done'
|
|
||||||
** bug #41805 done
|
|
||||||
echo '### Test bug #34241: --pipe should not spawn unneeded processes'
|
echo '### Test bug #34241: --pipe should not spawn unneeded processes'
|
||||||
### Test bug #34241: --pipe should not spawn unneeded processes
|
### Test bug #34241: --pipe should not spawn unneeded processes
|
||||||
seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end
|
seq 5 | ssh csh@lo parallel -k --block 5 --pipe -j10 cat\\\;echo Block_end
|
||||||
|
@ -171,7 +147,7 @@ ls: No match.
|
||||||
ls: cannot access './--?.a': No such file or directory
|
ls: cannot access './--?.a': No such file or directory
|
||||||
echo '### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"'
|
echo '### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"'
|
||||||
### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"
|
### Test --trc "/tmp/./--- /A" "/tmp/./ ---/B"
|
||||||
mkdir -p '/tmp/./--- ' '/tmp/ ---'; touch -- '/tmp/./--- /A' '/tmp/ ---/B'; rm -f ./---?/A.a ./?---/B.a; parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B'; ls ./---?/A.a ./?---/B.a; parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK'; echo '### bug #46519: --onall ignores --transfer'
|
mkdir -p '/tmp/./--- ' '/tmp/ ---'; touch -- '/tmp/./--- /A' '/tmp/ ---/B'; rm -f ./---?/A.a ./?---/B.a; parallel --trc {=s:.*/./::=}.a -S csh@lo,sh@lo touch ./{=s:.*/./::=}.a ::: '/tmp/./--- /A' '/tmp/./ ---/B'; ls ./---?/A.a ./?---/B.a | LC_ALL=C sort; parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK' | LC_ALL=C sort; echo '### bug #46519: --onall ignores --transfer'
|
||||||
./ ---/B.a
|
./ ---/B.a
|
||||||
./--- /A.a
|
./--- /A.a
|
||||||
OK
|
OK
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue