Released as 20180522 ('GreatMarchOfReturn')

This commit is contained in:
Ole Tange 2018-05-23 01:07:40 +02:00
parent 9b2012f021
commit 87b9d9fe29
15 changed files with 299 additions and 92 deletions

33
NEWS
View file

@ -1,3 +1,36 @@
20180522
* --tty allows for more programs accessing /dev/tty in parallel. Some
programs require tty access without using it.
* env_parallel --session will record names in current environment in
$PARALLEL_IGNORED_NAMES and exit. It is only used with env_parallel,
and can work like --record-env but in a single session.
* 35 day course: Linux shell scripting and text processing for big
data https://comquest.in/training
* How To Use Your Entire CPU In Bash With Parallel
https://bash-prompt.net/guides/parallell-bash/
* An easy way to run parallel jobs on Stampede2
https://blog.uta.edu/xus/2017/09/29/an-easy-way-to-run-parallel-jobs-on-stampede2/
* Get more done at the Linux command line with GNU Parallel
https://opensource.com/article/18/5/gnu-parallel
* Save Time with Modern Search Techniques
https://www.sans.org/summit-archives/file/summit-archive-1524582079.pdf
* GNU Parallel: haz más cosas simultáneamente en el terminal
https://blog.desdelinux.net/gnu-parallel-haz-mas-cosas-simultaneamente-en-el-terminal/
* 「今日から使い切る」ための GNU Parallelによる並列処理入門
https://www.slideshare.net/koji_matsuda/gnu-parallel
* Bug fixes and man page updates.
20180422 20180422
* --csv makes GNU Parallel parse the input sources as CSV. When used * --csv makes GNU Parallel parse the input sources as CSV. When used

12
README
View file

