mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 22:17:54 +00:00
Merge branch 'master' of git://git.savannah.gnu.org/parallel
This commit is contained in:
commit
32eed243b8
37
Makefile.in
37
Makefile.in
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.11.3 from Makefile.am.
|
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
@ -15,6 +15,23 @@
|
||||||
|
|
||||||
@SET_MAKE@
|
@SET_MAKE@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
|
am__make_dryrun = \
|
||||||
|
{ \
|
||||||
|
am__dry=no; \
|
||||||
|
case $$MAKEFLAGS in \
|
||||||
|
*\\[\ \ ]*) \
|
||||||
|
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||||
|
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||||
|
*) \
|
||||||
|
for am__flg in $$MAKEFLAGS; do \
|
||||||
|
case $$am__flg in \
|
||||||
|
*=*|--*) ;; \
|
||||||
|
*n*) am__dry=yes; break;; \
|
||||||
|
esac; \
|
||||||
|
done;; \
|
||||||
|
esac; \
|
||||||
|
test $$am__dry = yes; \
|
||||||
|
}
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
|
@ -54,6 +71,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||||
install-pdf-recursive install-ps-recursive install-recursive \
|
install-pdf-recursive install-ps-recursive install-recursive \
|
||||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
installcheck-recursive installdirs-recursive pdf-recursive \
|
||||||
ps-recursive uninstall-recursive
|
ps-recursive uninstall-recursive
|
||||||
|
am__can_run_installinfo = \
|
||||||
|
case $$AM_UPDATE_INFO_DIR in \
|
||||||
|
n|no|NO) false;; \
|
||||||
|
*) (install-info --version) >/dev/null 2>&1;; \
|
||||||
|
esac
|
||||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||||
distclean-recursive maintainer-clean-recursive
|
distclean-recursive maintainer-clean-recursive
|
||||||
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
||||||
|
@ -398,13 +420,10 @@ distdir: $(DISTFILES)
|
||||||
done
|
done
|
||||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||||
if test "$$subdir" = .; then :; else \
|
if test "$$subdir" = .; then :; else \
|
||||||
test -d "$(distdir)/$$subdir" \
|
$(am__make_dryrun) \
|
||||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
|| test -d "$(distdir)/$$subdir" \
|
||||||
|| exit 1; \
|
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||||
fi; \
|
|| exit 1; \
|
||||||
done
|
|
||||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
if test "$$subdir" = .; then :; else \
|
|
||||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||||
$(am__relativize); \
|
$(am__relativize); \
|
||||||
new_distdir=$$reldir; \
|
new_distdir=$$reldir; \
|
||||||
|
@ -490,7 +509,7 @@ distcheck: dist
|
||||||
*.zip*) \
|
*.zip*) \
|
||||||
unzip $(distdir).zip ;;\
|
unzip $(distdir).zip ;;\
|
||||||
esac
|
esac
|
||||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
chmod -R a-w $(distdir); chmod u+w $(distdir)
|
||||||
mkdir $(distdir)/_build
|
mkdir $(distdir)/_build
|
||||||
mkdir $(distdir)/_inst
|
mkdir $(distdir)/_inst
|
||||||
chmod a-w $(distdir)
|
chmod a-w $(distdir)
|
||||||
|
|
11
NEWS
11
NEWS
|
@ -1,3 +1,14 @@
|
||||||
|
20120822
|
||||||
|
|
||||||
|
* Due to a bugfix the main flow has changed. Making this release beta
|
||||||
|
quality.
|
||||||
|
|
||||||
|
* Parallel Proxy Scraper & Checker Tool
|
||||||
|
https://www.youtube.com/watch?v=iXCeR_XsP6o
|
||||||
|
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
20120722
|
20120722
|
||||||
|
|
||||||
* GNU Parallel was presented at Chiang Mai Bar Camp
|
* GNU Parallel was presented at Chiang Mai Bar Camp
|
||||||
|
|
15
README
15
README
|
@ -24,9 +24,9 @@ you would get had you run the commands sequentially. This makes it
|
||||||
possible to use output from GNU Parallel as input for other programs.
|
possible to use output from GNU Parallel as input for other programs.
|
||||||
|
|
||||||
|
|
||||||
= Installation =
|
= Full installation =
|
||||||
|
|
||||||
Installation of GNU Parallel is as simple as:
|
Full installation of GNU Parallel is as simple as:
|
||||||
|
|
||||||
./configure && make && make install
|
./configure && make && make install
|
||||||
|
|
||||||
|
@ -38,10 +38,19 @@ If you are not root you can add ~/bin to your path and install in
|
||||||
Or if your system lacks 'make' you can simply copy src/parallel
|
Or if your system lacks 'make' you can simply copy src/parallel
|
||||||
src/sem src/niceload src/sql to a dir in your path.
|
src/sem src/niceload src/sql to a dir in your path.
|
||||||
|
|
||||||
If you just need parallel in a pinch:
|
|
||||||
|
= Minimal installation =
|
||||||
|
|
||||||
|
If you just need parallel and do not have 'make' installed (maybe the
|
||||||
|
system is old or Microsoft Windows):
|
||||||
|
|
||||||
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
|
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
|
||||||
chmod 755 parallel
|
chmod 755 parallel
|
||||||
|
cp parallel sem
|
||||||
|
mv parallel sem dir-in-your-$PATH/bin/
|
||||||
|
|
||||||
|
|
||||||
|
= Test the installation =
|
||||||
|
|
||||||
After this you should be able to do:
|
After this you should be able to do:
|
||||||
|
|
||||||
|
|
10
aclocal.m4
vendored
10
aclocal.m4
vendored
|
@ -1,4 +1,4 @@
|
||||||
# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
|
# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
|
# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
|
||||||
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
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
|
||||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
|
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
|
||||||
[m4_warning([this file was generated for autoconf 2.68.
|
[m4_warning([this file was generated for autoconf 2.69.
|
||||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
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'.])])
|
||||||
|
@ -38,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||||
[am__api_version='1.11'
|
[am__api_version='1.11'
|
||||||
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.11.3], [],
|
m4_if([$1], [1.11.6], [],
|
||||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ 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.11.3])dnl
|
[AM_AUTOMAKE_VERSION([1.11.6])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]))])
|
||||||
|
|
196
configure
vendored
196
configure
vendored
|
@ -1,13 +1,11 @@
|
||||||
#! /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.68 for parallel 20120722.
|
# Generated by GNU Autoconf 2.69 for parallel 20120822.
|
||||||
#
|
#
|
||||||
# Report bugs to <bug-parallel@gnu.org>.
|
# Report bugs to <bug-parallel@gnu.org>.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||||
# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
|
|
||||||
# Foundation, Inc.
|
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# This configure script is free software; the Free Software Foundation
|
# This configure script is free software; the Free Software Foundation
|
||||||
|
@ -136,6 +134,31 @@ export LANGUAGE
|
||||||
# CDPATH.
|
# CDPATH.
|
||||||
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
||||||
|
|
||||||
|
# Use a proper internal environment variable to ensure we don't fall
|
||||||
|
# into an infinite loop, continuously re-executing ourselves.
|
||||||
|
if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
|
||||||
|
_as_can_reexec=no; export _as_can_reexec;
|
||||||
|
# We cannot yet assume a decent shell, so we have to provide a
|
||||||
|
# neutralization value for shells without unset; and this also
|
||||||
|
# works around shells that cannot unset nonexistent variables.
|
||||||
|
# Preserve -v and -x to the replacement shell.
|
||||||
|
BASH_ENV=/dev/null
|
||||||
|
ENV=/dev/null
|
||||||
|
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
|
||||||
|
case $- in # ((((
|
||||||
|
*v*x* | *x*v* ) as_opts=-vx ;;
|
||||||
|
*v* ) as_opts=-v ;;
|
||||||
|
*x* ) as_opts=-x ;;
|
||||||
|
* ) as_opts= ;;
|
||||||
|
esac
|
||||||
|
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
|
||||||
|
# Admittedly, this is quite paranoid, since all the known shells bail
|
||||||
|
# out after a failed `exec'.
|
||||||
|
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
|
||||||
|
as_fn_exit 255
|
||||||
|
fi
|
||||||
|
# We don't want this to propagate to other subprocesses.
|
||||||
|
{ _as_can_reexec=; unset _as_can_reexec;}
|
||||||
if test "x$CONFIG_SHELL" = x; then
|
if test "x$CONFIG_SHELL" = x; then
|
||||||
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
|
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
|
||||||
emulate sh
|
emulate sh
|
||||||
|
@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
|
||||||
else
|
else
|
||||||
exitcode=1; echo positional parameters were not saved.
|
exitcode=1; echo positional parameters were not saved.
|
||||||
fi
|
fi
|
||||||
test x\$exitcode = x0 || exit 1"
|
test x\$exitcode = x0 || exit 1
|
||||||
|
test -x / || exit 1"
|
||||||
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
|
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
|
||||||
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
|
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
|
||||||
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
|
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
|
||||||
|
@ -213,21 +237,25 @@ IFS=$as_save_IFS
|
||||||
|
|
||||||
|
|
||||||
if test "x$CONFIG_SHELL" != x; then :
|
if test "x$CONFIG_SHELL" != x; then :
|
||||||
# We cannot yet assume a decent shell, so we have to provide a
|
export CONFIG_SHELL
|
||||||
# neutralization value for shells without unset; and this also
|
# We cannot yet assume a decent shell, so we have to provide a
|
||||||
# works around shells that cannot unset nonexistent variables.
|
# neutralization value for shells without unset; and this also
|
||||||
# Preserve -v and -x to the replacement shell.
|
# works around shells that cannot unset nonexistent variables.
|
||||||
BASH_ENV=/dev/null
|
# Preserve -v and -x to the replacement shell.
|
||||||
ENV=/dev/null
|
BASH_ENV=/dev/null
|
||||||
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
|
ENV=/dev/null
|
||||||
export CONFIG_SHELL
|
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
|
||||||
case $- in # ((((
|
case $- in # ((((
|
||||||
*v*x* | *x*v* ) as_opts=-vx ;;
|
*v*x* | *x*v* ) as_opts=-vx ;;
|
||||||
*v* ) as_opts=-v ;;
|
*v* ) as_opts=-v ;;
|
||||||
*x* ) as_opts=-x ;;
|
*x* ) as_opts=-x ;;
|
||||||
* ) as_opts= ;;
|
* ) as_opts= ;;
|
||||||
esac
|
esac
|
||||||
exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
|
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
|
||||||
|
# Admittedly, this is quite paranoid, since all the known shells bail
|
||||||
|
# out after a failed `exec'.
|
||||||
|
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
|
||||||
|
exit 255
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x$as_have_required = xno; then :
|
if test x$as_have_required = xno; then :
|
||||||
|
@ -330,6 +358,14 @@ $as_echo X"$as_dir" |
|
||||||
|
|
||||||
|
|
||||||
} # as_fn_mkdir_p
|
} # as_fn_mkdir_p
|
||||||
|
|
||||||
|
# as_fn_executable_p FILE
|
||||||
|
# -----------------------
|
||||||
|
# Test if FILE is an executable regular file.
|
||||||
|
as_fn_executable_p ()
|
||||||
|
{
|
||||||
|
test -f "$1" && test -x "$1"
|
||||||
|
} # as_fn_executable_p
|
||||||
# as_fn_append VAR VALUE
|
# as_fn_append VAR VALUE
|
||||||
# ----------------------
|
# ----------------------
|
||||||
# Append the text in VALUE to the end of the definition contained in VAR. Take
|
# Append the text in VALUE to the end of the definition contained in VAR. Take
|
||||||
|
@ -451,6 +487,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
|
||||||
chmod +x "$as_me.lineno" ||
|
chmod +x "$as_me.lineno" ||
|
||||||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
|
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
|
||||||
|
|
||||||
|
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
|
||||||
|
# already done that, so ensure we don't try to do so again and fall
|
||||||
|
# in an infinite loop. This has already happened in practice.
|
||||||
|
_as_can_reexec=no; export _as_can_reexec
|
||||||
# Don't try to exec as it changes $[0], causing all sort of problems
|
# Don't try to exec as it changes $[0], causing all sort of problems
|
||||||
# (the dirname of $[0] is not the place where we might find the
|
# (the dirname of $[0] is not the place where we might find the
|
||||||
# original and so on. Autoconf is especially sensitive to this).
|
# original and so on. Autoconf is especially sensitive to this).
|
||||||
|
@ -485,16 +525,16 @@ if (echo >conf$$.file) 2>/dev/null; then
|
||||||
# ... but there are two gotchas:
|
# ... but there are two gotchas:
|
||||||
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
|
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
|
||||||
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
|
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
|
||||||
# In both cases, we have to default to `cp -p'.
|
# In both cases, we have to default to `cp -pR'.
|
||||||
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
|
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
|
||||||
as_ln_s='cp -p'
|
as_ln_s='cp -pR'
|
||||||
elif ln conf$$.file conf$$ 2>/dev/null; then
|
elif ln conf$$.file conf$$ 2>/dev/null; then
|
||||||
as_ln_s=ln
|
as_ln_s=ln
|
||||||
else
|
else
|
||||||
as_ln_s='cp -p'
|
as_ln_s='cp -pR'
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
as_ln_s='cp -p'
|
as_ln_s='cp -pR'
|
||||||
fi
|
fi
|
||||||
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
|
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
|
||||||
rmdir conf$$.dir 2>/dev/null
|
rmdir conf$$.dir 2>/dev/null
|
||||||
|
@ -506,28 +546,8 @@ else
|
||||||
as_mkdir_p=false
|
as_mkdir_p=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -x / >/dev/null 2>&1; then
|
as_test_x='test -x'
|
||||||
as_test_x='test -x'
|
as_executable_p=as_fn_executable_p
|
||||||
else
|
|
||||||
if ls -dL / >/dev/null 2>&1; then
|
|
||||||
as_ls_L_option=L
|
|
||||||
else
|
|
||||||
as_ls_L_option=
|
|
||||||
fi
|
|
||||||
as_test_x='
|
|
||||||
eval sh -c '\''
|
|
||||||
if test -d "$1"; then
|
|
||||||
test -d "$1/.";
|
|
||||||
else
|
|
||||||
case $1 in #(
|
|
||||||
-*)set "./$1";;
|
|
||||||
esac;
|
|
||||||
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
|
|
||||||
???[sx]*):;;*)false;;esac;fi
|
|
||||||
'\'' sh
|
|
||||||
'
|
|
||||||
fi
|
|
||||||
as_executable_p=$as_test_x
|
|
||||||
|
|
||||||
# Sed expression to map a string onto a valid CPP name.
|
# Sed expression to map a string onto a valid CPP name.
|
||||||
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
||||||
|
@ -559,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='20120722'
|
PACKAGE_VERSION='20120822'
|
||||||
PACKAGE_STRING='parallel 20120722'
|
PACKAGE_STRING='parallel 20120822'
|
||||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1089,8 +1109,6 @@ target=$target_alias
|
||||||
if test "x$host_alias" != x; then
|
if test "x$host_alias" != x; then
|
||||||
if test "x$build_alias" = x; then
|
if test "x$build_alias" = x; then
|
||||||
cross_compiling=maybe
|
cross_compiling=maybe
|
||||||
$as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
|
|
||||||
If a cross compiler is detected then cross compile mode will be used" >&2
|
|
||||||
elif test "x$build_alias" != "x$host_alias"; then
|
elif test "x$build_alias" != "x$host_alias"; then
|
||||||
cross_compiling=yes
|
cross_compiling=yes
|
||||||
fi
|
fi
|
||||||
|
@ -1176,7 +1194,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 20120722 to adapt to many kinds of systems.
|
\`configure' configures parallel 20120822 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1242,7 +1260,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 20120722:";;
|
short | recursive ) echo "Configuration of parallel 20120822:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1309,10 +1327,10 @@ 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 20120722
|
parallel configure 20120822
|
||||||
generated by GNU Autoconf 2.68
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
This configure script is free software; the Free Software Foundation
|
This configure script is free software; the Free Software Foundation
|
||||||
gives unlimited permission to copy, distribute and modify it.
|
gives unlimited permission to copy, distribute and modify it.
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
@ -1326,8 +1344,8 @@ 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 20120722, which was
|
It was created by parallel $as_me 20120822, which was
|
||||||
generated by GNU Autoconf 2.68. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
|
||||||
|
@ -1742,7 +1760,7 @@ case $as_dir/ in #((
|
||||||
# by default.
|
# by default.
|
||||||
for ac_prog in ginstall scoinst install; do
|
for ac_prog in ginstall scoinst install; do
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
|
if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
|
||||||
if test $ac_prog = install &&
|
if test $ac_prog = install &&
|
||||||
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
|
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
|
||||||
# AIX install. It has an incompatible calling convention.
|
# AIX install. It has an incompatible calling convention.
|
||||||
|
@ -1911,7 +1929,7 @@ do
|
||||||
IFS=$as_save_IFS
|
IFS=$as_save_IFS
|
||||||
test -z "$as_dir" && as_dir=.
|
test -z "$as_dir" && as_dir=.
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||||
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
|
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
|
||||||
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
break 2
|
break 2
|
||||||
|
@ -1951,7 +1969,7 @@ do
|
||||||
IFS=$as_save_IFS
|
IFS=$as_save_IFS
|
||||||
test -z "$as_dir" && as_dir=.
|
test -z "$as_dir" && as_dir=.
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||||
ac_cv_prog_ac_ct_STRIP="strip"
|
ac_cv_prog_ac_ct_STRIP="strip"
|
||||||
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
break 2
|
break 2
|
||||||
|
@ -2002,7 +2020,7 @@ do
|
||||||
test -z "$as_dir" && as_dir=.
|
test -z "$as_dir" && as_dir=.
|
||||||
for ac_prog in mkdir gmkdir; do
|
for ac_prog in mkdir gmkdir; do
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
{ test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
|
as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
|
||||||
case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
|
case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
|
||||||
'mkdir (GNU coreutils) '* | \
|
'mkdir (GNU coreutils) '* | \
|
||||||
'mkdir (coreutils) '* | \
|
'mkdir (coreutils) '* | \
|
||||||
|
@ -2055,7 +2073,7 @@ do
|
||||||
IFS=$as_save_IFS
|
IFS=$as_save_IFS
|
||||||
test -z "$as_dir" && as_dir=.
|
test -z "$as_dir" && as_dir=.
|
||||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||||
ac_cv_prog_AWK="$ac_prog"
|
ac_cv_prog_AWK="$ac_prog"
|
||||||
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
break 2
|
break 2
|
||||||
|
@ -2141,7 +2159,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='parallel'
|
PACKAGE='parallel'
|
||||||
VERSION='20120722'
|
VERSION='20120822'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -2593,16 +2611,16 @@ if (echo >conf$$.file) 2>/dev/null; then
|
||||||
# ... but there are two gotchas:
|
# ... but there are two gotchas:
|
||||||
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
|
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
|
||||||
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
|
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
|
||||||
# In both cases, we have to default to `cp -p'.
|
# In both cases, we have to default to `cp -pR'.
|
||||||
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
|
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
|
||||||
as_ln_s='cp -p'
|
as_ln_s='cp -pR'
|
||||||
elif ln conf$$.file conf$$ 2>/dev/null; then
|
elif ln conf$$.file conf$$ 2>/dev/null; then
|
||||||
as_ln_s=ln
|
as_ln_s=ln
|
||||||
else
|
else
|
||||||
as_ln_s='cp -p'
|
as_ln_s='cp -pR'
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
as_ln_s='cp -p'
|
as_ln_s='cp -pR'
|
||||||
fi
|
fi
|
||||||
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
|
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
|
||||||
rmdir conf$$.dir 2>/dev/null
|
rmdir conf$$.dir 2>/dev/null
|
||||||
|
@ -2662,28 +2680,16 @@ else
|
||||||
as_mkdir_p=false
|
as_mkdir_p=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -x / >/dev/null 2>&1; then
|
|
||||||
as_test_x='test -x'
|
# as_fn_executable_p FILE
|
||||||
else
|
# -----------------------
|
||||||
if ls -dL / >/dev/null 2>&1; then
|
# Test if FILE is an executable regular file.
|
||||||
as_ls_L_option=L
|
as_fn_executable_p ()
|
||||||
else
|
{
|
||||||
as_ls_L_option=
|
test -f "$1" && test -x "$1"
|
||||||
fi
|
} # as_fn_executable_p
|
||||||
as_test_x='
|
as_test_x='test -x'
|
||||||
eval sh -c '\''
|
as_executable_p=as_fn_executable_p
|
||||||
if test -d "$1"; then
|
|
||||||
test -d "$1/.";
|
|
||||||
else
|
|
||||||
case $1 in #(
|
|
||||||
-*)set "./$1";;
|
|
||||||
esac;
|
|
||||||
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
|
|
||||||
???[sx]*):;;*)false;;esac;fi
|
|
||||||
'\'' sh
|
|
||||||
'
|
|
||||||
fi
|
|
||||||
as_executable_p=$as_test_x
|
|
||||||
|
|
||||||
# Sed expression to map a string onto a valid CPP name.
|
# Sed expression to map a string onto a valid CPP name.
|
||||||
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
||||||
|
@ -2704,8 +2710,8 @@ 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 20120722, which was
|
This file was extended by parallel $as_me 20120822, which was
|
||||||
generated by GNU Autoconf 2.68. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
CONFIG_HEADERS = $CONFIG_HEADERS
|
CONFIG_HEADERS = $CONFIG_HEADERS
|
||||||
|
@ -2766,11 +2772,11 @@ _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 20120722
|
parallel config.status 20120822
|
||||||
configured by $0, generated by GNU Autoconf 2.68,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
This config.status script is free software; the Free Software Foundation
|
This config.status script is free software; the Free Software Foundation
|
||||||
gives unlimited permission to copy, distribute and modify it."
|
gives unlimited permission to copy, distribute and modify it."
|
||||||
|
|
||||||
|
@ -2861,7 +2867,7 @@ fi
|
||||||
_ACEOF
|
_ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
if \$ac_cs_recheck; then
|
if \$ac_cs_recheck; then
|
||||||
set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
|
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
|
||||||
shift
|
shift
|
||||||
\$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
|
\$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
|
||||||
CONFIG_SHELL='$SHELL'
|
CONFIG_SHELL='$SHELL'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AC_INIT([parallel], [20120722], [bug-parallel@gnu.org])
|
AC_INIT([parallel], [20120822], [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([
|
||||||
|
|
|
@ -171,24 +171,18 @@ cc:Sandro Cazzaniga <kharec@mandriva.org>,
|
||||||
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
||||||
Jesse Alama <jesse.alama@gmail.com>
|
Jesse Alama <jesse.alama@gmail.com>
|
||||||
|
|
||||||
Subject: GNU Parallel 20120722 ('Nai Soi') released
|
Subject: GNU Parallel 20120822 ('Boson') released
|
||||||
|
|
||||||
GNU Parallel 20127022 ('Nai Soi') has been released. It is
|
GNU Parallel 20120822 ('Boson') has been released. It is
|
||||||
available for download at: http://ftp.gnu.org/gnu/parallel/
|
available for download at: http://ftp.gnu.org/gnu/parallel/
|
||||||
|
|
||||||
This is a bugfix release with no new features. Probably a good release
|
|
||||||
for stable long-term use.
|
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
* GNU Parallel was presented at Chiang Mai Bar Camp
|
* Due to a bugfix the main flow has changed. Making this release beta
|
||||||
http://barcampchiangmai.org/
|
quality.
|
||||||
See write up here:
|
|
||||||
http://www.cnx-software.com/2012/07/02/use-gnu-parallel-to-speed-up-script-execution-on-multiple-cores-andor-machines/
|
|
||||||
|
|
||||||
* I don't always max out all my CPUs, but when I do, I do it with GNU
|
* Parallel Proxy Scraper & Checker Tool
|
||||||
Parallel.
|
https://www.youtube.com/watch?v=iXCeR_XsP6o
|
||||||
http://memegenerator.net/instance/22638454
|
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
|
@ -121,11 +121,19 @@ xargs or cat | sh.</description>
|
||||||
<implementation id="sha1new=006f918cda3a7cbe620f6e2b66123379c1948089" released="2012-06-23" version="20120622">
|
<implementation id="sha1new=006f918cda3a7cbe620f6e2b66123379c1948089" released="2012-06-23" version="20120622">
|
||||||
<manifest-digest sha256="b1182ecf93c1b93e0cf3f22784c27c01f7aa64801f038b652624c3e210e03dea"/>
|
<manifest-digest sha256="b1182ecf93c1b93e0cf3f22784c27c01f7aa64801f038b652624c3e210e03dea"/>
|
||||||
<archive extract="parallel-20120622" href="http://ftp.gnu.org/gnu/parallel/parallel-20120622.tar.bz2" size="228881"/>
|
<archive extract="parallel-20120622" href="http://ftp.gnu.org/gnu/parallel/parallel-20120622.tar.bz2" size="228881"/>
|
||||||
|
</implementation>
|
||||||
|
<implementation id="sha1new=36a6f13e597193d7d163ca5c6a5097eceecc6dab" released="2012-08-23" version="20120722">
|
||||||
|
<manifest-digest sha256="d10af8e443c12b8540a6b8ecc41f0ca480d851f45b1b93bac3001d1a5031d76c"/>
|
||||||
|
<archive extract="parallel-20120722" href="http://ftp.gnu.org/gnu/parallel/parallel-20120722.tar.bz2" size="230141"/>
|
||||||
|
</implementation>
|
||||||
|
<implementation id="sha1new=f5da0850d901d05b9086bf5599d72ba30f7d9685" released="2012-08-23" version="20120822">
|
||||||
|
<manifest-digest sha256="98efd866ca5cf6737922d1caf3802488ce572fadd1b643161a3a0836d8ad1790"/>
|
||||||
|
<archive extract="parallel-20120822" href="http://ftp.gnu.org/gnu/parallel/parallel-20120822.tar.bz2" size="231076"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
</group>
|
</group>
|
||||||
</interface>
|
</interface>
|
||||||
<!-- Base64 Signature
|
<!-- Base64 Signature
|
||||||
iEYEABECAAYFAk/lnIgACgkQ/lhgK1iJTtKfrgCeIjYITindJa50NjPqxCes8e7kF1MAn0qMTpwx
|
iEYEABECAAYFAlA1WzcACgkQ/lhgK1iJTtKhkACgxcdVkWLq2uqYma1g+qHKO9vfNJwAni1y3U2u
|
||||||
cvnKdRDwC1px3+HQg435
|
AKT0/BQ6dfyxD1y2zqru
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
|
@ -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: 20120722
|
Version: 20120822
|
||||||
Release: 1
|
Release: 1
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Productivity/File utilities
|
Group: Productivity/File utilities
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.11.3 from Makefile.am.
|
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
@ -17,6 +17,23 @@
|
||||||
|
|
||||||
|
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
|
am__make_dryrun = \
|
||||||
|
{ \
|
||||||
|
am__dry=no; \
|
||||||
|
case $$MAKEFLAGS in \
|
||||||
|
*\\[\ \ ]*) \
|
||||||
|
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||||
|
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||||
|
*) \
|
||||||
|
for am__flg in $$MAKEFLAGS; do \
|
||||||
|
case $$am__flg in \
|
||||||
|
*=*|--*) ;; \
|
||||||
|
*n*) am__dry=yes; break;; \
|
||||||
|
esac; \
|
||||||
|
done;; \
|
||||||
|
esac; \
|
||||||
|
test $$am__dry = yes; \
|
||||||
|
}
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
|
@ -75,6 +92,11 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
|
||||||
SCRIPTS = $(bin_SCRIPTS)
|
SCRIPTS = $(bin_SCRIPTS)
|
||||||
SOURCES =
|
SOURCES =
|
||||||
DIST_SOURCES =
|
DIST_SOURCES =
|
||||||
|
am__can_run_installinfo = \
|
||||||
|
case $$AM_UPDATE_INFO_DIR in \
|
||||||
|
n|no|NO) false;; \
|
||||||
|
*) (install-info --version) >/dev/null 2>&1;; \
|
||||||
|
esac
|
||||||
man1dir = $(mandir)/man1
|
man1dir = $(mandir)/man1
|
||||||
NROFF = nroff
|
NROFF = nroff
|
||||||
MANS = $(man_MANS)
|
MANS = $(man_MANS)
|
||||||
|
@ -197,8 +219,11 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||||
$(am__aclocal_m4_deps):
|
$(am__aclocal_m4_deps):
|
||||||
install-binSCRIPTS: $(bin_SCRIPTS)
|
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
|
|
||||||
@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
|
@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||||
|
fi; \
|
||||||
for p in $$list; do \
|
for p in $$list; do \
|
||||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
|
if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
|
||||||
|
@ -229,11 +254,18 @@ uninstall-binSCRIPTS:
|
||||||
dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
|
dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
|
||||||
install-man1: $(man_MANS)
|
install-man1: $(man_MANS)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
|
@list1=''; \
|
||||||
@list=''; test -n "$(man1dir)" || exit 0; \
|
list2='$(man_MANS)'; \
|
||||||
{ for i in $$list; do echo "$$i"; done; \
|
test -n "$(man1dir)" \
|
||||||
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
|
&& test -n "`echo $$list1$$list2`" \
|
||||||
sed -n '/\.1[a-z]*$$/p'; \
|
|| exit 0; \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
|
||||||
|
{ for i in $$list1; do echo "$$i"; done; \
|
||||||
|
if test -n "$$list2"; then \
|
||||||
|
for i in $$list2; do echo "$$i"; done \
|
||||||
|
| sed -n '/\.1[a-z]*$$/p'; \
|
||||||
|
fi; \
|
||||||
} | while read p; do \
|
} | while read p; do \
|
||||||
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
|
||||||
echo "$$d$$p"; echo "$$p"; \
|
echo "$$d$$p"; echo "$$p"; \
|
||||||
|
@ -265,8 +297,11 @@ uninstall-man1:
|
||||||
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
|
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
|
||||||
install-docDATA: $(doc_DATA)
|
install-docDATA: $(doc_DATA)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
|
|
||||||
@list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
|
@list='$(doc_DATA)'; test -n "$(docdir)" || list=; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
|
||||||
|
fi; \
|
||||||
for p in $$list; do \
|
for p in $$list; do \
|
||||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
echo "$$d$$p"; \
|
echo "$$d$$p"; \
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
$Global::progname="niceload";
|
$Global::progname="niceload";
|
||||||
$Global::version = 20120722;
|
$Global::version = 20120822;
|
||||||
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) {
|
||||||
|
|
331
src/parallel
331
src/parallel
|
@ -34,8 +34,8 @@ use strict;
|
||||||
$::oodebug=0;
|
$::oodebug=0;
|
||||||
$SIG{TERM} ||= sub { exit 0; }; # $SIG{TERM} is not set on Mac OS X
|
$SIG{TERM} ||= sub { exit 0; }; # $SIG{TERM} is not set on Mac OS X
|
||||||
if(not $ENV{SHELL}) {
|
if(not $ENV{SHELL}) {
|
||||||
# $ENV{SHELL} is sometimes not set on Mac OS X
|
# $ENV{SHELL} is sometimes not set on Mac OS X and Windows
|
||||||
print STDERR ("parallel: Warning: \$SHELL not set. Using /bin/sh\n");
|
::warning("\$SHELL not set. Using /bin/sh.\n");
|
||||||
$ENV{SHELL} = "/bin/sh";
|
$ENV{SHELL} = "/bin/sh";
|
||||||
}
|
}
|
||||||
%Global::original_sig = %SIG;
|
%Global::original_sig = %SIG;
|
||||||
|
@ -110,9 +110,8 @@ if($::opt_filter_hosts) {
|
||||||
} elsif($col[6] eq "127") {
|
} elsif($col[6] eq "127") {
|
||||||
# signal == 127: parallel not installed remote
|
# signal == 127: parallel not installed remote
|
||||||
# Set ncpus and ncores = 1
|
# Set ncpus and ncores = 1
|
||||||
print $Global::original_stderr
|
::warning("Could not figure out ",
|
||||||
("parallel: Warning: Could not figure out ",
|
"number of cpus on $col[1]. Using 1.\n");
|
||||||
"number of cpus on $col[1]. Using 1\n");
|
|
||||||
$ncores{$col[1]} = 1;
|
$ncores{$col[1]} = 1;
|
||||||
$ncpus{$col[1]} = 1;
|
$ncpus{$col[1]} = 1;
|
||||||
$maxlen{$col[1]} = Limits::Command::max_length();
|
$maxlen{$col[1]} = Limits::Command::max_length();
|
||||||
|
@ -408,7 +407,7 @@ sub write_record_to_pipe {
|
||||||
$job->write(\$record);
|
$job->write(\$record);
|
||||||
my $fh = $job->stdin();
|
my $fh = $job->stdin();
|
||||||
close $fh;
|
close $fh;
|
||||||
exit;
|
exit(0);
|
||||||
}
|
}
|
||||||
my $fh = $job->stdin();
|
my $fh = $job->stdin();
|
||||||
close $fh;
|
close $fh;
|
||||||
|
@ -510,6 +509,7 @@ sub options_hash {
|
||||||
"arg-sep|argsep=s" => \$::opt_arg_sep,
|
"arg-sep|argsep=s" => \$::opt_arg_sep,
|
||||||
"arg-file-sep|argfilesep=s" => \$::opt_arg_file_sep,
|
"arg-file-sep|argfilesep=s" => \$::opt_arg_file_sep,
|
||||||
"trim=s" => \$::opt_trim,
|
"trim=s" => \$::opt_trim,
|
||||||
|
"plain" => \$::opt_plain,
|
||||||
"profile|J=s" => \@::opt_profile,
|
"profile|J=s" => \@::opt_profile,
|
||||||
"pipe|spreadstdin" => \$::opt_pipe,
|
"pipe|spreadstdin" => \$::opt_pipe,
|
||||||
"recstart=s" => \$::opt_recstart,
|
"recstart=s" => \$::opt_recstart,
|
||||||
|
@ -584,7 +584,7 @@ sub get_options_from_array {
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
# Returns: N/A
|
# Returns: N/A
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20120722;
|
$Global::version = 20120822;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -614,13 +614,13 @@ sub parse_options {
|
||||||
@ARGV=read_options();
|
@ARGV=read_options();
|
||||||
|
|
||||||
if(defined $::opt_retired) {
|
if(defined $::opt_retired) {
|
||||||
print STDERR "$Global::progname: -g has been retired. Use --group.\n";
|
::error("-g has been retired. Use --group.\n");
|
||||||
print STDERR "$Global::progname: -B has been retired. Use --bf.\n";
|
::error("-B has been retired. Use --bf.\n");
|
||||||
print STDERR "$Global::progname: -T has been retired. Use --tty.\n";
|
::error("-T has been retired. Use --tty.\n");
|
||||||
print STDERR "$Global::progname: -U has been retired. Use --er.\n";
|
::error("-U has been retired. Use --er.\n");
|
||||||
print STDERR "$Global::progname: -W has been retired. Use --wd.\n";
|
::error("-W has been retired. Use --wd.\n");
|
||||||
print STDERR "$Global::progname: -Y has been retired. Use --shebang.\n";
|
::error("-Y has been retired. Use --shebang.\n");
|
||||||
print STDERR "$Global::progname: -H has been retired. Use --halt.\n";
|
::error("-H has been retired. Use --halt.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
if(@::opt_v) { $Global::verbose = $#::opt_v+1; } # Convert -v -v to v=2
|
if(@::opt_v) { $Global::verbose = $#::opt_v+1; } # Convert -v -v to v=2
|
||||||
|
@ -690,7 +690,7 @@ sub parse_options {
|
||||||
wait_and_exit(0);
|
wait_and_exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($::opt_tollef and not $::opt_gnu) {
|
if($::opt_tollef and not $::opt_gnu and not $::opt_plain) {
|
||||||
# Behave like tollef parallel (from moreutils)
|
# Behave like tollef parallel (from moreutils)
|
||||||
$::opt_u = 1;
|
$::opt_u = 1;
|
||||||
$Global::grouped = 0;
|
$Global::grouped = 0;
|
||||||
|
@ -791,8 +791,8 @@ sub parse_options {
|
||||||
$::opt_P = 1;
|
$::opt_P = 1;
|
||||||
}
|
}
|
||||||
if($Global::interactive and $::opt_bg) {
|
if($Global::interactive and $::opt_bg) {
|
||||||
print STDERR "$Global::progname: Jobs running in the ".
|
::error("Jobs running in the ".
|
||||||
"background cannot be interactive.\n";
|
"background cannot be interactive.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -806,8 +806,7 @@ sub parse_options {
|
||||||
# As we do not know the max line length on the remote machine
|
# As we do not know the max line length on the remote machine
|
||||||
# long commands generated by xargs may fail
|
# long commands generated by xargs may fail
|
||||||
# If opt_N is set, it is probably safe
|
# If opt_N is set, it is probably safe
|
||||||
print STDERR ("$Global::progname: Warning: using -X or -m ",
|
::warning("Using -X or -m with --sshlogin may fail.\n");
|
||||||
"with --sshlogin may fail\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(not defined $::opt_P) {
|
if(not defined $::opt_P) {
|
||||||
|
@ -819,7 +818,7 @@ sub parse_options {
|
||||||
sub open_joblog {
|
sub open_joblog {
|
||||||
my $append = 0;
|
my $append = 0;
|
||||||
if($::opt_resume and not $::opt_joblog) {
|
if($::opt_resume and not $::opt_joblog) {
|
||||||
print STDERR ("$Global::progname: --resume requires --joblog\n");
|
::error("--resume requires --joblog.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
if($::opt_joblog) {
|
if($::opt_joblog) {
|
||||||
|
@ -832,7 +831,7 @@ sub open_joblog {
|
||||||
# This is 30% faster than set_job_already_run($1);
|
# This is 30% faster than set_job_already_run($1);
|
||||||
vec($Global::job_already_run,$1,1) = 1;
|
vec($Global::job_already_run,$1,1) = 1;
|
||||||
} else {
|
} else {
|
||||||
print STDERR ("$Global::progname: Format of '$::opt_joblog' is wrong\n");
|
::error("Format of '$::opt_joblog' is wrong.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -842,15 +841,13 @@ sub open_joblog {
|
||||||
if($append) {
|
if($append) {
|
||||||
# Append to joblog
|
# Append to joblog
|
||||||
if(not open($Global::joblog,">>$::opt_joblog")) {
|
if(not open($Global::joblog,">>$::opt_joblog")) {
|
||||||
print STDERR ("$Global::progname: Cannot append to ",
|
::error("Cannot append to --joblog $::opt_joblog.\n");
|
||||||
"--joblog $::opt_joblog\n");
|
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# Overwrite the joblog
|
# Overwrite the joblog
|
||||||
if(not open($Global::joblog,">$::opt_joblog")) {
|
if(not open($Global::joblog,">$::opt_joblog")) {
|
||||||
print STDERR ("$Global::progname: Cannot write to ",
|
::error("Cannot write to --joblog $::opt_joblog.\n");
|
||||||
"--joblog $::opt_joblog\n");
|
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
} else {
|
} else {
|
||||||
print $Global::joblog
|
print $Global::joblog
|
||||||
|
@ -879,44 +876,49 @@ sub read_options {
|
||||||
|
|
||||||
Getopt::Long::Configure("bundling","pass_through");
|
Getopt::Long::Configure("bundling","pass_through");
|
||||||
# Check if there is a --profile to set @::opt_profile
|
# Check if there is a --profile to set @::opt_profile
|
||||||
GetOptions("profile|J=s" => \@::opt_profile) || die_usage();
|
GetOptions("profile|J=s" => \@::opt_profile,
|
||||||
# Add options from .parallel/config and other profiles
|
"plain" => \$::opt_plain) || die_usage();
|
||||||
my @ARGV_profile = ();
|
my @ARGV_profile = ();
|
||||||
my @ARGV_env = ();
|
my @ARGV_env = ();
|
||||||
my @config_profiles = (
|
if(not $::opt_plain) {
|
||||||
"/etc/parallel/config",
|
# Add options from .parallel/config and other profiles
|
||||||
$ENV{'HOME'}."/.parallel/config",
|
my @config_profiles = (
|
||||||
$ENV{'HOME'}."/.parallelrc");
|
"/etc/parallel/config",
|
||||||
my @profiles = @config_profiles;
|
$ENV{'HOME'}."/.parallel/config",
|
||||||
if(@::opt_profile) {
|
$ENV{'HOME'}."/.parallelrc");
|
||||||
# --profile overrides default profiles
|
my @profiles = @config_profiles;
|
||||||
@profiles = ();
|
if(@::opt_profile) {
|
||||||
for my $profile (@::opt_profile) {
|
# --profile overrides default profiles
|
||||||
push @profiles, $ENV{'HOME'}."/.parallel/".$profile;
|
@profiles = ();
|
||||||
|
for my $profile (@::opt_profile) {
|
||||||
|
push @profiles, $ENV{'HOME'}."/.parallel/".$profile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for my $profile (@profiles) {
|
||||||
|
if(-r $profile) {
|
||||||
|
open (IN, "<", $profile) || ::die_bug("read-profile: $profile");
|
||||||
|
while(<IN>) {
|
||||||
|
/^\s*\#/ and next;
|
||||||
|
chomp;
|
||||||
|
push @ARGV_profile, shell_unquote(split/(?<![\\])\s/, $_);
|
||||||
|
}
|
||||||
|
close IN;
|
||||||
|
} else {
|
||||||
|
if(grep /^$profile$/, @config_profiles) {
|
||||||
|
# config file is not required to exist
|
||||||
|
} else {
|
||||||
|
::error("$profile not readable.\n");
|
||||||
|
wait_and_exit(255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Add options from shell variable $PARALLEL
|
||||||
|
if($ENV{'PARALLEL'}) {
|
||||||
|
@ARGV_env = shell_unquote(split/(?<![\\])\s/, $ENV{'PARALLEL'});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
for my $profile (@profiles) {
|
|
||||||
if(-r $profile) {
|
|
||||||
open (IN, "<", $profile) || ::die_bug("read-profile: $profile");
|
|
||||||
while(<IN>) {
|
|
||||||
/^\s*\#/ and next;
|
|
||||||
chomp;
|
|
||||||
push @ARGV_profile, shell_unquote(split/(?<![\\])\s/, $_);
|
|
||||||
}
|
|
||||||
close IN;
|
|
||||||
} else {
|
|
||||||
if(grep /^$profile$/, @config_profiles) {
|
|
||||||
# config file is not required to exist
|
|
||||||
} else {
|
|
||||||
print STDERR "$Global::progname: $profile not readable\n";
|
|
||||||
wait_and_exit(255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Getopt::Long::Configure("bundling","require_order");
|
Getopt::Long::Configure("bundling","require_order");
|
||||||
get_options_from_array(\@ARGV_profile) || die_usage();
|
get_options_from_array(\@ARGV_profile) || die_usage();
|
||||||
# Add options from shell variable $PARALLEL
|
|
||||||
$ENV{'PARALLEL'} and @ARGV_env = shell_unquote(split/(?<![\\])\s/, $ENV{'PARALLEL'});
|
|
||||||
get_options_from_array(\@ARGV_env) || die_usage();
|
get_options_from_array(\@ARGV_env) || die_usage();
|
||||||
get_options_from_array(\@ARGV) || die_usage();
|
get_options_from_array(\@ARGV) || die_usage();
|
||||||
|
|
||||||
|
@ -1096,9 +1098,7 @@ sub open_or_exit {
|
||||||
}
|
}
|
||||||
my $fh = gensym;
|
my $fh = gensym;
|
||||||
if(not open($fh,"<",$file)) {
|
if(not open($fh,"<",$file)) {
|
||||||
print STDERR "$Global::progname: ".
|
::error("Cannot open input file `$file': No such file or directory.\n");
|
||||||
"Cannot open input file `$file': ".
|
|
||||||
"No such file or directory\n";
|
|
||||||
wait_and_exit(255);
|
wait_and_exit(255);
|
||||||
}
|
}
|
||||||
return $fh;
|
return $fh;
|
||||||
|
@ -1220,8 +1220,19 @@ sub start_another_job {
|
||||||
debug("Started as seq ",$job->seq()," pid:",$job->pid(),"\n");
|
debug("Started as seq ",$job->seq()," pid:",$job->pid(),"\n");
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
# If interactive says: Dont run the job, then skip it and run the next
|
# Not enough processes to run the job.
|
||||||
return start_another_job($sshlogin);
|
# Put it back on the queue.
|
||||||
|
$Global::JobQueue->unget($job);
|
||||||
|
# Count down the number of jobs to run for this SSHLogin.
|
||||||
|
my $max = $sshlogin->max_jobs_running();
|
||||||
|
if($max > 1) { $max--; }
|
||||||
|
$sshlogin->set_max_jobs_running($max);
|
||||||
|
# Sleep up to 300 ms to give other processes time to die
|
||||||
|
::usleep(rand()*300);
|
||||||
|
::warning("No more processes: ",
|
||||||
|
"Decreasing number of running jobs to $max. ",
|
||||||
|
"Raising ulimit -u may help.\n");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1547,8 +1558,8 @@ sub read_sshloginfile {
|
||||||
$close = 0;
|
$close = 0;
|
||||||
} else {
|
} else {
|
||||||
if(not open(IN, $file)) {
|
if(not open(IN, $file)) {
|
||||||
print $Global::original_stderr "Cannot open $file\n";
|
::error("Cannot open $file.\n");
|
||||||
exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while(<IN>) {
|
while(<IN>) {
|
||||||
|
@ -1586,20 +1597,15 @@ sub parse_sshlogin {
|
||||||
if(not remote_hosts()) {
|
if(not remote_hosts()) {
|
||||||
# There are no remote hosts
|
# There are no remote hosts
|
||||||
if(@::opt_trc) {
|
if(@::opt_trc) {
|
||||||
print $Global::original_stderr
|
::warning("--trc ignored as there are no remote --sshlogin.\n");
|
||||||
"parallel: Warning: --trc ignored as there are no remote --sshlogin\n";
|
|
||||||
} elsif (defined $::opt_transfer) {
|
} elsif (defined $::opt_transfer) {
|
||||||
print $Global::original_stderr
|
::warning("--transfer ignored as there are no remote --sshlogin.\n");
|
||||||
"parallel: Warning: --transfer ignored as there are no remote --sshlogin\n";
|
|
||||||
} elsif (@::opt_return) {
|
} elsif (@::opt_return) {
|
||||||
print $Global::original_stderr
|
::warning("--return ignored as there are no remote --sshlogin.\n");
|
||||||
"parallel: Warning: --return ignored as there are no remote --sshlogin\n";
|
|
||||||
} elsif (defined $::opt_cleanup) {
|
} elsif (defined $::opt_cleanup) {
|
||||||
print $Global::original_stderr
|
::warning("--cleanup ignored as there are no remote --sshlogin.\n");
|
||||||
"parallel: Warning: --cleanup ignored as there are no remote --sshlogin\n";
|
|
||||||
} elsif (@::opt_basefile) {
|
} elsif (@::opt_basefile) {
|
||||||
print $Global::original_stderr
|
::warning("--basefile ignored as there are no remote --sshlogin.\n");
|
||||||
"parallel: Warning: --basefile ignored as there are no remote --sshlogin\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1823,6 +1829,22 @@ sub usage {
|
||||||
"");
|
"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub warning {
|
||||||
|
my @w = @_;
|
||||||
|
my $fh = $Global::original_stderr || *STDERR;
|
||||||
|
my $prog = $Global::progname || "parallel";
|
||||||
|
print $fh $prog, ": Warning: ", @w;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub error {
|
||||||
|
my @w = @_;
|
||||||
|
my $fh = $Global::original_stderr || *STDERR;
|
||||||
|
my $prog = $Global::progname || "parallel";
|
||||||
|
print $fh $prog, ": Error: ", @w;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub die_bug {
|
sub die_bug {
|
||||||
my $bugid = shift;
|
my $bugid = shift;
|
||||||
print STDERR
|
print STDERR
|
||||||
|
@ -2362,7 +2384,7 @@ sub compute_max_loadavg {
|
||||||
$load = $self->compute_max_loadavg($opt_load_file);
|
$load = $self->compute_max_loadavg($opt_load_file);
|
||||||
} else {
|
} else {
|
||||||
print $Global::original_stderr "Cannot open $loadspec\n";
|
print $Global::original_stderr "Cannot open $loadspec\n";
|
||||||
exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print $Global::original_stderr "Parsing of --load failed\n";
|
print $Global::original_stderr "Parsing of --load failed\n";
|
||||||
|
@ -2407,11 +2429,6 @@ sub compute_number_of_processes {
|
||||||
::debug("Wanted procs: $wanted_processes\n");
|
::debug("Wanted procs: $wanted_processes\n");
|
||||||
my $system_limit =
|
my $system_limit =
|
||||||
$self->processes_available_by_system_limit($wanted_processes);
|
$self->processes_available_by_system_limit($wanted_processes);
|
||||||
if($system_limit < 1) {
|
|
||||||
print STDERR "$Global::progname: Cannot spawn more jobs. ",
|
|
||||||
"Raising ulimit -u may help.\n";
|
|
||||||
exit(255);
|
|
||||||
}
|
|
||||||
::debug("Limited to procs: $system_limit\n");
|
::debug("Limited to procs: $system_limit\n");
|
||||||
return $system_limit;
|
return $system_limit;
|
||||||
}
|
}
|
||||||
|
@ -2537,20 +2554,6 @@ sub processes_available_by_system_limit {
|
||||||
$slow_spawining_warning_printed = 1;
|
$slow_spawining_warning_printed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($system_limit < $wanted_processes and not $more_filehandles) {
|
|
||||||
print $Global::original_stderr
|
|
||||||
("parallel: Warning: Only enough filehandles to run ",
|
|
||||||
$system_limit, " jobs in parallel. ",
|
|
||||||
"Raising ulimit -n may help.\n");
|
|
||||||
}
|
|
||||||
if($system_limit < $wanted_processes and $max_system_proc_reached) {
|
|
||||||
print $Global::original_stderr
|
|
||||||
("parallel: Warning: Only enough available processes to run ",
|
|
||||||
$system_limit, " jobs in parallel.\n");
|
|
||||||
}
|
|
||||||
if($Global::JobQueue->empty()) {
|
|
||||||
$system_limit ||= 1;
|
|
||||||
}
|
|
||||||
# Cleanup: Close the files
|
# Cleanup: Close the files
|
||||||
for (values %fh) { close $_ }
|
for (values %fh) { close $_ }
|
||||||
# Cleanup: Kill the children
|
# Cleanup: Kill the children
|
||||||
|
@ -2559,10 +2562,27 @@ sub processes_available_by_system_limit {
|
||||||
waitpid($pid,0);
|
waitpid($pid,0);
|
||||||
delete $Global::unkilled_children{$pid};
|
delete $Global::unkilled_children{$pid};
|
||||||
}
|
}
|
||||||
#wait();
|
|
||||||
# Cleanup: Unget the command_lines or the @args
|
# Cleanup: Unget the command_lines or the @args
|
||||||
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->unget(@args);
|
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->unget(@args);
|
||||||
$Global::JobQueue->unget(@jobs);
|
$Global::JobQueue->unget(@jobs);
|
||||||
|
if($system_limit < $wanted_processes) {
|
||||||
|
# The system_limit is less than the wanted_processes
|
||||||
|
if($system_limit < 1 and not $Global::JobQueue->empty()) {
|
||||||
|
::warning("Cannot spawn any jobs. Raising ulimit -u may help.\n");
|
||||||
|
::wait_and_exit(255);
|
||||||
|
}
|
||||||
|
if(not $more_filehandles) {
|
||||||
|
::warning("Only enough filehandles to run ", $system_limit,
|
||||||
|
" jobs in parallel. Raising ulimit -n may help.\n");
|
||||||
|
}
|
||||||
|
if($max_system_proc_reached) {
|
||||||
|
::warning("Only enough available processes to run ", $system_limit,
|
||||||
|
" jobs in parallel. Raising ulimit -u may help.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($Global::JobQueue->empty()) {
|
||||||
|
$system_limit ||= 1;
|
||||||
|
}
|
||||||
if($self->string() ne ":" and
|
if($self->string() ne ":" and
|
||||||
$system_limit > $Global::default_simultaneous_sshlogins) {
|
$system_limit > $Global::default_simultaneous_sshlogins) {
|
||||||
$system_limit =
|
$system_limit =
|
||||||
|
@ -2584,13 +2604,12 @@ sub simultaneous_sshlogin_limit {
|
||||||
$self->simultaneous_sshlogin($wanted_processes));
|
$self->simultaneous_sshlogin($wanted_processes));
|
||||||
if($ssh_limit < $wanted_processes) {
|
if($ssh_limit < $wanted_processes) {
|
||||||
my $serverlogin = $self->serverlogin();
|
my $serverlogin = $self->serverlogin();
|
||||||
print $Global::original_stderr
|
::warning("ssh to $serverlogin only allows ",
|
||||||
("parallel: Warning: ssh to $serverlogin only allows ",
|
"for $ssh_limit simultaneous logins.\n",
|
||||||
"for $ssh_limit simultaneous logins.\n",
|
"You may raise this by changing ",
|
||||||
"You may raise this by changing ",
|
"/etc/ssh/sshd_config:MaxStartup on $serverlogin.\n",
|
||||||
"/etc/ssh/sshd_config:MaxStartup on $serverlogin\n",
|
"Using only ",$ssh_limit-1," connections ",
|
||||||
"Using only ",$ssh_limit-1," connections ",
|
"to avoid race conditions.\n");
|
||||||
"to avoid race conditions\n");
|
|
||||||
}
|
}
|
||||||
# Race condition can cause problem if using all sshs.
|
# Race condition can cause problem if using all sshs.
|
||||||
if($ssh_limit > 1) { $ssh_limit -= 1; }
|
if($ssh_limit > 1) { $ssh_limit -= 1; }
|
||||||
|
@ -2658,11 +2677,11 @@ sub user_requested_processes {
|
||||||
close IN;
|
close IN;
|
||||||
$processes = $self->user_requested_processes($opt_P_file);
|
$processes = $self->user_requested_processes($opt_P_file);
|
||||||
} else {
|
} else {
|
||||||
print $Global::original_stderr "Cannot open $opt_P\n";
|
::error("Cannot open $opt_P.\n");
|
||||||
exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print $Global::original_stderr "Parsing of --jobs/-j/--max-procs/-P failed\n";
|
::error("Parsing of --jobs/-j/--max-procs/-P failed.\n");
|
||||||
::die_usage();
|
::die_usage();
|
||||||
}
|
}
|
||||||
if($processes < 1) {
|
if($processes < 1) {
|
||||||
|
@ -2694,9 +2713,8 @@ sub ncpus {
|
||||||
if($ncpu =~ /^\s*[0-9]+\s*$/s) {
|
if($ncpu =~ /^\s*[0-9]+\s*$/s) {
|
||||||
$self->{'ncpus'} = $ncpu;
|
$self->{'ncpus'} = $ncpu;
|
||||||
} else {
|
} else {
|
||||||
print $Global::original_stderr
|
::warning("Could not figure out ",
|
||||||
("parallel: Warning: Could not figure out ",
|
"number of cpus on $serverlogin ($ncpu). Using 1.\n");
|
||||||
"number of cpus on $serverlogin ($ncpu). Using 1\n");
|
|
||||||
$self->{'ncpus'} = 1;
|
$self->{'ncpus'} = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2731,7 +2749,7 @@ sub no_of_cpus {
|
||||||
chomp $no_of_cpus;
|
chomp $no_of_cpus;
|
||||||
return $no_of_cpus;
|
return $no_of_cpus;
|
||||||
} else {
|
} else {
|
||||||
warn("parallel: Cannot figure out number of cpus. Using 1");
|
::warning("Cannot figure out number of cpus. Using 1.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2763,7 +2781,7 @@ sub no_of_cores {
|
||||||
chomp $no_of_cores;
|
chomp $no_of_cores;
|
||||||
return $no_of_cores;
|
return $no_of_cores;
|
||||||
} else {
|
} else {
|
||||||
warn("parallel: Cannot figure out number of CPU cores. Using 1");
|
::warning("Cannot figure out number of CPU cores. Using 1.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3445,9 +3463,7 @@ sub sshtransfer {
|
||||||
$pre .= "$mkremote_workdir; rsync $rsync_opt "
|
$pre .= "$mkremote_workdir; rsync $rsync_opt "
|
||||||
. ::shell_quote_scalar($file)." $serverlogin:$rsync_destdir;";
|
. ::shell_quote_scalar($file)." $serverlogin:$rsync_destdir;";
|
||||||
} else {
|
} else {
|
||||||
print $Global::original_stderr
|
::warning($file, " is not readable and will not be transferred.\n");
|
||||||
"parallel: Warning: "
|
|
||||||
. $file . " is not readable and will not be transferred\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $pre;
|
return $pre;
|
||||||
|
@ -3663,24 +3679,30 @@ sub start {
|
||||||
if($::opt_dryrun) {
|
if($::opt_dryrun) {
|
||||||
$command = "true";
|
$command = "true";
|
||||||
}
|
}
|
||||||
$Global::total_running++;
|
|
||||||
$Global::total_started++;
|
|
||||||
$ENV{'PARALLEL_SEQ'} = $job->seq();
|
$ENV{'PARALLEL_SEQ'} = $job->seq();
|
||||||
$ENV{'PARALLEL_PID'} = $$;
|
$ENV{'PARALLEL_PID'} = $$;
|
||||||
::debug("$Global::total_running processes. Starting ("
|
::debug("$Global::total_running processes. Starting ("
|
||||||
. $job->seq() . "): $command\n");
|
. $job->seq() . "): $command\n");
|
||||||
if($::opt_pipe) {
|
if($::opt_pipe) {
|
||||||
my ($in);
|
my ($in);
|
||||||
$pid = ::open3($in, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
# The eval is needed to catch exception from open3
|
||||||
::die_bug("open3-pipe");
|
eval {
|
||||||
|
$pid = ::open3($in, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
||||||
|
::die_bug("open3-pipe");
|
||||||
|
1;
|
||||||
|
};
|
||||||
$job->set_stdin($in);
|
$job->set_stdin($in);
|
||||||
} elsif(@::opt_a and not $Global::stdin_in_opt_a and $job->seq() == 1
|
} elsif(@::opt_a and not $Global::stdin_in_opt_a and $job->seq() == 1
|
||||||
and $job->sshlogin()->string() eq ":") {
|
and $job->sshlogin()->string() eq ":") {
|
||||||
# Give STDIN to the first job if using -a (but only if running
|
# Give STDIN to the first job if using -a (but only if running
|
||||||
# locally - otherwise CTRL-C does not work for other jobs Bug#36585)
|
# locally - otherwise CTRL-C does not work for other jobs Bug#36585)
|
||||||
*IN = *STDIN;
|
*IN = *STDIN;
|
||||||
$pid = ::open3("<&IN", ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
# The eval is needed to catch exception from open3
|
||||||
::die_bug("open3-a");
|
eval {
|
||||||
|
$pid = ::open3("<&IN", ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
||||||
|
::die_bug("open3-a");
|
||||||
|
1;
|
||||||
|
};
|
||||||
# Re-open to avoid complaining
|
# Re-open to avoid complaining
|
||||||
open STDIN, "<&", $Global::original_stdin
|
open STDIN, "<&", $Global::original_stdin
|
||||||
or ::die_bug("dup-\$Global::original_stdin: $!");
|
or ::die_bug("dup-\$Global::original_stdin: $!");
|
||||||
|
@ -3688,22 +3710,38 @@ sub start {
|
||||||
open(DEVTTY, "/dev/tty")) {
|
open(DEVTTY, "/dev/tty")) {
|
||||||
# Give /dev/tty to the command if no one else is using it
|
# Give /dev/tty to the command if no one else is using it
|
||||||
*IN = *DEVTTY;
|
*IN = *DEVTTY;
|
||||||
$pid = ::open3("<&IN", ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
# The eval is needed to catch exception from open3
|
||||||
::die_bug("open3-/dev/tty");
|
eval {
|
||||||
$Global::tty_taken = $pid;
|
$pid = ::open3("<&IN", ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
||||||
close DEVTTY;
|
::die_bug("open3-/dev/tty");
|
||||||
|
$Global::tty_taken = $pid;
|
||||||
|
close DEVTTY;
|
||||||
|
1;
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
$pid = ::open3(::gensym, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
eval {
|
||||||
::die_bug("open3-gensym");
|
$pid = ::open3(::gensym, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
||||||
|
::die_bug("open3-gensym");
|
||||||
|
1;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
$job->set_pid($pid);
|
if($pid) {
|
||||||
$job->set_starttime();
|
# A job was started
|
||||||
if($::opt_timeout) {
|
$Global::total_running++;
|
||||||
# Timeout must be set before inserting into queue
|
$Global::total_started++;
|
||||||
$job->set_timeout($::opt_timeout);
|
$job->set_pid($pid);
|
||||||
$Global::timeoutq->insert($job);
|
$job->set_starttime();
|
||||||
|
if($::opt_timeout) {
|
||||||
|
# Timeout must be set before inserting into queue
|
||||||
|
$job->set_timeout($::opt_timeout);
|
||||||
|
$Global::timeoutq->insert($job);
|
||||||
|
}
|
||||||
|
return $job;
|
||||||
|
} else {
|
||||||
|
# No more processes
|
||||||
|
::debug("Cannot spawn more jobs.\n");
|
||||||
|
return undef;
|
||||||
}
|
}
|
||||||
return $job;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub is_already_in_joblog {
|
sub is_already_in_joblog {
|
||||||
|
@ -4196,9 +4234,7 @@ sub replaced {
|
||||||
# Is this really a command in $PATH starting with '-'?
|
# Is this really a command in $PATH starting with '-'?
|
||||||
my $cmd = $1;
|
my $cmd = $1;
|
||||||
if(not grep { -e $_."/".$cmd } split(":",$ENV{'PATH'})) {
|
if(not grep { -e $_."/".$cmd } split(":",$ENV{'PATH'})) {
|
||||||
print STDERR "parallel: Error:"
|
::error("Command ($cmd) starts with '-'. Is this a wrong option?.\n");
|
||||||
. " Command ($cmd) starts with '-'."
|
|
||||||
. " Is this a wrong option?\n";
|
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4465,8 +4501,7 @@ sub get {
|
||||||
if($::opt_pipe) {
|
if($::opt_pipe) {
|
||||||
if($cmd_line->replaced() eq "") {
|
if($cmd_line->replaced() eq "") {
|
||||||
# Empty command - pipe requires a command
|
# Empty command - pipe requires a command
|
||||||
print STDERR "$Global::progname: --pipe must have a ".
|
::error("--pipe must have a command to pipe into (e.g. 'cat').\n");
|
||||||
"command to pipe into (e.g. 'cat')\n";
|
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -4546,8 +4581,8 @@ sub max_length {
|
||||||
if($::opt_s <= $Limits::Command::line_max_len) {
|
if($::opt_s <= $Limits::Command::line_max_len) {
|
||||||
$Limits::Command::line_max_len = $::opt_s;
|
$Limits::Command::line_max_len = $::opt_s;
|
||||||
} else {
|
} else {
|
||||||
print STDERR "$Global::progname: value for -s option ",
|
::warning("Value for -s option ",
|
||||||
"should be < $Limits::Command::line_max_len\n";
|
"should be < $Limits::Command::line_max_len.\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$Limits::Command::line_max_len = real_max_length();
|
$Limits::Command::line_max_len = real_max_length();
|
||||||
|
@ -4733,9 +4768,9 @@ sub new {
|
||||||
my $fhs = shift;
|
my $fhs = shift;
|
||||||
for my $fh (@$fhs) {
|
for my $fh (@$fhs) {
|
||||||
if(-t $fh) {
|
if(-t $fh) {
|
||||||
print STDERR "$Global::progname: Input is read from the terminal. ".
|
::warning("Input is read from the terminal. ".
|
||||||
"Only experts do this on purpose. ".
|
"Only experts do this on purpose. ".
|
||||||
"Press CTRL-D to exit.\n";
|
"Press CTRL-D to exit.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bless {
|
return bless {
|
||||||
|
@ -5020,8 +5055,7 @@ sub trim_of {
|
||||||
} elsif($Global::trim eq "rl" or $Global::trim eq "lr") {
|
} elsif($Global::trim eq "rl" or $Global::trim eq "lr") {
|
||||||
for $arg (@strings) { $arg =~ s/^\s+//; $arg =~ s/\s+$//; }
|
for $arg (@strings) { $arg =~ s/^\s+//; $arg =~ s/\s+$//; }
|
||||||
} else {
|
} else {
|
||||||
print STDERR "$Global::progname: --trim must be one of: r l ".
|
::error("--trim must be one of: r l rl lr.\n");
|
||||||
"rl lr\n";
|
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
return wantarray ? @strings : "@strings";
|
return wantarray ? @strings : "@strings";
|
||||||
|
@ -5215,9 +5249,8 @@ sub lock {
|
||||||
$Global::use{"Fcntl"} ||= eval "use Fcntl qw(:DEFAULT :flock); 1;";
|
$Global::use{"Fcntl"} ||= eval "use Fcntl qw(:DEFAULT :flock); 1;";
|
||||||
while(not flock $self->{'lockfh'}, LOCK_EX()|LOCK_NB()) {
|
while(not flock $self->{'lockfh'}, LOCK_EX()|LOCK_NB()) {
|
||||||
if ($! =~ m/Function not implemented/) {
|
if ($! =~ m/Function not implemented/) {
|
||||||
print $Global::original_stderr
|
::warning("flock: $!");
|
||||||
("parallel: Warning: flock: $!");
|
::warning("Will wait for a random while\n");
|
||||||
print "parallel: Will wait for a random while\n";
|
|
||||||
::usleep(rand(5000));
|
::usleep(rand(5000));
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
|
@ -5250,8 +5283,8 @@ sub mkdir_or_die {
|
||||||
mkdir $ddir;
|
mkdir $ddir;
|
||||||
}
|
}
|
||||||
if(not -w $dir) {
|
if(not -w $dir) {
|
||||||
print STDERR "$Global::progname: Cannot write to $dir: $!\n";
|
::error("Cannot write to $dir: $!\n");
|
||||||
exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -462,7 +462,7 @@ See also: B<--bg>, B<man sem>
|
||||||
Implies B<--semaphore>.
|
Implies B<--semaphore>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--filter-hosts> (beta testing)
|
=item B<--filter-hosts>
|
||||||
|
|
||||||
Remove down hosts. For each remote host: check that login through ssh
|
Remove down hosts. For each remote host: check that login through ssh
|
||||||
works. If not: do not use this host.
|
works. If not: do not use this host.
|
||||||
|
@ -549,7 +549,7 @@ specified, and for B<-I>{} otherwise. This option is deprecated;
|
||||||
use B<-I> instead.
|
use B<-I> instead.
|
||||||
|
|
||||||
|
|
||||||
=item B<--joblog> I<logfile> (beta testing)
|
=item B<--joblog> I<logfile>
|
||||||
|
|
||||||
Logfile for executed jobs. Save a list of the executed jobs to
|
Logfile for executed jobs. Save a list of the executed jobs to
|
||||||
I<logfile> in the following TAB separated format: sequence number,
|
I<logfile> in the following TAB separated format: sequence number,
|
||||||
|
@ -645,7 +645,7 @@ to see the difference:
|
||||||
parallel -j4 sleep {}\; echo {} ::: 2 1 4 3
|
parallel -j4 sleep {}\; echo {} ::: 2 1 4 3
|
||||||
parallel -j4 -k sleep {}\; echo {} ::: 2 1 4 3
|
parallel -j4 -k sleep {}\; echo {} ::: 2 1 4 3
|
||||||
|
|
||||||
=item B<-L> I<max-lines> (beta testing)
|
=item B<-L> I<max-lines>
|
||||||
|
|
||||||
When used with B<--pipe>: Read records of I<max-lines>.
|
When used with B<--pipe>: Read records of I<max-lines>.
|
||||||
|
|
||||||
|
@ -675,7 +675,7 @@ B<-l 0> is an alias for B<-l 1>.
|
||||||
Implies B<-X> unless B<-m>, B<--xargs>, or B<--pipe> is set.
|
Implies B<-X> unless B<-m>, B<--xargs>, or B<--pipe> is set.
|
||||||
|
|
||||||
|
|
||||||
=item B<--load> I<max-load> (beta testing)
|
=item B<--load> I<max-load>
|
||||||
|
|
||||||
Do not start new jobs on a given computer unless the load is less than
|
Do not start new jobs on a given computer unless the load is less than
|
||||||
I<max-load>. I<max-load> uses the same syntax as B<--jobs>, so I<100%>
|
I<max-load>. I<max-load> uses the same syntax as B<--jobs>, so I<100%>
|
||||||
|
@ -770,9 +770,9 @@ Instead of printing the output to stdout (standard output) the output
|
||||||
of each job is saved in a file and the filename is then printed.
|
of each job is saved in a file and the filename is then printed.
|
||||||
|
|
||||||
|
|
||||||
=item B<--pipe> (beta testing)
|
=item B<--pipe>
|
||||||
|
|
||||||
=item B<--spreadstdin> (beta testing)
|
=item B<--spreadstdin>
|
||||||
|
|
||||||
Spread input to jobs on stdin (standard input). Read a block of data
|
Spread input to jobs on stdin (standard input). Read a block of data
|
||||||
from stdin (standard input) and give one block of data as input to one
|
from stdin (standard input) and give one block of data as input to one
|
||||||
|
@ -797,6 +797,13 @@ defaults to '\n'. To have no record separator use B<--recend "">.
|
||||||
B<--files> is often used with B<--pipe>.
|
B<--files> is often used with B<--pipe>.
|
||||||
|
|
||||||
|
|
||||||
|
=item B<--plain> (alpha testing)
|
||||||
|
|
||||||
|
Ignore any B<--profile>, $PARALLEL, ~/.parallel/config, and
|
||||||
|
B<--tollef> to get full control on the command line (used by GNU
|
||||||
|
B<parallel> internally when called with B<--sshlogin>).
|
||||||
|
|
||||||
|
|
||||||
=item B<--progress>
|
=item B<--progress>
|
||||||
|
|
||||||
Show progress of computations. List the computers involved in the task
|
Show progress of computations. List the computers involved in the task
|
||||||
|
@ -1232,14 +1239,14 @@ different dir for the files. Setting B<--tmpdir> is equivalent to
|
||||||
setting $TMPDIR.
|
setting $TMPDIR.
|
||||||
|
|
||||||
|
|
||||||
=item B<--timeout> I<sec> (beta testing)
|
=item B<--timeout> I<sec>
|
||||||
|
|
||||||
Time out for command. If the command runs for longer than I<sec>
|
Time out for command. If the command runs for longer than I<sec>
|
||||||
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
||||||
later, followed by SIGKILL 200 ms later.
|
later, followed by SIGKILL 200 ms later.
|
||||||
|
|
||||||
|
|
||||||
=item B<--tollef> (beta testing)
|
=item B<--tollef>
|
||||||
|
|
||||||
Make GNU B<parallel> behave more like Tollef's parallel command. It
|
Make GNU B<parallel> behave more like Tollef's parallel command. It
|
||||||
activates B<-u>, B<-q>, and B<--arg-sep -->. It also causes B<-l> to
|
activates B<-u>, B<-q>, and B<--arg-sep -->. It also causes B<-l> to
|
||||||
|
@ -1445,9 +1452,9 @@ Compare these two:
|
||||||
See also B<--header>.
|
See also B<--header>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--shebang> (beta testing)
|
=item B<--shebang>
|
||||||
|
|
||||||
=item B<--hashbang> (beta testing)
|
=item B<--hashbang>
|
||||||
|
|
||||||
GNU B<Parallel> can be called as a shebang (#!) command as the first line of a script. Like this:
|
GNU B<Parallel> can be called as a shebang (#!) command as the first line of a script. Like this:
|
||||||
|
|
||||||
|
|
|
@ -489,8 +489,8 @@ See also: @strong{--bg}, @strong{man sem}
|
||||||
|
|
||||||
Implies @strong{--semaphore}.
|
Implies @strong{--semaphore}.
|
||||||
|
|
||||||
@item @strong{--filter-hosts} (beta testing)
|
@item @strong{--filter-hosts}
|
||||||
@anchor{@strong{--filter-hosts} (beta testing)}
|
@anchor{@strong{--filter-hosts}}
|
||||||
|
|
||||||
Remove down hosts. For each remote host: check that login through ssh
|
Remove down hosts. For each remote host: check that login through ssh
|
||||||
works. If not: do not use this host.
|
works. If not: do not use this host.
|
||||||
|
@ -581,8 +581,8 @@ This option is a synonym for @strong{-I}@emph{replace-str} if @emph{replace-str}
|
||||||
specified, and for @strong{-I}@{@} otherwise. This option is deprecated;
|
specified, and for @strong{-I}@{@} otherwise. This option is deprecated;
|
||||||
use @strong{-I} instead.
|
use @strong{-I} instead.
|
||||||
|
|
||||||
@item @strong{--joblog} @emph{logfile} (beta testing)
|
@item @strong{--joblog} @emph{logfile}
|
||||||
@anchor{@strong{--joblog} @emph{logfile} (beta testing)}
|
@anchor{@strong{--joblog} @emph{logfile}}
|
||||||
|
|
||||||
Logfile for executed jobs. Save a list of the executed jobs to
|
Logfile for executed jobs. Save a list of the executed jobs to
|
||||||
@emph{logfile} in the following TAB separated format: sequence number,
|
@emph{logfile} in the following TAB separated format: sequence number,
|
||||||
|
@ -696,8 +696,8 @@ to see the difference:
|
||||||
parallel -j4 -k sleep {}\; echo {} ::: 2 1 4 3
|
parallel -j4 -k sleep {}\; echo {} ::: 2 1 4 3
|
||||||
@end verbatim
|
@end verbatim
|
||||||
|
|
||||||
@item @strong{-L} @emph{max-lines} (beta testing)
|
@item @strong{-L} @emph{max-lines}
|
||||||
@anchor{@strong{-L} @emph{max-lines} (beta testing)}
|
@anchor{@strong{-L} @emph{max-lines}}
|
||||||
|
|
||||||
When used with @strong{--pipe}: Read records of @emph{max-lines}.
|
When used with @strong{--pipe}: Read records of @emph{max-lines}.
|
||||||
|
|
||||||
|
@ -727,8 +727,8 @@ standard specifies @strong{-L} instead.
|
||||||
|
|
||||||
Implies @strong{-X} unless @strong{-m}, @strong{--xargs}, or @strong{--pipe} is set.
|
Implies @strong{-X} unless @strong{-m}, @strong{--xargs}, or @strong{--pipe} is set.
|
||||||
|
|
||||||
@item @strong{--load} @emph{max-load} (beta testing)
|
@item @strong{--load} @emph{max-load}
|
||||||
@anchor{@strong{--load} @emph{max-load} (beta testing)}
|
@anchor{@strong{--load} @emph{max-load}}
|
||||||
|
|
||||||
Do not start new jobs on a given computer unless the load is less than
|
Do not start new jobs on a given computer unless the load is less than
|
||||||
@emph{max-load}. @emph{max-load} uses the same syntax as @strong{--jobs}, so @emph{100%}
|
@emph{max-load}. @emph{max-load} uses the same syntax as @strong{--jobs}, so @emph{100%}
|
||||||
|
@ -825,11 +825,11 @@ all the output from one server will be grouped together.
|
||||||
Instead of printing the output to stdout (standard output) the output
|
Instead of printing the output to stdout (standard output) the output
|
||||||
of each job is saved in a file and the filename is then printed.
|
of each job is saved in a file and the filename is then printed.
|
||||||
|
|
||||||
@item @strong{--pipe} (beta testing)
|
@item @strong{--pipe}
|
||||||
@anchor{@strong{--pipe} (beta testing)}
|
@anchor{@strong{--pipe}}
|
||||||
|
|
||||||
@item @strong{--spreadstdin} (beta testing)
|
@item @strong{--spreadstdin}
|
||||||
@anchor{@strong{--spreadstdin} (beta testing)}
|
@anchor{@strong{--spreadstdin}}
|
||||||
|
|
||||||
Spread input to jobs on stdin (standard input). Read a block of data
|
Spread input to jobs on stdin (standard input). Read a block of data
|
||||||
from stdin (standard input) and give one block of data as input to one
|
from stdin (standard input) and give one block of data as input to one
|
||||||
|
@ -853,6 +853,13 @@ defaults to '\n'. To have no record separator use @strong{--recend ""}.
|
||||||
|
|
||||||
@strong{--files} is often used with @strong{--pipe}.
|
@strong{--files} is often used with @strong{--pipe}.
|
||||||
|
|
||||||
|
@item @strong{--plain} (alpha testing)
|
||||||
|
@anchor{@strong{--plain} (alpha testing)}
|
||||||
|
|
||||||
|
Ignore any @strong{--profile}, $PARALLEL, ~/.parallel/config, and
|
||||||
|
@strong{--tollef} to get full control on the command line (used by GNU
|
||||||
|
@strong{parallel} internally when called with @strong{--sshlogin}).
|
||||||
|
|
||||||
@item @strong{--progress}
|
@item @strong{--progress}
|
||||||
@anchor{@strong{--progress}}
|
@anchor{@strong{--progress}}
|
||||||
|
|
||||||
|
@ -1311,15 +1318,15 @@ into temporary files in /tmp. By setting @strong{--tmpdir} you can use a
|
||||||
different dir for the files. Setting @strong{--tmpdir} is equivalent to
|
different dir for the files. Setting @strong{--tmpdir} is equivalent to
|
||||||
setting $TMPDIR.
|
setting $TMPDIR.
|
||||||
|
|
||||||
@item @strong{--timeout} @emph{sec} (beta testing)
|
@item @strong{--timeout} @emph{sec}
|
||||||
@anchor{@strong{--timeout} @emph{sec} (beta testing)}
|
@anchor{@strong{--timeout} @emph{sec}}
|
||||||
|
|
||||||
Time out for command. If the command runs for longer than @emph{sec}
|
Time out for command. If the command runs for longer than @emph{sec}
|
||||||
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
||||||
later, followed by SIGKILL 200 ms later.
|
later, followed by SIGKILL 200 ms later.
|
||||||
|
|
||||||
@item @strong{--tollef} (beta testing)
|
@item @strong{--tollef}
|
||||||
@anchor{@strong{--tollef} (beta testing)}
|
@anchor{@strong{--tollef}}
|
||||||
|
|
||||||
Make GNU @strong{parallel} behave more like Tollef's parallel command. It
|
Make GNU @strong{parallel} behave more like Tollef's parallel command. It
|
||||||
activates @strong{-u}, @strong{-q}, and @strong{--arg-sep --}. It also causes @strong{-l} to
|
activates @strong{-u}, @strong{-q}, and @strong{--arg-sep --}. It also causes @strong{-l} to
|
||||||
|
@ -1540,11 +1547,11 @@ Compare these two:
|
||||||
|
|
||||||
See also @strong{--header}.
|
See also @strong{--header}.
|
||||||
|
|
||||||
@item @strong{--shebang} (beta testing)
|
@item @strong{--shebang}
|
||||||
@anchor{@strong{--shebang} (beta testing)}
|
@anchor{@strong{--shebang}}
|
||||||
|
|
||||||
@item @strong{--hashbang} (beta testing)
|
@item @strong{--hashbang}
|
||||||
@anchor{@strong{--hashbang} (beta testing)}
|
@anchor{@strong{--hashbang}}
|
||||||
|
|
||||||
GNU @strong{Parallel} can be called as a shebang (#!) command as the first line of a script. Like this:
|
GNU @strong{Parallel} can be called as a shebang (#!) command as the first line of a script. Like this:
|
||||||
|
|
||||||
|
|
2
src/sql
2
src/sql
|
@ -556,7 +556,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
||||||
exit ($err);
|
exit ($err);
|
||||||
|
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
$Global::version = 20120722;
|
$Global::version = 20120822;
|
||||||
$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
|
||||||
|
|
|
@ -1,26 +1,29 @@
|
||||||
testsuite: ../src/parallel tests-to-run/* wanted-results/* startdb prereq
|
testsuite: ../src/parallel tests-to-run/* wanted-results/* startdb prereqlocal prereqremote
|
||||||
time sh Start.sh
|
time sh Start.sh
|
||||||
date
|
date
|
||||||
|
|
||||||
local: ../src/parallel tests-to-run/*local* wanted-results/*local* startdb prereq
|
testdb: ../src/parallel tests-to-run/*sql* wanted-results/*sql* prereqdb
|
||||||
|
time sh Start.sh sql
|
||||||
|
date
|
||||||
|
|
||||||
|
testlocal: ../src/parallel tests-to-run/*local* wanted-results/*local* prereqlocal
|
||||||
time sh Start.sh local
|
time sh Start.sh local
|
||||||
date
|
date
|
||||||
|
|
||||||
prereq: installparallel
|
prereqlocal: installparallel
|
||||||
echo | mop || (echo mop is required for testsuite; /bin/false)
|
seq 1 2 >/dev/null || (echo seq is required for testsuite; /bin/false)
|
||||||
seq 1 2 | mop || (echo seq is required for testsuite; /bin/false)
|
|
||||||
stdout echo || (echo stdout is required for testsuite; /bin/false)
|
stdout echo || (echo stdout is required for testsuite; /bin/false)
|
||||||
convert | mop || (echo convert is required for testsuite; /bin/false)
|
convert >/dev/null || (echo convert is required for testsuite; /bin/false)
|
||||||
ren 2>&1 | mop || (echo ren is required for testsuite; /bin/false)
|
echo 1+2 | bc >/dev/null || (echo bc is required for testsuite; /bin/false)
|
||||||
echo | buffer | mop || (echo buffer is required for testsuite; /bin/false)
|
echo | gawk '{print "gawk is installed"}' || (echo gawk is required for testsuite; /bin/false)
|
||||||
echo 1+2 | bc | mop || (echo bc is required for testsuite; /bin/false)
|
|
||||||
stdout gawk | mop || (echo gawk is required for testsuite; /bin/false)
|
|
||||||
expect -c 'spawn cat; puts "expect is installed"' || (echo expect is required for testsuite; /bin/false)
|
expect -c 'spawn cat; puts "expect is installed"' || (echo expect is required for testsuite; /bin/false)
|
||||||
echo | pv -qL 10 || (echo pv is required for testsuite; /bin/false)
|
echo | pv -qL 10 || (echo pv is required for testsuite; /bin/false)
|
||||||
echo | script -c echo -q /dev/null || (echo script is required for testsuite; /bin/false)
|
echo | script -c echo -q /dev/null || (echo script is required for testsuite; /bin/false)
|
||||||
niceload true || (echo niceload is required for testsuite; /bin/false)
|
niceload true || (echo niceload is required for testsuite; /bin/false)
|
||||||
which burnP6 || (echo burnP6 is required for testsuite; /bin/false)
|
which burnP6 || (echo burnP6 is required for testsuite; /bin/false)
|
||||||
which timeout || (echo timeout is required for testsuite; /bin/false)
|
which timeout || (echo timeout is required for testsuite; /bin/false)
|
||||||
|
|
||||||
|
prereqremote: installparallel
|
||||||
parallel ssh parallel@parallel-server{} parallel --minversion 20100101 ::: 1 2 3 || (echo parallel on remote required for testsuite; /bin/true)
|
parallel ssh parallel@parallel-server{} parallel --minversion 20100101 ::: 1 2 3 || (echo parallel on remote required for testsuite; /bin/true)
|
||||||
|
|
||||||
installparallel: ../src/parallel
|
installparallel: ../src/parallel
|
||||||
|
|
|
@ -1,50 +1,50 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -j0 -k -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -j0 -k -L1
|
||||||
echo "### Test -I"
|
echo "### Test -I";
|
||||||
seq 1 10 | parallel -k 'seq 1 {} | parallel -k -I :: echo {} ::'
|
seq 1 10 | parallel -k 'seq 1 {} | parallel -k -I :: echo {} ::'
|
||||||
|
|
||||||
echo "### Test -X -I"
|
echo "### Test -X -I";
|
||||||
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -X -k -I :: echo a{} b::'
|
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -X -k -I :: echo a{} b::'
|
||||||
|
|
||||||
echo "### Test -m -I"
|
echo "### Test -m -I";
|
||||||
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::'
|
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::'
|
||||||
|
|
||||||
echo "### Test max line length -m -I"
|
echo "### Test max line length -m -I";
|
||||||
seq 1 60000 | parallel -I :: -m -j1 echo a::b::c |
|
seq 1 60000 | parallel -I :: -m -j1 echo a::b::c |
|
||||||
mop -q "|sort |md5sum" :par1;
|
tee >(sort |md5sum) >/tmp/114-a$$;
|
||||||
export CHAR=$(cat ~/.mop/:par1 | wc -c);
|
export CHAR=$(cat /tmp/114-a$$ | wc -c);
|
||||||
export LINES=$(cat ~/.mop/:par1 | wc -l);
|
export LINES=$(cat /tmp/114-a$$ | wc -l);
|
||||||
echo -n "Chars per line ($CHAR/$LINES): ";
|
echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc);
|
||||||
echo "$CHAR/$LINES" | bc
|
rm /tmp/114-a$$
|
||||||
|
|
||||||
echo "### Test max line length -X -I"
|
echo "### Test max line length -X -I";
|
||||||
seq 1 60000 | parallel -I :: -X -j1 echo a::b::c |
|
seq 1 60000 | parallel -I :: -X -j1 echo a::b::c |
|
||||||
mop -q "|sort |md5sum" :par;
|
tee >(sort |md5sum) >/tmp/114-b$$;
|
||||||
export CHAR=$(cat ~/.mop/:par | wc -c);
|
export CHAR=$(cat /tmp/114-b$$ | wc -c);
|
||||||
export LINES=$(cat ~/.mop/:par | wc -l);
|
export LINES=$(cat /tmp/114-b$$ | wc -l);
|
||||||
echo -n "Chars per line ($CHAR/$LINES): ";
|
echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc);
|
||||||
echo "$CHAR/$LINES" | bc
|
rm /tmp/114-b$$
|
||||||
|
|
||||||
echo "### bug #36659: --sshlogin strips leading slash from ssh command"
|
echo "### bug #36659: --sshlogin strips leading slash from ssh command";
|
||||||
parallel --sshlogin '/usr/bin/ssh localhost' echo ::: OK
|
parallel --sshlogin '/usr/bin/ssh localhost' echo ::: OK
|
||||||
|
|
||||||
echo "### bug #36660: --workdir mkdir does not use --sshlogin custom ssh"
|
echo "### bug #36660: --workdir mkdir does not use --sshlogin custom ssh";
|
||||||
cd /tmp; echo OK > parallel_test.txt;
|
cd /tmp; echo OK > parallel_test.txt;
|
||||||
ssh () { echo Failed; };
|
ssh () { echo Failed; };
|
||||||
export -f ssh;
|
export -f ssh;
|
||||||
parallel --workdir /tmp/foo/bar --transfer --sshlogin '/usr/bin/ssh localhost' cat ::: parallel_test.txt;
|
parallel --workdir /tmp/foo/bar --transfer --sshlogin '/usr/bin/ssh localhost' cat ::: parallel_test.txt;
|
||||||
|
|
||||||
echo "bug #36657: --load does not work with custom ssh"
|
echo "bug #36657: --load does not work with custom ssh";
|
||||||
cd /tmp; echo OK > parallel_test.txt;
|
cd /tmp; echo OK > parallel_test.txt;
|
||||||
ssh () { echo Failed; };
|
ssh () { echo Failed; };
|
||||||
export -f ssh;
|
export -f ssh;
|
||||||
parallel --load=1000% -S "/usr/bin/ssh localhost" echo ::: OK
|
parallel --load=1000% -S "/usr/bin/ssh localhost" echo ::: OK
|
||||||
|
|
||||||
echo "bug #34958: --pipe with record size measured in lines"
|
echo "bug #34958: --pipe with record size measured in lines";
|
||||||
seq 10 | parallel --pipe -L 4 cat\;echo FOO
|
seq 10 | parallel --pipe -L 4 cat\;echo FOO
|
||||||
|
|
||||||
echo "bug #34958: --pipe with record size measured in lines"
|
echo "bug #34958: --pipe with record size measured in lines";
|
||||||
seq 10 | parallel --pipe -l 4 cat\;echo FOO
|
seq 10 | parallel --pipe -l 4 cat\;echo FOO
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
|
@ -4,8 +4,7 @@ rsync -Ha --delete input-files/testdir/ tmp/
|
||||||
cd tmp
|
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.jpg
|
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/}
|
||||||
find . -name '*_thumb.jpg' | ren 's:/([^/]+)_thumb.jpg$:/thumb_$1:'
|
|
||||||
|
|
||||||
ls | parallel ls | sort
|
ls | parallel ls | sort
|
||||||
ls | parallel echo ls | sort
|
ls | parallel echo ls | sort
|
||||||
|
|
|
@ -37,10 +37,19 @@ echo '### Test -m'
|
||||||
(echo foo;echo bar;echo joe.gif) | parallel -j1 -kX echo 1{}2{.}3 A{.}B{.}C
|
(echo foo;echo bar;echo joe.gif) | parallel -j1 -kX echo 1{}2{.}3 A{.}B{.}C
|
||||||
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -km echo a{}b{.}c{.}
|
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -km echo a{}b{.}c{.}
|
||||||
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -kX echo a{}b{.}c{.}
|
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -kX echo a{}b{.}c{.}
|
||||||
echo '### Test -m with 60000 args'
|
|
||||||
seq 1 60000 | perl -pe 's/$/.gif\n/' | parallel -j1 -km echo a{}b{.}c{.} | mop -d 4 "|md5sum" "| wc"
|
echo '### Test -m with 60000 args';
|
||||||
echo '### Test -X with 60000 args'
|
seq 1 60000 | perl -pe 's/$/.gif\n/' |
|
||||||
seq 1 60000 | perl -pe 's/$/.gif\n/' | parallel -j1 -kX echo a{}b{.}c{.} | mop -d 4 "|md5sum" "| wc"
|
parallel -j1 -km echo a{}b{.}c{.} |
|
||||||
|
tee >(wc) >(md5sum) >/dev/null;
|
||||||
|
wait
|
||||||
|
|
||||||
|
echo '### Test -X with 60000 args';
|
||||||
|
seq 1 60000 | perl -pe 's/$/.gif\n/' |
|
||||||
|
parallel -j1 -kX echo a{}b{.}c{.} |
|
||||||
|
tee >(wc) >(md5sum) >/dev/null;
|
||||||
|
wait
|
||||||
|
|
||||||
echo '### Test -X with 60000 args and 5 expansions'
|
echo '### Test -X with 60000 args and 5 expansions'
|
||||||
seq 1 60000 | perl -pe 's/$/.gif\n/' | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l
|
seq 1 60000 | perl -pe 's/$/.gif\n/' | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l
|
||||||
seq 1 60000 | perl -pe 's/$/.gif\n/' | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l
|
seq 1 60000 | perl -pe 's/$/.gif\n/' | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l
|
||||||
|
|
|
@ -1,24 +1,44 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo '### This causes problems if we kill child processes'
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -k -L1
|
||||||
seq 1 40 | parallel -j 0 seq 1 10 | sort |md5sum
|
echo '### Test of xargs -m command lines > 130k';
|
||||||
seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' | sort |md5sum
|
seq 1 60000 | parallel -m -j1 echo a{}b{}c | tee >(wc) >(sort |md5sum) >/tmp/a$$;
|
||||||
|
wait;
|
||||||
|
CHAR=$(cat /tmp/a$$ | wc -c);
|
||||||
|
LINES=$(cat /tmp/a$$ | wc -l);
|
||||||
|
echo "Chars per line:" $(echo "$CHAR/$LINES" | bc);
|
||||||
|
rm /tmp/a$$
|
||||||
|
|
||||||
echo '### Test of xargs -m and -X'
|
echo '### Test of xargs -X command lines > 130k';
|
||||||
seq 1 60000 | parallel -j1 -m echo | mop -d 4 "|sort |md5sum" "| wc"
|
seq 1 60000 | parallel -X -j1 echo a{}b{}c | tee >(wc) >(sort |md5sum) >/tmp/b$$;
|
||||||
(echo foo;echo bar) | parallel -j1 -m echo 1{}2{}3 A{}B{}C
|
wait;
|
||||||
(echo foo;echo bar) | parallel -j1 -X echo 1{}2{}3 A{}B{}C
|
CHAR=$(cat /tmp/b$$ | wc -c);
|
||||||
seq 1 60000 | parallel -m -j1 echo a{}b{}c | mop -d 4 "|sort |md5sum" "| wc"
|
LINES=$(cat /tmp/b$$ | wc -l);
|
||||||
seq 1 60000 | parallel -m -j1 echo a{}b{}c | \
|
echo "Chars per line:" $(echo "$CHAR/$LINES" | bc);
|
||||||
mop -q "|sort |md5sum" :par
|
rm /tmp/b$$
|
||||||
echo -n "Chars per line: "
|
|
||||||
CHAR=$(cat ~/.mop/:par | wc -c)
|
|
||||||
LINES=$(cat ~/.mop/:par | wc -l)
|
|
||||||
echo "$CHAR/$LINES" | bc
|
|
||||||
|
|
||||||
echo '### Bug before 2009-08-26 causing regexp compile error or infinite loop'
|
echo '### Test of xargs -m command lines > 130k';
|
||||||
echo a | parallel -qX echo "'"{}"' "
|
seq 1 60000 | parallel -k -j1 -m echo | md5sum
|
||||||
echo a | parallel -qX echo "'{}'"
|
|
||||||
|
|
||||||
echo '### nice and tcsh and Bug #33995: Jobs executed with sh instead of $SHELL'
|
echo '### This causes problems if we kill child processes';
|
||||||
seq 1 2 | SHELL=tcsh stdout parallel -k --nice 8 setenv a b\;echo \$SHELL
|
seq 1 40 | parallel -j 0 seq 1 10 | sort |md5sum
|
||||||
|
|
||||||
|
echo '### This causes problems if we kill child processes (II)';
|
||||||
|
seq 1 40 | parallel -j 0 seq 1 10 '| parallel -j 3 echo' | sort | md5sum
|
||||||
|
|
||||||
|
echo '### Test -m';
|
||||||
|
(echo foo;echo bar) | parallel -j1 -m echo 1{}2{}3 A{}B{}C
|
||||||
|
|
||||||
|
echo '### Test -X';
|
||||||
|
(echo foo;echo bar) | parallel -j1 -X echo 1{}2{}3 A{}B{}C
|
||||||
|
|
||||||
|
echo '### Bug before 2009-08-26 causing regexp compile error or infinite loop';
|
||||||
|
echo a | parallel -qX echo "'"{}"' "
|
||||||
|
|
||||||
|
echo '### Bug before 2009-08-26 causing regexp compile error or infinite loop (II)';
|
||||||
|
echo a | parallel -qX echo "'{}'"
|
||||||
|
|
||||||
|
echo '### nice and tcsh and Bug #33995: Jobs executed with sh instead of $SHELL';
|
||||||
|
seq 1 2 | SHELL=tcsh stdout parallel -k --nice 8 setenv a b\;echo \$SHELL
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
PAR=parallel
|
|
||||||
|
|
||||||
rm -rf tmp 2>/dev/null
|
rm -rf tmp 2>/dev/null
|
||||||
cp -a input-files/testdir2 tmp
|
cp -a input-files/testdir2 tmp
|
||||||
cd tmp
|
cd tmp
|
||||||
|
|
||||||
echo '### Test filenames containing UTF-8'
|
echo '### Test filenames containing UTF-8'
|
||||||
find . -name '*.jpg' | $PAR -j +0 convert -geometry 120 {} {}_thumb.jpg
|
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/}
|
||||||
find . -name '*_thumb.jpg' | ren 's:/([^/]+)_thumb.jpg$:/thumb_$1:'
|
|
||||||
|
|
||||||
find |grep -v CVS | sort
|
find |grep -v CVS | sort
|
||||||
|
|
||||||
|
|
|
@ -97,13 +97,13 @@ nice nice perl -e '@x=1 .. 17000; for(1..100) { print "@x\n"}' | pv -qL 1000000
|
||||||
nice nice perl -e '@x=1 .. 17000; for(1..100) { print "@x\n"}' | pv -qL 1000000 |
|
nice nice perl -e '@x=1 .. 17000; for(1..100) { print "@x\n"}' | pv -qL 1000000 |
|
||||||
$PAR --recend '' --files --halt-on-error 2 cat | parallel -Xj1 cat {} ';' rm {} | md5sum
|
$PAR --recend '' --files --halt-on-error 2 cat | parallel -Xj1 cat {} ';' rm {} | md5sum
|
||||||
|
|
||||||
echo '### Test of -j filename';
|
echo '### Test of -j filename - non-existent file';
|
||||||
nice stdout parallel -j no_such_file echo ::: 1
|
nice stdout parallel -j no_such_file echo ::: 1
|
||||||
|
|
||||||
echo '### Test of -j filename';
|
echo '### Test of -j filename';
|
||||||
echo 3 >/tmp/jobs_to_run1;
|
echo 3 >/tmp/jobs_to_run1;
|
||||||
parallel -j /tmp/jobs_to_run1 -v sleep 0.{} ::: 9 8 7 6 4;
|
parallel -j /tmp/jobs_to_run1 -v sleep {} ::: 10 8 6 5 4;
|
||||||
# Should give 7 8 9 4 6
|
# Should give 6 8 10 5 4
|
||||||
|
|
||||||
echo '### Test ::::'
|
echo '### Test ::::'
|
||||||
echo '### Change --arg-file-sep'
|
echo '### Change --arg-file-sep'
|
||||||
|
@ -216,4 +216,4 @@ EOF
|
||||||
echo '### Test of -j filename with file content changing';
|
echo '### Test of -j filename with file content changing';
|
||||||
echo 1 >/tmp/jobs_to_run2;
|
echo 1 >/tmp/jobs_to_run2;
|
||||||
(sleep 3; echo 10 >/tmp/jobs_to_run2) &
|
(sleep 3; echo 10 >/tmp/jobs_to_run2) &
|
||||||
parallel -j /tmp/jobs_to_run2 -v sleep {} ::: 3.3 1.1 1.3 1.4 1.2 1 1 1 1 1 1 1 1 1 1 1
|
parallel -j /tmp/jobs_to_run2 -v sleep {} ::: 3.3 1.21 1.43 1.54 1.32 1 1 1 1 1 1 1 1 1 1 1
|
||||||
|
|
|
@ -89,7 +89,7 @@ seq 1 10 >/tmp/$$-1; parallel -k -a /tmp/$$-1 echo
|
||||||
seq 1 10 >/tmp/$$-2; parallel -k --arg-file /tmp/$$-2 echo
|
seq 1 10 >/tmp/$$-2; parallel -k --arg-file /tmp/$$-2 echo
|
||||||
|
|
||||||
echo '### Test killing children with --timeout and exit value (failed if timed out)'
|
echo '### Test killing children with --timeout and exit value (failed if timed out)'
|
||||||
pstree | grep sleep | grep -v anacron | wc; parallel --timeout 3 'true {} ; for i in `seq 100 120`; do bash -c "(sleep $i)" & sleep $i & done; wait; echo No good' ::: 1000000000 1000000001 ; echo $?; pstree | grep sleep | grep -v anacron | wc
|
pstree | grep sleep | grep -v anacron | grep -v screensave | wc; parallel --timeout 3 'true {} ; for i in `seq 100 120`; do bash -c "(sleep $i)" & sleep $i & done; wait; echo No good' ::: 1000000000 1000000001 ; echo $?; pstree | grep sleep | grep -v anacron | grep -v screensave | wc
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
#echo '### Test bugfix if no command given'
|
#echo '### Test bugfix if no command given'
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
PAR=parallel
|
|
||||||
SERVER1=parallel-server1
|
SERVER1=parallel-server1
|
||||||
SERVER2=parallel-server2
|
SERVER2=parallel-server2
|
||||||
SSHLOGIN1=parallel@$SERVER1
|
SSHLOGIN1=parallel@$SERVER1
|
||||||
|
@ -35,7 +34,7 @@ echo "### Test combined -X --return {/}_{/.}_{#/.}_{#/}_{#.} with files containi
|
||||||
stdout parallel -j1 -k -Xv --cleanup --return tmp/{/}_{/.}_{2/.}_{2/}_{2.}/file -S $SSHLOGIN2 \
|
stdout parallel -j1 -k -Xv --cleanup --return tmp/{/}_{/.}_{2/.}_{2/}_{2.}/file -S $SSHLOGIN2 \
|
||||||
mkdir -p tmp/{/}_{/.}_{2/.}_{2/}_{2.} \;touch tmp/{/}_{/.}_{2/.}_{2/}_{2.}/file \
|
mkdir -p tmp/{/}_{/.}_{2/.}_{2/}_{2.} \;touch tmp/{/}_{/.}_{2/.}_{2/}_{2.}/file \
|
||||||
::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6 'number 7' 'number <8|8>'
|
::: /a/number1.c a/number2.c number3.c /a/number4 a/number5 number6 'number 7' 'number <8|8>'
|
||||||
find tmp
|
find tmp | sort
|
||||||
rm -rf tmp
|
rm -rf tmp
|
||||||
|
|
||||||
echo "### Here we ought to test -m --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space"
|
echo "### Here we ought to test -m --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space"
|
||||||
|
|
|
@ -17,7 +17,7 @@ stdout parallel --progress "sleep 1; echo {}" < /dev/null
|
||||||
echo '### bug #34422: parallel -X --eta crashes with div by zero'
|
echo '### bug #34422: parallel -X --eta crashes with div by zero'
|
||||||
seq 2 | stdout parallel -X --eta echo
|
seq 2 | stdout parallel -X --eta echo
|
||||||
|
|
||||||
echo '### --timeout on remote machines'
|
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
|
||||||
parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
|
parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
|
||||||
|
|
||||||
echo '### --pipe without command'
|
echo '### --pipe without command'
|
||||||
|
|
|
@ -36,6 +36,9 @@ cat <<EOF >~/.parallel/test_profile
|
||||||
EOF
|
EOF
|
||||||
parallel -v -J test_profile ::: <(echo a) <(echo b)
|
parallel -v -J test_profile ::: <(echo a) <(echo b)
|
||||||
|
|
||||||
|
echo '### Test ugly quoting from profile file --plain'
|
||||||
|
parallel -v -J test_profile --plain echo ::: <(echo a) <(echo b)
|
||||||
|
|
||||||
PARALLEL='-k --jobs 1 echo' parallel -S ssh\ parallel\@$SERVER1\ ssh\ parallel@$SERVER2 -v ::: foo
|
PARALLEL='-k --jobs 1 echo' parallel -S ssh\ parallel\@$SERVER1\ ssh\ parallel@$SERVER2 -v ::: foo
|
||||||
PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a"' parallel -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 -vv '<(echo {})' ::: foo
|
PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a"' parallel -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 -vv '<(echo {})' ::: foo
|
||||||
|
|
||||||
|
@ -45,15 +48,24 @@ cat <<EOF >~/.parallel/test_profile
|
||||||
EOF
|
EOF
|
||||||
parallel -v -J test_profile -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 '<(echo {})' ::: foo
|
parallel -v -J test_profile -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 '<(echo {})' ::: foo
|
||||||
|
|
||||||
|
echo '### Test quoting of $ in command from profile file --plain'
|
||||||
|
parallel -v -J test_profile --plain -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 'cat <(echo {})' ::: foo
|
||||||
|
|
||||||
echo '### Test quoting of $ in command from $PARALLEL'
|
echo '### Test quoting of $ in command from $PARALLEL'
|
||||||
PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a" ' parallel -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 -v '<(echo {})' ::: foo
|
PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a" ' parallel -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 -v '<(echo {})' ::: foo
|
||||||
|
|
||||||
|
echo '### Test quoting of $ in command from $PARALLEL --plain'
|
||||||
|
PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a" ' parallel --plain -S ssh\ parallel\@$SERVER1\ ssh\ $SERVER2 -v 'cat <(echo {})' ::: foo
|
||||||
|
|
||||||
echo '### Test quoting of space in arguments (-S) from profile file'
|
echo '### Test quoting of space in arguments (-S) from profile file'
|
||||||
cat <<EOF >~/.parallel/test_profile
|
cat <<EOF >~/.parallel/test_profile
|
||||||
-k --jobs 1 -S ssh\ parallel\@$SERVER1\ ssh\ parallel@$SERVER2 perl -pe '\$a=1; print \$a'
|
-k --jobs 1 -S ssh\ parallel\@$SERVER1\ ssh\ parallel@$SERVER2 perl -pe '\$a=1; print \$a'
|
||||||
EOF
|
EOF
|
||||||
parallel -v -J test_profile '<(echo {})' ::: foo
|
parallel -v -J test_profile '<(echo {})' ::: foo
|
||||||
|
|
||||||
|
echo '### Test quoting of space in arguments (-S) from profile file --plain'
|
||||||
|
parallel -v -J test_profile --plain 'cat <(echo {})' ::: foo
|
||||||
|
|
||||||
echo '### Test quoting of space in arguments (-S) from $PARALLEL'
|
echo '### Test quoting of space in arguments (-S) from $PARALLEL'
|
||||||
PARALLEL='-k --jobs 1 -S ssh\ parallel@'$SERVER1'\ ssh\ parallel@'$SERVER2' perl -pe "\\$a=1; print \\$a" ' parallel -v '<(echo {})' ::: foo
|
PARALLEL='-k --jobs 1 -S ssh\ parallel@'$SERVER1'\ ssh\ parallel@'$SERVER2' perl -pe "\\$a=1; print \\$a" ' parallel -v '<(echo {})' ::: foo
|
||||||
|
|
||||||
|
@ -73,3 +85,6 @@ echo -S .. > ~/.parallel/test_S..
|
||||||
echo parallel@parallel-server1 > ~/.parallel/sshloginfile
|
echo parallel@parallel-server1 > ~/.parallel/sshloginfile
|
||||||
echo parallel@parallel-server2 >> ~/.parallel/sshloginfile
|
echo parallel@parallel-server2 >> ~/.parallel/sshloginfile
|
||||||
parallel -Jtest_tag -Jtest_S.. --nonall echo a | sort
|
parallel -Jtest_tag -Jtest_S.. --nonall echo a | sort
|
||||||
|
|
||||||
|
echo '### Test merging of profiles - sort needed because -k only works on the single machine --plain'
|
||||||
|
parallel --plain -Jtest_tag -Jtest_S.. --nonall echo a | sort
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
### Test of quoting of > bug if line continuation
|
### Test of quoting of > bug if line continuation
|
||||||
> > >
|
> > >
|
||||||
### Test of --trim illegal
|
### Test of --trim illegal
|
||||||
parallel: --trim must be one of: r l rl lr
|
parallel: Error: --trim must be one of: r l rl lr.
|
||||||
### Test of eof string on :::
|
### Test of eof string on :::
|
||||||
foo
|
foo
|
||||||
### Test of ignore-empty string on :::
|
### Test of ignore-empty string on :::
|
||||||
|
|
|
@ -17,4 +17,4 @@ ajob2b job2
|
||||||
### Test bug #35820: sem breaks if $HOME is not writable
|
### Test bug #35820: sem breaks if $HOME is not writable
|
||||||
Workaround: use another writable dir
|
Workaround: use another writable dir
|
||||||
OK
|
OK
|
||||||
parallel: Cannot write to /usr/this/should/fail/.parallel: No such file or directory
|
parallel: Error: Cannot write to /usr/this/should/fail/.parallel: No such file or directory
|
||||||
|
|
|
@ -1,17 +1,24 @@
|
||||||
### This causes problems if we kill child processes
|
### Test of xargs -m command lines > 130k
|
||||||
33bf8b2986551515cdaff5e860618098 -
|
|
||||||
d7fb96d6a56d4347bc24930a395c431a -
|
|
||||||
### Test of xargs -m and -X
|
|
||||||
b35d8e49be8d94899b719c40d3f1f4bb -
|
|
||||||
3 60000 348894
|
|
||||||
1foo bar2foo bar3 Afoo barBfoo barC
|
|
||||||
1foo2foo3 1bar2bar3 AfooBfooC AbarBbarC
|
|
||||||
31d9274be5fdc2de59487cb05ba57776 -
|
|
||||||
6 119994 697800
|
6 119994 697800
|
||||||
31d9274be5fdc2de59487cb05ba57776 -
|
31d9274be5fdc2de59487cb05ba57776 -
|
||||||
Chars per line: 116300
|
Chars per line: 116300
|
||||||
|
### Test of xargs -X command lines > 130k
|
||||||
|
7 60000 817788
|
||||||
|
22074f9acada52462defb18ba912d744 -
|
||||||
|
Chars per line: 116826
|
||||||
|
### Test of xargs -m command lines > 130k
|
||||||
|
b35d8e49be8d94899b719c40d3f1f4bb -
|
||||||
|
### This causes problems if we kill child processes
|
||||||
|
33bf8b2986551515cdaff5e860618098 -
|
||||||
|
### This causes problems if we kill child processes (II)
|
||||||
|
d7fb96d6a56d4347bc24930a395c431a -
|
||||||
|
### Test -m
|
||||||
|
1foo bar2foo bar3 Afoo barBfoo barC
|
||||||
|
### Test -X
|
||||||
|
1foo2foo3 1bar2bar3 AfooBfooC AbarBbarC
|
||||||
### Bug before 2009-08-26 causing regexp compile error or infinite loop
|
### Bug before 2009-08-26 causing regexp compile error or infinite loop
|
||||||
'a'
|
'a'
|
||||||
|
### Bug before 2009-08-26 causing regexp compile error or infinite loop (II)
|
||||||
'a'
|
'a'
|
||||||
### nice and tcsh and Bug #33995: Jobs executed with sh instead of $SHELL
|
### nice and tcsh and Bug #33995: Jobs executed with sh instead of $SHELL
|
||||||
tcsh 1
|
tcsh 1
|
||||||
|
|
|
@ -31,7 +31,7 @@ echo '### Test of --retries on unreachable host'
|
||||||
### Test of --retries on unreachable host
|
### Test of --retries on unreachable host
|
||||||
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
|
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
|
||||||
ssh: connect to host 4.3.2.1 port 22: Connection timed out
|
ssh: connect to host 4.3.2.1 port 22: Connection timed out
|
||||||
parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1
|
parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1.
|
||||||
echo 1
|
echo 1
|
||||||
1
|
1
|
||||||
echo 2
|
echo 2
|
||||||
|
|
|
@ -57,7 +57,7 @@ b
|
||||||
350eda13a37912d755c9d733d149bdaf -
|
350eda13a37912d755c9d733d149bdaf -
|
||||||
350eda13a37912d755c9d733d149bdaf -
|
350eda13a37912d755c9d733d149bdaf -
|
||||||
350eda13a37912d755c9d733d149bdaf -
|
350eda13a37912d755c9d733d149bdaf -
|
||||||
### Test of -j filename
|
### Test of -j filename - non-existent file
|
||||||
Usage:
|
Usage:
|
||||||
parallel [options] [command [arguments]] < list_of_arguments
|
parallel [options] [command [arguments]] < list_of_arguments
|
||||||
parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))...
|
parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))...
|
||||||
|
@ -86,13 +86,13 @@ When using GNU Parallel for a publication please cite:
|
||||||
|
|
||||||
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
|
O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
|
||||||
;login: The USENIX Magazine, February 2011:42-47.
|
;login: The USENIX Magazine, February 2011:42-47.
|
||||||
Parsing of --jobs/-j/--max-procs/-P failed
|
parallel: Error: Parsing of --jobs/-j/--max-procs/-P failed.
|
||||||
### Test of -j filename
|
### Test of -j filename
|
||||||
sleep 0.7
|
sleep 6
|
||||||
sleep 0.8
|
sleep 8
|
||||||
sleep 0.9
|
sleep 10
|
||||||
sleep 0.4
|
sleep 5
|
||||||
sleep 0.6
|
sleep 4
|
||||||
### Test ::::
|
### Test ::::
|
||||||
### Change --arg-file-sep
|
### Change --arg-file-sep
|
||||||
1 5
|
1 5
|
||||||
|
@ -151,7 +151,7 @@ sleep 0.6
|
||||||
3 4 5
|
3 4 5
|
||||||
6 7
|
6 7
|
||||||
### Test :::: on nonexistent
|
### Test :::: on nonexistent
|
||||||
parallel: Cannot open input file `nonexistent': No such file or directory
|
parallel: Error: Cannot open input file `nonexistent': No such file or directory.
|
||||||
### Test :::: two files
|
### Test :::: two files
|
||||||
1 5
|
1 5
|
||||||
2 6
|
2 6
|
||||||
|
@ -233,8 +233,8 @@ b a
|
||||||
echo b a
|
echo b a
|
||||||
b a
|
b a
|
||||||
### Multiple -a: nonexistent
|
### Multiple -a: nonexistent
|
||||||
parallel: Cannot open input file `nonexist': No such file or directory
|
parallel: Error: Cannot open input file `nonexist': No such file or directory.
|
||||||
parallel: Cannot open input file `nonexist': No such file or directory
|
parallel: Error: Cannot open input file `nonexist': No such file or directory.
|
||||||
### Test {#.}
|
### Test {#.}
|
||||||
echo c-ext b-withext a-noext
|
echo c-ext b-withext a-noext
|
||||||
c-ext b-withext a-noext
|
c-ext b-withext a-noext
|
||||||
|
@ -318,10 +318,10 @@ sleep 1
|
||||||
sleep 1
|
sleep 1
|
||||||
sleep 1
|
sleep 1
|
||||||
sleep 1
|
sleep 1
|
||||||
sleep 1.1
|
sleep 1.21
|
||||||
sleep 1.2
|
sleep 1.32
|
||||||
sleep 1.3
|
sleep 1.43
|
||||||
sleep 1.4
|
sleep 1.54
|
||||||
sleep 1
|
sleep 1
|
||||||
sleep 1
|
sleep 1
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
|
@ -117,4 +117,4 @@ done 4
|
||||||
39
|
39
|
||||||
40
|
40
|
||||||
### Test bug #33621: --bg -p should give an error message
|
### Test bug #33621: --bg -p should give an error message
|
||||||
parallel: Jobs running in the background cannot be interactive.
|
parallel: Error: Jobs running in the background cannot be interactive.
|
||||||
|
|
|
@ -39,11 +39,11 @@ def 3
|
||||||
2 17
|
2 17
|
||||||
2 17
|
2 17
|
||||||
### Test --db-size --dbsize
|
### Test --db-size --dbsize
|
||||||
2 6 53
|
2 6 54
|
||||||
2 6 53
|
2 6 54
|
||||||
### Test --table-size --tablesize
|
### Test --table-size --tablesize
|
||||||
30
|
39
|
||||||
30
|
39
|
||||||
### Test --debug
|
### Test --debug
|
||||||
dburl mysql://sqlunittest:CB5A1FFFA5A@localhost:3306/sqlunittest
|
dburl mysql://sqlunittest:CB5A1FFFA5A@localhost:3306/sqlunittest
|
||||||
databasedriver mysql user sqlunittest password CB5A1FFFA5A host localhost port 3306 database sqlunittest query
|
databasedriver mysql user sqlunittest password CB5A1FFFA5A host localhost port 3306 database sqlunittest query
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
19
|
19
|
||||||
20
|
20
|
||||||
### Check warning if --transfer but file not found
|
### Check warning if --transfer but file not found
|
||||||
parallel: Warning: /tmp/noexistant/file is not readable and will not be transferred
|
parallel: Warning: /tmp/noexistant/file is not readable and will not be transferred.
|
||||||
/tmp/noexistant/file
|
/tmp/noexistant/file
|
||||||
### Transfer for file starting with :
|
### Transfer for file starting with :
|
||||||
remote-:.:
|
remote-:.:
|
||||||
|
@ -54,13 +54,13 @@ content-file: name.foo
|
||||||
remote-file : name.foo.file : name
|
remote-file : name.foo.file : name
|
||||||
content-file : name.foo
|
content-file : name.foo
|
||||||
### Check warning if --transfer but not --sshlogin
|
### Check warning if --transfer but not --sshlogin
|
||||||
parallel: Warning: --transfer ignored as there are no remote --sshlogin
|
parallel: Warning: --transfer ignored as there are no remote --sshlogin.
|
||||||
|
|
||||||
### Check warning if --return but not --sshlogin
|
### Check warning if --return but not --sshlogin
|
||||||
parallel: Warning: --return ignored as there are no remote --sshlogin
|
parallel: Warning: --return ignored as there are no remote --sshlogin.
|
||||||
|
|
||||||
### Check warning if --cleanup but not --sshlogin
|
### Check warning if --cleanup but not --sshlogin
|
||||||
parallel: Warning: --cleanup ignored as there are no remote --sshlogin
|
parallel: Warning: --cleanup ignored as there are no remote --sshlogin.
|
||||||
|
|
||||||
### Test --sshlogin -S --sshloginfile
|
### Test --sshlogin -S --sshloginfile
|
||||||
1
|
1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
### Test --basefile with no --sshlogin
|
### Test --basefile with no --sshlogin
|
||||||
parallel: Warning: --basefile ignored as there are no remote --sshlogin
|
parallel: Warning: --basefile ignored as there are no remote --sshlogin.
|
||||||
|
|
||||||
### Test --basefile + --cleanup + permissions
|
### Test --basefile + --cleanup + permissions
|
||||||
script1 run 1
|
script1 run 1
|
||||||
|
@ -45,32 +45,32 @@ OK
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
### Test combined -X --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space
|
### Test combined -X --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space
|
||||||
parallel: Warning: using -X or -m with --sshlogin may fail
|
parallel: Warning: Using -X or -m with --sshlogin may fail.
|
||||||
mkdir -p tmp/number1.c_number1_number2_number2.c_a/number2 tmp/number2.c_number2_number2_number2.c_a/number2 tmp/number3.c_number3_number2_number2.c_a/number2 tmp/number4_number4_number2_number2.c_a/number2 tmp/number5_number5_number2_number2.c_a/number2 tmp/number6_number6_number2_number2.c_a/number2 tmp/number\ 7_number\ 7_number2_number2.c_a/number2 tmp/number\ \<8\|8\>_number\ \<8\|8\>_number2_number2.c_a/number2 ;touch tmp/number1.c_number1_number2_number2.c_a/number2/file tmp/number2.c_number2_number2_number2.c_a/number2/file tmp/number3.c_number3_number2_number2.c_a/number2/file tmp/number4_number4_number2_number2.c_a/number2/file tmp/number5_number5_number2_number2.c_a/number2/file tmp/number6_number6_number2_number2.c_a/number2/file tmp/number\ 7_number\ 7_number2_number2.c_a/number2/file tmp/number\ \<8\|8\>_number\ \<8\|8\>_number2_number2.c_a/number2/file
|
mkdir -p tmp/number1.c_number1_number2_number2.c_a/number2 tmp/number2.c_number2_number2_number2.c_a/number2 tmp/number3.c_number3_number2_number2.c_a/number2 tmp/number4_number4_number2_number2.c_a/number2 tmp/number5_number5_number2_number2.c_a/number2 tmp/number6_number6_number2_number2.c_a/number2 tmp/number\ 7_number\ 7_number2_number2.c_a/number2 tmp/number\ \<8\|8\>_number\ \<8\|8\>_number2_number2.c_a/number2 ;touch tmp/number1.c_number1_number2_number2.c_a/number2/file tmp/number2.c_number2_number2_number2.c_a/number2/file tmp/number3.c_number3_number2_number2.c_a/number2/file tmp/number4_number4_number2_number2.c_a/number2/file tmp/number5_number5_number2_number2.c_a/number2/file tmp/number6_number6_number2_number2.c_a/number2/file tmp/number\ 7_number\ 7_number2_number2.c_a/number2/file tmp/number\ \<8\|8\>_number\ \<8\|8\>_number2_number2.c_a/number2/file
|
||||||
tmp
|
tmp
|
||||||
tmp/number6_number6_number2_number2.c_a
|
|
||||||
tmp/number6_number6_number2_number2.c_a/number2
|
|
||||||
tmp/number6_number6_number2_number2.c_a/number2/file
|
|
||||||
tmp/number5_number5_number2_number2.c_a
|
|
||||||
tmp/number5_number5_number2_number2.c_a/number2
|
|
||||||
tmp/number5_number5_number2_number2.c_a/number2/file
|
|
||||||
tmp/number4_number4_number2_number2.c_a
|
|
||||||
tmp/number4_number4_number2_number2.c_a/number2
|
|
||||||
tmp/number4_number4_number2_number2.c_a/number2/file
|
|
||||||
tmp/number3.c_number3_number2_number2.c_a
|
|
||||||
tmp/number3.c_number3_number2_number2.c_a/number2
|
|
||||||
tmp/number3.c_number3_number2_number2.c_a/number2/file
|
|
||||||
tmp/number2.c_number2_number2_number2.c_a
|
|
||||||
tmp/number2.c_number2_number2_number2.c_a/number2
|
|
||||||
tmp/number2.c_number2_number2_number2.c_a/number2/file
|
|
||||||
tmp/number1.c_number1_number2_number2.c_a
|
|
||||||
tmp/number1.c_number1_number2_number2.c_a/number2
|
|
||||||
tmp/number1.c_number1_number2_number2.c_a/number2/file
|
|
||||||
tmp/number <8|8>_number <8|8>_number2_number2.c_a
|
|
||||||
tmp/number <8|8>_number <8|8>_number2_number2.c_a/number2
|
|
||||||
tmp/number <8|8>_number <8|8>_number2_number2.c_a/number2/file
|
|
||||||
tmp/number 7_number 7_number2_number2.c_a
|
tmp/number 7_number 7_number2_number2.c_a
|
||||||
tmp/number 7_number 7_number2_number2.c_a/number2
|
tmp/number 7_number 7_number2_number2.c_a/number2
|
||||||
tmp/number 7_number 7_number2_number2.c_a/number2/file
|
tmp/number 7_number 7_number2_number2.c_a/number2/file
|
||||||
|
tmp/number <8|8>_number <8|8>_number2_number2.c_a
|
||||||
|
tmp/number <8|8>_number <8|8>_number2_number2.c_a/number2
|
||||||
|
tmp/number <8|8>_number <8|8>_number2_number2.c_a/number2/file
|
||||||
|
tmp/number1.c_number1_number2_number2.c_a
|
||||||
|
tmp/number1.c_number1_number2_number2.c_a/number2
|
||||||
|
tmp/number1.c_number1_number2_number2.c_a/number2/file
|
||||||
|
tmp/number2.c_number2_number2_number2.c_a
|
||||||
|
tmp/number2.c_number2_number2_number2.c_a/number2
|
||||||
|
tmp/number2.c_number2_number2_number2.c_a/number2/file
|
||||||
|
tmp/number3.c_number3_number2_number2.c_a
|
||||||
|
tmp/number3.c_number3_number2_number2.c_a/number2
|
||||||
|
tmp/number3.c_number3_number2_number2.c_a/number2/file
|
||||||
|
tmp/number4_number4_number2_number2.c_a
|
||||||
|
tmp/number4_number4_number2_number2.c_a/number2
|
||||||
|
tmp/number4_number4_number2_number2.c_a/number2/file
|
||||||
|
tmp/number5_number5_number2_number2.c_a
|
||||||
|
tmp/number5_number5_number2_number2.c_a/number2
|
||||||
|
tmp/number5_number5_number2_number2.c_a/number2/file
|
||||||
|
tmp/number6_number6_number2_number2.c_a
|
||||||
|
tmp/number6_number6_number2_number2.c_a/number2
|
||||||
|
tmp/number6_number6_number2_number2.c_a/number2/file
|
||||||
### Here we ought to test -m --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space
|
### Here we ought to test -m --return {/}_{/.}_{#/.}_{#/}_{#.} with files containing space
|
||||||
### But we will wait for a real world scenario
|
### But we will wait for a real world scenario
|
||||||
|
|
|
@ -20,10 +20,11 @@ Computers / CPU cores / Max jobs to run
|
||||||
|
|
||||||
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
||||||
local:1/0/100%/0.0s
|
local:1/0/100%/0.0s
|
||||||
### --timeout on remote machines
|
### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed
|
||||||
|
slept 1
|
||||||
slept 1
|
slept 1
|
||||||
jobs failed: 2
|
jobs failed: 2
|
||||||
### --pipe without command
|
### --pipe without command
|
||||||
parallel: --pipe must have a command to pipe into (e.g. 'cat')
|
parallel: Error: --pipe must have a command to pipe into (e.g. 'cat').
|
||||||
### bug #36260: {n} expansion in --colsep files fails for empty fields if all following fields are also empty
|
### bug #36260: {n} expansion in --colsep files fails for empty fields if all following fields are also empty
|
||||||
AB
|
AB
|
||||||
|
|
|
@ -35,6 +35,11 @@ perl -pe '$a=1; print $a' /dev/fd/63
|
||||||
1a
|
1a
|
||||||
perl -pe '$a=1; print $a' /dev/fd/62
|
perl -pe '$a=1; print $a' /dev/fd/62
|
||||||
1b
|
1b
|
||||||
|
### Test ugly quoting from profile file --plain
|
||||||
|
echo /dev/fd/63
|
||||||
|
/dev/fd/63
|
||||||
|
echo /dev/fd/62
|
||||||
|
/dev/fd/62
|
||||||
echo foo
|
echo foo
|
||||||
foo
|
foo
|
||||||
ssh parallel@parallel-server3 ssh parallel-server2 'eval `echo $SHELL | grep -E "/(t)?csh" > /dev/null && echo setenv PARALLEL_SEQ '$PARALLEL_SEQ'\; setenv PARALLEL_PID '$PARALLEL_PID' || echo PARALLEL_SEQ='$PARALLEL_SEQ'\;export PARALLEL_SEQ\;PARALLEL_PID='$PARALLEL_PID'\;export PARALLEL_PID` ;' perl\ -pe\ \"\\\$a=1\;\ print\ \\\$a\"\ \<\(echo\ foo\);
|
ssh parallel@parallel-server3 ssh parallel-server2 'eval `echo $SHELL | grep -E "/(t)?csh" > /dev/null && echo setenv PARALLEL_SEQ '$PARALLEL_SEQ'\; setenv PARALLEL_PID '$PARALLEL_PID' || echo PARALLEL_SEQ='$PARALLEL_SEQ'\;export PARALLEL_SEQ\;PARALLEL_PID='$PARALLEL_PID'\;export PARALLEL_PID` ;' perl\ -pe\ \"\\\$a=1\;\ print\ \\\$a\"\ \<\(echo\ foo\);
|
||||||
|
@ -42,12 +47,21 @@ ssh parallel@parallel-server3 ssh parallel-server2 'eval `echo $SHELL | grep -E
|
||||||
### Test quoting of $ in command from profile file
|
### Test quoting of $ in command from profile file
|
||||||
perl -pe '$a=1; print $a' <(echo foo)
|
perl -pe '$a=1; print $a' <(echo foo)
|
||||||
1foo
|
1foo
|
||||||
|
### Test quoting of $ in command from profile file --plain
|
||||||
|
cat <(echo foo)
|
||||||
|
foo
|
||||||
### Test quoting of $ in command from $PARALLEL
|
### Test quoting of $ in command from $PARALLEL
|
||||||
perl -pe "\$a=1; print \$a" <(echo foo)
|
perl -pe "\$a=1; print \$a" <(echo foo)
|
||||||
1foo
|
1foo
|
||||||
|
### Test quoting of $ in command from $PARALLEL --plain
|
||||||
|
cat <(echo foo)
|
||||||
|
foo
|
||||||
### Test quoting of space in arguments (-S) from profile file
|
### Test quoting of space in arguments (-S) from profile file
|
||||||
perl -pe '$a=1; print $a' <(echo foo)
|
perl -pe '$a=1; print $a' <(echo foo)
|
||||||
1foo
|
1foo
|
||||||
|
### Test quoting of space in arguments (-S) from profile file --plain
|
||||||
|
cat <(echo foo)
|
||||||
|
foo
|
||||||
### Test quoting of space in arguments (-S) from $PARALLEL
|
### Test quoting of space in arguments (-S) from $PARALLEL
|
||||||
perl -pe "\$a=1; print \$a" <(echo foo)
|
perl -pe "\$a=1; print \$a" <(echo foo)
|
||||||
1foo
|
1foo
|
||||||
|
@ -60,3 +74,5 @@ perl -pe "\$a=1; print \$a" <(echo foo)
|
||||||
### Test merging of profiles - sort needed because -k only works on the single machine
|
### Test merging of profiles - sort needed because -k only works on the single machine
|
||||||
parallel@parallel-server1 a
|
parallel@parallel-server1 a
|
||||||
parallel@parallel-server2 a
|
parallel@parallel-server2 a
|
||||||
|
### Test merging of profiles - sort needed because -k only works on the single machine --plain
|
||||||
|
a
|
||||||
|
|
|
@ -20,27 +20,27 @@ OK
|
||||||
7.7
|
7.7
|
||||||
8.8
|
8.8
|
||||||
### Test retired
|
### Test retired
|
||||||
parallel: -g has been retired. Use --group.
|
parallel: Error: -g has been retired. Use --group.
|
||||||
parallel: -B has been retired. Use --bf.
|
parallel: Error: -B has been retired. Use --bf.
|
||||||
parallel: -T has been retired. Use --tty.
|
parallel: Error: -T has been retired. Use --tty.
|
||||||
parallel: -U has been retired. Use --er.
|
parallel: Error: -U has been retired. Use --er.
|
||||||
parallel: -W has been retired. Use --wd.
|
parallel: Error: -W has been retired. Use --wd.
|
||||||
parallel: -Y has been retired. Use --shebang.
|
parallel: Error: -Y has been retired. Use --shebang.
|
||||||
parallel: -H has been retired. Use --halt.
|
parallel: Error: -H has been retired. Use --halt.
|
||||||
parallel: -g has been retired. Use --group.
|
parallel: Error: -g has been retired. Use --group.
|
||||||
parallel: -B has been retired. Use --bf.
|
parallel: Error: -B has been retired. Use --bf.
|
||||||
parallel: -T has been retired. Use --tty.
|
parallel: Error: -T has been retired. Use --tty.
|
||||||
parallel: -U has been retired. Use --er.
|
parallel: Error: -U has been retired. Use --er.
|
||||||
parallel: -W has been retired. Use --wd.
|
parallel: Error: -W has been retired. Use --wd.
|
||||||
parallel: -Y has been retired. Use --shebang.
|
parallel: Error: -Y has been retired. Use --shebang.
|
||||||
parallel: -H has been retired. Use --halt.
|
parallel: Error: -H has been retired. Use --halt.
|
||||||
parallel: -g has been retired. Use --group.
|
parallel: Error: -g has been retired. Use --group.
|
||||||
parallel: -B has been retired. Use --bf.
|
parallel: Error: -B has been retired. Use --bf.
|
||||||
parallel: -T has been retired. Use --tty.
|
parallel: Error: -T has been retired. Use --tty.
|
||||||
parallel: -U has been retired. Use --er.
|
parallel: Error: -U has been retired. Use --er.
|
||||||
parallel: -W has been retired. Use --wd.
|
parallel: Error: -W has been retired. Use --wd.
|
||||||
parallel: -Y has been retired. Use --shebang.
|
parallel: Error: -Y has been retired. Use --shebang.
|
||||||
parallel: -H has been retired. Use --halt.
|
parallel: Error: -H has been retired. Use --halt.
|
||||||
### Test --joblog followed by --resume --joblog
|
### Test --joblog followed by --resume --joblog
|
||||||
5 49
|
5 49
|
||||||
### Test --resume --joblog followed by --resume --joblog
|
### Test --resume --joblog followed by --resume --joblog
|
||||||
|
|
Loading…
Reference in a new issue