@ -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-20180422.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20180522.tar.bz2
bzip2 -dc parallel-20180422.tar.bz2 | tar xvf - bzip2 -dc parallel-20180522.tar.bz2 | tar xvf -
cd parallel-20180422 cd parallel-20180522
./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-20180422.tar.bz2 wget https://ftpmirror.gnu.org/parallel/parallel-20180522.tar.bz2
bzip2 -dc parallel-20180422.tar.bz2 | tar xvf - bzip2 -dc parallel-20180522.tar.bz2 | tar xvf -
cd parallel-20180422 cd parallel-20180522
./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

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for parallel 20180422. # Generated by GNU Autoconf 2.69 for parallel 20180522.
# #
# 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='20180422' PACKAGE_VERSION='20180522'
PACKAGE_STRING='parallel 20180422' PACKAGE_STRING='parallel 20180522'
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 20180422 to adapt to many kinds of systems. \`configure' configures parallel 20180522 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 20180422:";; short | recursive ) echo "Configuration of parallel 20180522:";;
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 20180422 parallel configure 20180522
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 20180422, which was It was created by parallel $as_me 20180522, 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='20180422' VERSION='20180522'
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 20180422, which was This file was extended by parallel $as_me 20180522, 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 20180422 parallel config.status 20180522
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\\"

View file

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

View file

@ -220,6 +220,9 @@ https://bash-prompt.net/guides/parallell-bash/
https://blog.uta.edu/xus/2017/09/29/an-easy-way-to-run-parallel-jobs-on-stampede2/ https://blog.uta.edu/xus/2017/09/29/an-easy-way-to-run-parallel-jobs-on-stampede2/
https://opensource.com/article/18/5/gnu-parallel https://opensource.com/article/18/5/gnu-parallel
GNU Parallel: haz más cosas simultáneamente en el terminal
https://blog.desdelinux.net/gnu-parallel-haz-mas-cosas-simultaneamente-en-el-terminal/ https://blog.desdelinux.net/gnu-parallel-haz-mas-cosas-simultaneamente-en-el-terminal/
https://www.sans.org/summit-archives/file/summit-archive-1524582079.pdf https://www.sans.org/summit-archives/file/summit-archive-1524582079.pdf

View file

@ -1,6 +1,6 @@
<directory name="parallel" rev="220" srcmd5="daa6220a295b073bc0b1ef06cfc40094" vrev="1"> <directory name="parallel" rev="221" srcmd5="2a59ca9bd049f2651990628f4652146f" vrev="1">
<entry md5="24fd1167f3c45f22bea8588cdbdb5b5a" mtime="1524431598" name="parallel-20180422.tar.bz2" size="1745964" /> <entry md5="e5e3a5c63ae38df0d7f01a47b7273d80" mtime="1527030250" name="parallel-20180522.tar.bz2" size="1758080" />
<entry md5="8c18c6cbcc0554eec175850097aa36e1" mtime="1524431598" name="parallel.spec" size="4666" /> <entry md5="4b49188d16aa962e3c3c3a692e7095cc" mtime="1527030250" name="parallel.spec" size="4666" />
<entry md5="75ab8eb06cabba7e19fd971fc54de862" mtime="1524431599" name="parallel_20180422.dsc" size="556" /> <entry md5="574a88b53a981480cf908707c52233bc" mtime="1527030251" name="parallel_20180522.dsc" size="556" />
<entry md5="e76e808b96e7a45a919567010e43e7f9" mtime="1524431599" name="parallel_20180422.tar.gz" size="1951673" /> <entry md5="43dbfae83b547314f1288c7ec02038b4" mtime="1527030251" name="parallel_20180522.tar.gz" size="1965570" />
</directory> </directory>

View file

@ -1,6 +1,6 @@
Summary: Shell tool for executing jobs in parallel Summary: Shell tool for executing jobs in parallel
Name: parallel Name: parallel
Version: 20180422 Version: 20180522
Release: 1.2 Release: 1.2
License: GPL License: GPL
Group: Productivity/File utilities Group: Productivity/File utilities

View file

@ -1,6 +1,6 @@
Summary: Shell tool for executing jobs in parallel Summary: Shell tool for executing jobs in parallel
Name: parallel Name: parallel
Version: 20180422 Version: 20180522
Release: 1.2 Release: 1.2
License: GPL License: GPL
Group: Productivity/File utilities Group: Productivity/File utilities

View file

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

View file

@ -1450,7 +1450,7 @@ sub check_invalid_option_combinations {
sub init_globals { sub init_globals {
# Defaults: # Defaults:
$Global::version = 20180423; $Global::version = 20180522;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$Global::infinity = 2**31; $Global::infinity = 2**31;
$Global::debug = 0; $Global::debug = 0;

View file

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

View file

@ -20,7 +20,6 @@ polarhome: polar
true true
polar: ../src/parallel tests-to-run/*polar* wanted-results/*polar* prereqlocal polar: ../src/parallel tests-to-run/*polar* wanted-results/*polar* prereqlocal
make stopvm
time bash Start.sh polar NONE || true time bash Start.sh polar NONE || true
touch ~/.parallel/will-cite touch ~/.parallel/will-cite

View file

@ -1,18 +1,23 @@
#!/bin/bash #!/bin/bash
# Check servers up on http://www.polarhome.com/service/status/ # Check servers up on http://www.polarhome.com/service/status/
unset TIMEOUT
. `which env_parallel.bash`
env_parallel --session
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" 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"
P_NOTWORKING="vax alpha openstep" P_NOTWORKING="vax alpha openstep"
P_NOTWORKING_YET="ultrix irix" P_NOTWORKING_YET="ultrix irix"
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" 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"
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" 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"
P_TEMPORARILY_BROKEN="minix dragonfly ubuntu openindiana hpux-ia64 beaglebone cubieboard2" P_TEMPORARILY_BROKEN="minix dragonfly openindiana hpux-ia64 beaglebone cubieboard2"
P="$P_WORKING" P="$P_WORKING"
POLAR=`parallel -k echo {}.polarhome.com ::: $P` POLAR=`parallel -k echo {}.polarhome.com ::: $P`
S_POLAR=`parallel -k echo -S 1/{}.polarhome.com ::: $P` S_POLAR=`parallel -k echo -S 1/{}.polarhome.com ::: $P`
# 2018-04-22 TIMEOUT=20 # 2018-04-22 TIMEOUT=20
TIMEOUT=25 TIMEOUT=25
RETRIES=4 RETRIES=4
@ -23,6 +28,9 @@ doit() {
# Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet # Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet
PARALLEL_SSH="ssh -oLogLevel=quiet" PARALLEL_SSH="ssh -oLogLevel=quiet"
export PARALLEL_SSH export PARALLEL_SSH
export TIMEOUT
export RETRIES
echo TIMEOUT=$TIMEOUT RETRIES=$RETRIES
copy() { copy() {
# scp, but atomic (avoid half files if disconnected) # scp, but atomic (avoid half files if disconnected)
@ -105,8 +113,7 @@ doit() {
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
} }
. `which env_parallel.bash` env_parallel -u -Sredhat.p doit ::: 1
env_parallel -u --env _ -Sredhat.p 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

View file

@ -1,3 +1,4 @@
TIMEOUT=25 RETRIES=4
### Copy commands to servers ### Copy commands to servers
Done copying Done copying
aix.polarhome.com ### Test if empty command in process list causes problems aix.polarhome.com ### Test if empty command in process list causes problems
@ -34,6 +35,8 @@ suse.polarhome.com ### Test if empty command in process list causes problems
suse.polarhome.com OK_with_empty_cmd suse.polarhome.com OK_with_empty_cmd
tru64.polarhome.com ### Test if empty command in process list causes problems tru64.polarhome.com ### Test if empty command in process list causes problems
tru64.polarhome.com OK_with_empty_cmd tru64.polarhome.com OK_with_empty_cmd
ubuntu.polarhome.com ### Test if empty command in process list causes problems
ubuntu.polarhome.com OK_with_empty_cmd
unixware.polarhome.com UX:sh (/bin/sh): ERROR: -f: is not an identifier unixware.polarhome.com UX:sh (/bin/sh): ERROR: -f: is not an identifier
aix.polarhome.com Works on aix7 aix.polarhome.com Works on aix7
centos.polarhome.com Works on centos.polarhome.com centos.polarhome.com Works on centos.polarhome.com
@ -53,6 +56,7 @@ solaris-x86.polarhome.com Works on solaris-x86
solaris.polarhome.com Works on solaris solaris.polarhome.com Works on solaris
suse.polarhome.com Works on suse suse.polarhome.com Works on suse
tru64.polarhome.com Works on tru64.polarhome.com tru64.polarhome.com Works on tru64.polarhome.com
ubuntu.polarhome.com Works on ubuntu
unixware.polarhome.com Works on unixware.polarhome.com unixware.polarhome.com Works on unixware.polarhome.com
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
aix.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: The file access permissions do not allow the specified action. at /home/t/tange/bin/parallel line 0000 aix.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: The file access permissions do not allow the specified action. at /home/t/tange/bin/parallel line 0000
@ -94,6 +98,8 @@ suse.polarhome.com OK
tru64.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable tru64.polarhome.com Error in tempfile() using /XXXXXXXX.arg: Parent directory (/) is not writable
tru64.polarhome.com at /home/t/tange/bin/parallel line 0000 tru64.polarhome.com at /home/t/tange/bin/parallel line 0000
tru64.polarhome.com OK tru64.polarhome.com OK
ubuntu.polarhome.com Error in tempfile() using template /XXXXXXXX.arg: Could not create temp file /XXXXXXXX.arg: Permission denied at /home/t/tange/bin/parallel line 0000.
ubuntu.polarhome.com OK
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
unixware.polarhome.com UX:env: ERROR: No such file or directory: bash unixware.polarhome.com UX:env: ERROR: No such file or directory: bash
@ -117,6 +123,7 @@ solaris-x86.polarhome.com bash only A
solaris.polarhome.com bash only A solaris.polarhome.com bash only A
suse.polarhome.com /home/t/tange/bin/bash: func: command not found suse.polarhome.com /home/t/tange/bin/bash: func: command not found
tru64.polarhome.com bash only A tru64.polarhome.com bash only A
ubuntu.polarhome.com bash only A
unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `(' unexpected unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `(' unexpected
### Does PARALLEL_SHELL help exporting a bash function not kill parallel ### Does PARALLEL_SHELL help exporting a bash function not kill parallel
@ -138,6 +145,7 @@ solaris-x86.polarhome.com bash only B
solaris.polarhome.com bash only B solaris.polarhome.com bash only B
suse.polarhome.com bash only B suse.polarhome.com bash only B
tru64.polarhome.com bash only B tru64.polarhome.com bash only B
ubuntu.polarhome.com bash only B
unixware.polarhome.com bash only B unixware.polarhome.com bash only B
### env_parallel echo :::: <(echo OK) ### env_parallel echo :::: <(echo OK)
@ -314,6 +322,16 @@ tru64.polarhome.com /home/t/tange/.profile
tru64.polarhome.com /home/t/tange/.cshrc tru64.polarhome.com /home/t/tange/.cshrc
tru64.polarhome.com /home/t/tange/.tcshrc tru64.polarhome.com /home/t/tange/.tcshrc
tru64.polarhome.com install-OK tru64.polarhome.com install-OK
ubuntu.polarhome.com Installed env_parallel in:
ubuntu.polarhome.com /home/t/tange/.bashrc
ubuntu.polarhome.com /home/t/tange/.shrc
ubuntu.polarhome.com /home/t/tange/.zshenv
ubuntu.polarhome.com /home/t/tange/.config/fish/config.fish
ubuntu.polarhome.com /home/t/tange/.kshrc
ubuntu.polarhome.com /home/t/tange/.profile
ubuntu.polarhome.com /home/t/tange/.cshrc
ubuntu.polarhome.com /home/t/tange/.tcshrc
ubuntu.polarhome.com install-OK
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
unixware.polarhome.com UX:env: ERROR: No such file or directory: bash unixware.polarhome.com UX:env: ERROR: No such file or directory: bash
aix.polarhome.com env_parallel run-OK aix.polarhome.com env_parallel run-OK
@ -334,6 +352,7 @@ solaris-x86.polarhome.com env_parallel run-OK
solaris.polarhome.com env_parallel run-OK solaris.polarhome.com env_parallel run-OK
suse.polarhome.com env_parallel run-OK suse.polarhome.com env_parallel run-OK
tru64.polarhome.com env_parallel run-OK tru64.polarhome.com env_parallel run-OK
ubuntu.polarhome.com env_parallel run-OK
unixware.polarhome.com env_parallel run-OK unixware.polarhome.com env_parallel run-OK
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
aix.polarhome.com reading from process substitution OK aix.polarhome.com reading from process substitution OK
@ -352,6 +371,7 @@ solaris-x86.polarhome.com reading from process substitution OK
solaris.polarhome.com reading from process substitution OK solaris.polarhome.com reading from process substitution OK
suse.polarhome.com reading from process substitution OK suse.polarhome.com reading from process substitution OK
tru64.polarhome.com reading from process substitution OK tru64.polarhome.com reading from process substitution OK
ubuntu.polarhome.com reading from process substitution OK
### parset arr seq ::: 2 3 4 ### parset arr seq ::: 2 3 4
(bash ksh zsh only) (bash ksh zsh only)
@ -375,6 +395,7 @@ solaris-x86.polarhome.com 1 2 1 2 3 1 2 3 4
solaris.polarhome.com 1 2 1 2 3 1 2 3 4 solaris.polarhome.com 1 2 1 2 3 1 2 3 4
suse.polarhome.com 1 2 1 2 3 1 2 3 4 suse.polarhome.com 1 2 1 2 3 1 2 3 4
tru64.polarhome.com 1 2 1 2 3 1 2 3 4 tru64.polarhome.com 1 2 1 2 3 1 2 3 4
ubuntu.polarhome.com 1 2 1 2 3 1 2 3 4
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected
### env_parset arr seq ::: 2 3 4 ### env_parset arr seq ::: 2 3 4
@ -398,6 +419,7 @@ solaris-x86.polarhome.com 2 2 3 2 3 4
solaris.polarhome.com 1 2 1 2 1 2 solaris.polarhome.com 1 2 1 2 1 2
suse.polarhome.com 2 2 3 2 3 4 suse.polarhome.com 2 2 3 2 3 4
tru64.polarhome.com 2 2 3 2 3 4 tru64.polarhome.com 2 2 3 2 3 4
ubuntu.polarhome.com 2 2 3 2 3 4
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected
@ -423,6 +445,7 @@ solaris-x86.polarhome.com 1 2,1 2 3,1 2 3 4
solaris.polarhome.com 1 2,1 2 3,1 2 3 4 solaris.polarhome.com 1 2,1 2 3,1 2 3 4
suse.polarhome.com 1 2,1 2 3,1 2 3 4 suse.polarhome.com 1 2,1 2 3,1 2 3 4
tru64.polarhome.com 1 2,1 2 3,1 2 3 4 tru64.polarhome.com 1 2,1 2 3,1 2 3 4
ubuntu.polarhome.com 1 2,1 2 3,1 2 3 4
unixware.polarhome.com ,, unixware.polarhome.com ,,
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found
### env_parset var1,var2,var3 seq ::: 2 3 4 ### env_parset var1,var2,var3 seq ::: 2 3 4
@ -446,5 +469,6 @@ solaris-x86.polarhome.com 2,2 3,2 3 4
solaris.polarhome.com 1 2,1 2,1 2 solaris.polarhome.com 1 2,1 2,1 2
suse.polarhome.com 2,2 3,2 3 4 suse.polarhome.com 2,2 3,2 3 4
tru64.polarhome.com 2,2 3,2 3 4 tru64.polarhome.com 2,2 3,2 3 4
ubuntu.polarhome.com 2,2 3,2 3 4
unixware.polarhome.com 2,2 3,2 3 4 unixware.polarhome.com 2,2 3,2 3 4
unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found

View file

@ -539,7 +539,7 @@ B D
seq 10 20 | parallel --tmux 'echo start {}; sleep {}; echo done {}' seq 10 20 | parallel --tmux 'echo start {}; sleep {}; echo done {}'
See output with: tmux -S /tmp/parallel-tutorial-tmpdir/tmsXXXXX attach See output with: tmux -S /tmp/parallel-tutorial-tmpdir/tmsXXXXX attach
tmux -S /tmp/tmsXXXXX attach tmux -S /tmp/tmsXXXXX attach
no current session no sessions
parallel --delay 2.5 echo Starting {}\;date ::: 1 2 3 parallel --delay 2.5 echo Starting {}\;date ::: 1 2 3
Starting 1 Starting 1
DATE OUTPUT DATE OUTPUT
@ -549,8 +549,14 @@ Starting 3
DATE OUTPUT DATE OUTPUT
parallel --timeout 4.1 sleep {}\; echo {} ::: 2 4 6 8 parallel --timeout 4.1 sleep {}\; echo {} ::: 2 4 6 8
9 9
parallel: Warning: This job was killed because it timed out:
parallel: Warning: sleep 6; echo 6
parallel: Warning: This job was killed because it timed out:
parallel: Warning: sleep 8; echo 8
parallel --timeout 200% sleep {}\; echo {} ::: 2.1 2.2 3 7 2.3 parallel --timeout 200% sleep {}\; echo {} ::: 2.1 2.2 3 7 2.3
9 9
parallel: Warning: This job was killed because it timed out:
parallel: Warning: sleep 7; echo 7
parallel --eta sleep ::: 1 3 2 2 1 3 3 2 1 parallel --eta sleep ::: 1 3 2 2 1 3 3 2 1
Computers / CPU cores / Max jobs to run Computers / CPU cores / Max jobs to run
@ -660,6 +666,8 @@ tried 1
export -f show_signals export -f show_signals
echo | parallel --termseq TERM,200,TERM,100,TERM,50,KILL,25 \ echo | parallel --termseq TERM,200,TERM,100,TERM,50,KILL,25 \
-u --timeout 1 show_signals -u --timeout 1 show_signals
parallel: Warning: This job was killed because it timed out:
parallel: Warning: show_signals ''
echo | parallel --termseq INT,200,TERM,100,KILL,25 \ echo | parallel --termseq INT,200,TERM,100,KILL,25 \
-u --timeout 1 show_signals -u --timeout 1 show_signals
/bin/bash: show_signals: command not found /bin/bash: show_signals: command not found
@ -757,42 +765,42 @@ Unknown option: :::
Unknown option: green Unknown option: green
env_parallel only works if it is a function. Do the below and restart your shell. env_parallel only works if it is a function. Do the below and restart your shell.
bash: Put this in ~/.bashrc: . /usr/local/bin/env_parallel.bash bash: Put this in $HOME/.bashrc: . `which env_parallel.bash`
E.g. by doing: echo '. /usr/local/bin/env_parallel.bash' >> ~/.bashrc E.g. by doing: echo '. `which env_parallel.bash`' >> $HOME/.bashrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
zsh: Put this in ~/.zshrc: . /usr/local/bin/env_parallel.zsh zsh: Put this in $HOME/.zshrc: . `which env_parallel.zsh`
E.g. by doing: echo '. /usr/local/bin/env_parallel.zsh' >> ~/.zshenv E.g. by doing: echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
Supports: functions, variables, arrays Supports: functions, variables, arrays
fish: Put this in ~/.config/fish/config.fish: fish: Put this in $HOME/.config/fish/config.fish:
. (which env_parallel.fish) . (which env_parallel.fish)
E.g. by doing: E.g. by doing:
echo '. (which env_parallel.fish)' >> ~/.config/fish/config.fish echo '. (which env_parallel.fish)' >> $HOME/.config/fish/config.fish
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
ksh: Put this in ~/.kshrc: source /usr/local/bin/env_parallel.ksh ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source /usr/local/bin/env_parallel.ksh' >> ~/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
pdksh: Put this in ~/.profile: source /usr/local/bin/env_parallel.pdksh pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. /usr/local/bin/env_parallel.pdksh' >> ~/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
ash: Put this in ~/.profile: . /usr/local/bin/env_parallel.ash ash: Put this in $HOME/.profile: . `which env_parallel.ash`
E.g. by doing: echo '. /usr/local/bin/env_parallel.ash' >> ~/.profile E.g. by doing: echo '. `which env_parallel.ash`' >> $HOME/.profile
Supports: aliases, variables Supports: aliases, variables
dash: Put this in ~/.profile: . /usr/local/bin/env_parallel.dash dash: Put this in $HOME/.profile: . `which env_parallel.dash`
E.g. by doing: echo '. /usr/local/bin/env_parallel.dash' >> ~/.profile E.g. by doing: echo '. `which env_parallel.dash`' >> $HOME/.profile
Supports: aliases, variables Supports: aliases, variables
csh: Put this in ~/.cshrc: source /usr/local/bin/env_parallel.csh csh: Put this in $HOME/.cshrc: source `which env_parallel.csh`
E.g. by doing: echo 'source /usr/local/bin/env_parallel.csh' >> ~/.cshrc E.g. by doing: echo 'source `which env_parallel.csh`' >> $HOME/.cshrc
Supports: aliases, variables, arrays with no special chars Supports: aliases, variables, arrays with no special chars
tcsh: Put this in ~/.tcshrc: source /usr/local/bin/env_parallel.tcsh tcsh: Put this in $HOME/.tcshrc: source `which env_parallel.tcsh`
E.g. by doing: echo 'source /usr/local/bin/env_parallel.tcsh' >> ~/.tcshrc E.g. by doing: echo 'source `which env_parallel.tcsh`' >> $HOME/.tcshrc
Supports: aliases, variables, arrays with no special chars Supports: aliases, variables, arrays with no special chars
To install in all shells run: To install in all shells run:
@ -841,6 +849,7 @@ KONSOLE_DBUS_WINDOW
KONSOLE_PROFILE_NAME KONSOLE_PROFILE_NAME
LANG LANG
LANGUAGE LANGUAGE
LC_ALL
LC_TIME LC_TIME
LESS LESS
LESSCLOSE LESSCLOSE
@ -853,7 +862,6 @@ MAKE_TERMERR
MAKE_TERMOUT MAKE_TERMOUT
MANDATORY_PATH MANDATORY_PATH
MFLAGS MFLAGS
MOZ_NO_REMOTE
ORACLE_HOME ORACLE_HOME
ORACLE_SID ORACLE_SID
PARALLEL PARALLEL
@ -926,42 +934,42 @@ Unknown option: :::
Unknown option: bar Unknown option: bar
env_parallel only works if it is a function. Do the below and restart your shell. env_parallel only works if it is a function. Do the below and restart your shell.
bash: Put this in ~/.bashrc: . /usr/local/bin/env_parallel.bash bash: Put this in $HOME/.bashrc: . `which env_parallel.bash`
E.g. by doing: echo '. /usr/local/bin/env_parallel.bash' >> ~/.bashrc E.g. by doing: echo '. `which env_parallel.bash`' >> $HOME/.bashrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
zsh: Put this in ~/.zshrc: . /usr/local/bin/env_parallel.zsh zsh: Put this in $HOME/.zshrc: . `which env_parallel.zsh`
E.g. by doing: echo '. /usr/local/bin/env_parallel.zsh' >> ~/.zshenv E.g. by doing: echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
Supports: functions, variables, arrays Supports: functions, variables, arrays
fish: Put this in ~/.config/fish/config.fish: fish: Put this in $HOME/.config/fish/config.fish:
. (which env_parallel.fish) . (which env_parallel.fish)
E.g. by doing: E.g. by doing:
echo '. (which env_parallel.fish)' >> ~/.config/fish/config.fish echo '. (which env_parallel.fish)' >> $HOME/.config/fish/config.fish
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
ksh: Put this in ~/.kshrc: source /usr/local/bin/env_parallel.ksh ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source /usr/local/bin/env_parallel.ksh' >> ~/.kshrc E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
pdksh: Put this in ~/.profile: source /usr/local/bin/env_parallel.pdksh pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. /usr/local/bin/env_parallel.pdksh' >> ~/.profile E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays Supports: aliases, functions, variables, arrays
ash: Put this in ~/.profile: . /usr/local/bin/env_parallel.ash ash: Put this in $HOME/.profile: . `which env_parallel.ash`
E.g. by doing: echo '. /usr/local/bin/env_parallel.ash' >> ~/.profile E.g. by doing: echo '. `which env_parallel.ash`' >> $HOME/.profile
Supports: aliases, variables Supports: aliases, variables
dash: Put this in ~/.profile: . /usr/local/bin/env_parallel.dash dash: Put this in $HOME/.profile: . `which env_parallel.dash`
E.g. by doing: echo '. /usr/local/bin/env_parallel.dash' >> ~/.profile E.g. by doing: echo '. `which env_parallel.dash`' >> $HOME/.profile
Supports: aliases, variables Supports: aliases, variables
csh: Put this in ~/.cshrc: source /usr/local/bin/env_parallel.csh csh: Put this in $HOME/.cshrc: source `which env_parallel.csh`
E.g. by doing: echo 'source /usr/local/bin/env_parallel.csh' >> ~/.cshrc E.g. by doing: echo 'source `which env_parallel.csh`' >> $HOME/.cshrc
Supports: aliases, variables, arrays with no special chars Supports: aliases, variables, arrays with no special chars
tcsh: Put this in ~/.tcshrc: source /usr/local/bin/env_parallel.tcsh tcsh: Put this in $HOME/.tcshrc: source `which env_parallel.tcsh`
E.g. by doing: echo 'source /usr/local/bin/env_parallel.tcsh' >> ~/.tcshrc E.g. by doing: echo 'source `which env_parallel.tcsh`' >> $HOME/.tcshrc
Supports: aliases, variables, arrays with no special chars Supports: aliases, variables, arrays with no special chars
To install in all shells run: To install in all shells run:
@ -971,7 +979,7 @@ To install in all shells run:
For details: see man env_parallel For details: see man env_parallel
parallel -vv --pipepart --block 1M wc :::: num30000 parallel -vv --pipepart --block 1M wc :::: num30000
<num30000 perl -e 'while(@ARGV){sysseek(STDIN,shift,0)||die;$left=shift;while($read=sysread(STDIN,$buf,$left>131072?131072:$left)){$left-=$read;syswrite(STDOUT,$buf);}}' 0 0 0 168894 | (wc) <num30000 perl -e 'while(@ARGV){sysseek(STDIN,shift,0)||die;$left=shift;while($read=sysread(STDIN,$buf,$left>131072?131072:$left)){$left-=$read;syswrite(STDOUT,$buf);}}' 0 0 0 168894 |(wc)
30000 30000 168894 30000 30000 168894
my_func3() { my_func3() {
echo in my_func $1 > $1.out echo in my_func $1 > $1.out
@ -983,18 +991,152 @@ ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR && rsync --protocol 30 -rlDzR -essh
parset myvar1,myvar2 echo ::: a b parset myvar1,myvar2 echo ::: a b
echo $myvar1 echo $myvar1
echo $myvar2 echo $myvar2
Unknown option: myvar1,myvar2
Unknown option: echo
Unknown option: :::
Unknown option: a
Unknown option: b
parset only works if it is a function. The function is defined as part
of env_parallel.
Do the below and restart your shell.
bash: Put this in $HOME/.bashrc: . `which env_parallel.bash`
E.g. by doing: echo '. `which env_parallel.bash`' >> $HOME/.bashrc
Supports: aliases, functions, variables, arrays
zsh: Put this in $HOME/.zshrc: . `which env_parallel.zsh`
E.g. by doing: echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
Supports: functions, variables, arrays
fish: Unsupported
ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays
ash: Put this in $HOME/.profile: . `which env_parallel.ash`
E.g. by doing: echo '. `which env_parallel.ash`' >> $HOME/.profile
Supports: aliases, variables
dash: Put this in $HOME/.profile: . `which env_parallel.dash`
E.g. by doing: echo '. `which env_parallel.dash`' >> $HOME/.profile
Supports: aliases, variables
csh: Unsupported
tcsh: Unsupported
To install in all shells run:
parset --install
For details: see man parset
/bin/bash: parset: command not found
parset myarray seq {} 5 ::: 1 2 3 parset myarray seq {} 5 ::: 1 2 3
echo "${myarray[1]}" echo "${myarray[1]}"
Unknown option: myarray
Unknown option: seq
Unknown option: {}
Unknown option: 5
Unknown option: :::
Unknown option: 1
Unknown option: 2
Unknown option: 3
parset only works if it is a function. The function is defined as part
of env_parallel.
Do the below and restart your shell.
bash: Put this in $HOME/.bashrc: . `which env_parallel.bash`
E.g. by doing: echo '. `which env_parallel.bash`' >> $HOME/.bashrc
Supports: aliases, functions, variables, arrays
zsh: Put this in $HOME/.zshrc: . `which env_parallel.zsh`
E.g. by doing: echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
Supports: functions, variables, arrays
fish: Unsupported
ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays
ash: Put this in $HOME/.profile: . `which env_parallel.ash`
E.g. by doing: echo '. `which env_parallel.ash`' >> $HOME/.profile
Supports: aliases, variables
dash: Put this in $HOME/.profile: . `which env_parallel.dash`
E.g. by doing: echo '. `which env_parallel.dash`' >> $HOME/.profile
Supports: aliases, variables
csh: Unsupported
tcsh: Unsupported
To install in all shells run:
parset --install
For details: see man parset
/bin/bash: parset: command not found
cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd") cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd")
parset data ::: "${cmd[@]}" parset data ::: "${cmd[@]}"
echo "${data[0]}" echo "${data[0]}"
echo "${data[1]}" echo "${data[1]}"
Unknown option: data
Unknown option: :::
Unknown option: echo '<<joe "double space" cartoon>>'
Unknown option: pwd
parset only works if it is a function. The function is defined as part
of env_parallel.
Do the below and restart your shell.
bash: Put this in $HOME/.bashrc: . `which env_parallel.bash`
E.g. by doing: echo '. `which env_parallel.bash`' >> $HOME/.bashrc
Supports: aliases, functions, variables, arrays
zsh: Put this in $HOME/.zshrc: . `which env_parallel.zsh`
E.g. by doing: echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
Supports: functions, variables, arrays
fish: Unsupported
ksh: Put this in $HOME/.kshrc: source `which env_parallel.ksh`
E.g. by doing: echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
Supports: aliases, functions, variables, arrays
pdksh: Put this in $HOME/.profile: source `which env_parallel.pdksh`
E.g. by doing: echo '. `which env_parallel.pdksh`' >> $HOME/.profile
Supports: aliases, functions, variables, arrays
ash: Put this in $HOME/.profile: . `which env_parallel.ash`
E.g. by doing: echo '. `which env_parallel.ash`' >> $HOME/.profile
Supports: aliases, variables
dash: Put this in $HOME/.profile: . `which env_parallel.dash`
E.g. by doing: echo '. `which env_parallel.dash`' >> $HOME/.profile
Supports: aliases, variables
csh: Unsupported
tcsh: Unsupported
To install in all shells run:
parset --install
For details: see man parset
/bin/bash: line 1: parset: command not found
parallel --sqlandworker csv:////%2Ftmp%2Flog.csv \ parallel --sqlandworker csv:////%2Ftmp%2Flog.csv \
seq ::: 10 ::: 12 13 14 seq ::: 10 ::: 12 13 14
cat /tmp/log.csv cat /tmp/log.csv
@ -1262,7 +1404,6 @@ The second finished running in the foreground
First started First started
First done First done
sem --id my_id -u 'echo Second started; sleep 10; echo Second done' sem --id my_id -u 'echo Second started; sleep 10; echo Second done'
Second done
sem --jobs 3 --id my_id -u 'echo Start 1; sleep 5; echo 1 done' && sem --jobs 3 --id my_id -u 'echo Start 1; sleep 5; echo 1 done' &&
sem --jobs 3 --id my_id -u 'echo Start 2; sleep 6; echo 2 done' && sem --jobs 3 --id my_id -u 'echo Start 2; sleep 6; echo 2 done' &&
sem --jobs 3 --id my_id -u 'echo Start 3; sleep 7; echo 3 done' && sem --jobs 3 --id my_id -u 'echo Start 3; sleep 7; echo 3 done' &&
@ -1283,8 +1424,8 @@ Start 4
Slow started Slow started
Forced running after 1 sec Forced running after 1 sec
Slow ended Slow ended
Give up after 2 secs
parallel: Warning: Semaphore timed out. Stealing the semaphore. parallel: Warning: Semaphore timed out. Stealing the semaphore.
parallel: Warning: Semaphore timed out. Exiting.
parallel --help parallel --help
Usage: Usage:
@ -1317,15 +1458,15 @@ Academic tradition requires you to cite works you base your article on.
If you use programs that use GNU Parallel to process data for an article in a If you use programs that use GNU Parallel to process data for an article in a
scientific publication, please cite: scientific publication, please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool, O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,
;login: The USENIX Magazine, February 2011:42-47. DOI https://doi.org/10.5281/zenodo.1146014
This helps funding further development; AND IT WON'T COST YOU A CENT. This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing. If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
parallel --version parallel --version
GNU parallel VERSION GNU parallel VERSION
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017 Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,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.
@ -1344,25 +1485,25 @@ Academic tradition requires you to cite works you base your article on.
If you use programs that use GNU Parallel to process data for an article in a If you use programs that use GNU Parallel to process data for an article in a
scientific publication, please cite: scientific publication, please cite:
@article{Tange2011a, @book{tange_ole_2018_1146014,
title = {GNU Parallel - The Command-Line Power Tool}, author = {Tange, Ole},
author = {O. Tange}, title = {GNU Parallel 2018},
address = {Frederiksberg, Denmark}, publisher = {Ole Tange},
journal = {;login: The USENIX Magazine}, month = Mar,
month = {Feb}, year = 2018,
number = {1}, ISBN = {9781387509881},
volume = {36}, doi = {10.5281/zenodo.1146014},
url = {http://www.gnu.org/s/parallel}, url = {https://doi.org/10.5281/zenodo.1146014}
year = {2011},
pages = {42-47},
doi = {http://dx.doi.org/10.5281/zenodo.16303}
} }
(Feel free to use \nocite{Tange2011a}) (Feel free to use \nocite{tange_ole_2018_1146014})
This helps funding further development; AND IT WON'T COST YOU A CENT. This helps funding further development; AND IT WON'T COST YOU A CENT.
If you pay 10000 EUR you should feel free to use GNU Parallel without citing. If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
More about funding GNU Parallel and the citation notice:
https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
If you send a copy of your published article to tange@gnu.org, it will be If you send a copy of your published article to tange@gnu.org, it will be
mentioned in the release notes of next version of GNU Parallel. mentioned in the release notes of next version of GNU Parallel.