mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
Merge branch 'master' of git.sv.gnu.org:/srv/git/parallel
This commit is contained in:
commit
92773c7899
|
@ -14,7 +14,12 @@
|
||||||
# If that fails, it does a personal installation.
|
# If that fails, it does a personal installation.
|
||||||
# If that fails, it copies to $HOME/bin
|
# If that fails, it copies to $HOME/bin
|
||||||
|
|
||||||
LATEST=$(wget -qO- http://ftpmirror.gnu.org/parallel | perl -ne '/(parallel-\d{8})/ and print $1."\n"' | sort | tail -n1)
|
# tail on openindiana must be /usr/xpg4/bin/tail
|
||||||
|
TAIL=$(echo | tail -n 1 2>/dev/null && echo tail || (echo | /usr/xpg4/bin/tail -n 1 && echo /usr/xpg4/bin/tail))
|
||||||
|
# grep on openindiana must be /usr/xpg4/bin/grep
|
||||||
|
GREP=$(echo | grep -vE . 2>/dev/null && echo grep || (echo | /usr/xpg4/bin/grep -vE . && echo /usr/xpg4/bin/grep))
|
||||||
|
|
||||||
|
LATEST=$(wget -qO- http://ftpmirror.gnu.org/parallel | perl -ne '/(parallel-\d{8})/ and print $1."\n"' | sort | $TAIL -n1)
|
||||||
if test \! -d $LATEST/src/; then
|
if test \! -d $LATEST/src/; then
|
||||||
# Source dir does not exist
|
# Source dir does not exist
|
||||||
rm -f $LATEST.tar.bz2 $LATEST.tar.bz2.sig
|
rm -f $LATEST.tar.bz2 $LATEST.tar.bz2.sig
|
||||||
|
@ -27,8 +32,10 @@ if gpg -h 2>/dev/null >/dev/null; then
|
||||||
# GnuPG installed
|
# GnuPG installed
|
||||||
# Setup .gnupg/gpg.conf if not already done
|
# Setup .gnupg/gpg.conf if not already done
|
||||||
echo | gpg 2>/dev/null >/dev/null
|
echo | gpg 2>/dev/null >/dev/null
|
||||||
if gpg --with-fingerprint --auto-key-locate keyserver --keyserver-options auto-key-retrieve $LATEST.tar.bz2.sig 2>&1 | grep -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1' ; then
|
gpg --keyserver keys.gnupg.net --recv-key FFFFFFF1
|
||||||
# Source code signed by Ole Tange <ole@tange.dk> KeyID FFFFFFF1
|
gpg --keyserver keys.gnupg.net --recv-key 88888888
|
||||||
|
if gpg --with-fingerprint $LATEST.tar.bz2.sig 2>&1 | $GREP -E '^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1|^Primary key fingerprint: CDA0 1A42 08C4 F745 0610 7E7B D1AB 4516 8888 8888' ; then
|
||||||
|
# Source code signed by Ole Tange <ole@tange.dk> KeyID FFFFFFF1/88888888
|
||||||
true
|
true
|
||||||
else
|
else
|
||||||
# GnuPG signature failed
|
# GnuPG signature failed
|
||||||
|
@ -46,12 +53,12 @@ else
|
||||||
echo
|
echo
|
||||||
echo "Continue anyway? (y/n)"
|
echo "Continue anyway? (y/n)"
|
||||||
read YN
|
read YN
|
||||||
if test $YN = "y" -o $YN = "Y"; then
|
if test "$YN" = "n"; then
|
||||||
# Continue
|
|
||||||
true
|
|
||||||
else
|
|
||||||
# Stop
|
# Stop
|
||||||
exit 2
|
exit 2
|
||||||
|
else
|
||||||
|
# Continue
|
||||||
|
true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
32
NEWS
32
NEWS
|
@ -1,3 +1,35 @@
|
||||||
|
20130722
|
||||||
|
|
||||||
|
* --round-robin with --pipe will write all blocks to already running
|
||||||
|
jobs.
|
||||||
|
|
||||||
|
* --env can now transfer Bash function for remote execution. That is
|
||||||
|
pretty cool!
|
||||||
|
|
||||||
|
* GNU Parallel was used (unfortunately with improper citation) in:
|
||||||
|
Understanding the Impact of E-Commerce Software on the Adoption of Structured Data on the Web
|
||||||
|
http://link.springer.com/chapter/10.1007/978-3-642-38366-3_9#page-1
|
||||||
|
|
||||||
|
* GNU Parallel was used (unfortunately with improper citation) in:
|
||||||
|
CWI at TREC 2012, KBA track and Session Track
|
||||||
|
http://trec.nist.gov/pubs/trec21/papers/CWI.kba.session.final.pdf
|
||||||
|
|
||||||
|
* Mitigation of Adverse Effects Caused by Shock Wave Boundary Layer
|
||||||
|
Interactions through Optimal Wall Shaping.
|
||||||
|
http://arc.aiaa.org/doi/abs/10.2514/6.2013-2653
|
||||||
|
|
||||||
|
* Using GNU parallel to convert images.
|
||||||
|
http://www.brunokim.com.br/blog/?p=18
|
||||||
|
|
||||||
|
* A quick way to parallelize.
|
||||||
|
http://timotheepoisot.fr/2013/07/08/parallel/
|
||||||
|
|
||||||
|
* GNU Parallel 20130522 ('Rana Plaza') 发布,并行作业执行.
|
||||||
|
http://www.open-open.com/news/view/371301
|
||||||
|
|
||||||
|
* Quite a few bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
20130622
|
20130622
|
||||||
|
|
||||||
* --xapply now recycles arguments if an input source has more
|
* --xapply now recycles arguments if an input source has more
|
||||||
|
|
12
README
12
README
|
@ -40,9 +40,9 @@ document.
|
||||||
|
|
||||||
Full installation of GNU Parallel is as simple as:
|
Full installation of GNU Parallel is as simple as:
|
||||||
|
|
||||||
wget http://ftpmirror.gnu.org/parallel/parallel-20130630.tar.bz2
|
wget http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2
|
||||||
bzip2 -dc parallel-20130630.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20130722.tar.bz2 | tar xvf -
|
||||||
cd parallel-20130630
|
cd parallel-20130722
|
||||||
./configure && make && make install
|
./configure && make && make install
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,9 +51,9 @@ Full installation of GNU Parallel is as simple as:
|
||||||
If you are not root you can add ~/bin to your path and install in
|
If you are not root you can add ~/bin to your path and install in
|
||||||
~/bin and ~/share:
|
~/bin and ~/share:
|
||||||
|
|
||||||
wget http://ftpmirror.gnu.org/parallel/parallel-20130630.tar.bz2
|
wget http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2
|
||||||
bzip2 -dc parallel-20130630.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20130722.tar.bz2 | tar xvf -
|
||||||
cd parallel-20130630
|
cd parallel-20130722
|
||||||
./configure --prefix=$HOME && make && make install
|
./configure --prefix=$HOME && make && make install
|
||||||
|
|
||||||
Or if your system lacks 'make' you can simply copy src/parallel
|
Or if your system lacks 'make' you can simply copy src/parallel
|
||||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.68 for parallel 20130630.
|
# Generated by GNU Autoconf 2.68 for parallel 20130722.
|
||||||
#
|
#
|
||||||
# Report bugs to <bug-parallel@gnu.org>.
|
# Report bugs to <bug-parallel@gnu.org>.
|
||||||
#
|
#
|
||||||
|
@ -559,8 +559,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='parallel'
|
PACKAGE_NAME='parallel'
|
||||||
PACKAGE_TARNAME='parallel'
|
PACKAGE_TARNAME='parallel'
|
||||||
PACKAGE_VERSION='20130630'
|
PACKAGE_VERSION='20130722'
|
||||||
PACKAGE_STRING='parallel 20130630'
|
PACKAGE_STRING='parallel 20130722'
|
||||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1176,7 +1176,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 20130630 to adapt to many kinds of systems.
|
\`configure' configures parallel 20130722 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1242,7 +1242,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 20130630:";;
|
short | recursive ) echo "Configuration of parallel 20130722:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1309,7 +1309,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
parallel configure 20130630
|
parallel configure 20130722
|
||||||
generated by GNU Autoconf 2.68
|
generated by GNU Autoconf 2.68
|
||||||
|
|
||||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
|
@ -1326,7 +1326,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by parallel $as_me 20130630, which was
|
It was created by parallel $as_me 20130722, which was
|
||||||
generated by GNU Autoconf 2.68. Invocation command line was
|
generated by GNU Autoconf 2.68. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2141,7 +2141,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='parallel'
|
PACKAGE='parallel'
|
||||||
VERSION='20130630'
|
VERSION='20130722'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -2704,7 +2704,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by parallel $as_me 20130630, which was
|
This file was extended by parallel $as_me 20130722, which was
|
||||||
generated by GNU Autoconf 2.68. Invocation command line was
|
generated by GNU Autoconf 2.68. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -2766,7 +2766,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
parallel config.status 20130630
|
parallel config.status 20130722
|
||||||
configured by $0, generated by GNU Autoconf 2.68,
|
configured by $0, generated by GNU Autoconf 2.68,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AC_INIT([parallel], [20130630], [bug-parallel@gnu.org])
|
AC_INIT([parallel], [20130722], [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([
|
||||||
|
|
|
@ -94,6 +94,8 @@ gpg --clearsign --yes parallel-latest.tar.bz2.directive
|
||||||
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-latest.tar.bz2.sig
|
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-latest.tar.bz2.sig
|
||||||
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-$YYYYMMDD.tar.bz2.sig
|
gpg --auto-key-locate keyserver --keyserver-options auto-key-retrieve parallel-$YYYYMMDD.tar.bz2.sig
|
||||||
|
|
||||||
|
#../ftpsync/src/ftpsync parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} ftp://ftp-upload.gnu.org/incoming/alpha/
|
||||||
|
|
||||||
echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/
|
echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/
|
||||||
echo put parallel-latest.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/
|
echo put parallel-latest.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/ftp/
|
||||||
#echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/alpha/
|
#echo put parallel-$YYYYMMDD.tar.bz2{,.sig,*asc} | ncftp ftp://ftp-upload.gnu.org/incoming/alpha/
|
||||||
|
@ -125,6 +127,7 @@ cd parallel-$YYYYMMDD
|
||||||
./configure
|
./configure
|
||||||
make -j && sudo make -j install
|
make -j && sudo make -j install
|
||||||
pushd
|
pushd
|
||||||
|
sudo cp /usr/local/bin/parallel /usr/local/bin/parallel-$YYYYMMDD
|
||||||
|
|
||||||
== Update website ==
|
== Update website ==
|
||||||
|
|
||||||
|
@ -200,10 +203,18 @@ Subject: GNU Parallel 20130722 ('Engelbart') released
|
||||||
GNU Parallel 20130722 ('Engelbart') has been released. It is
|
GNU Parallel 20130722 ('Engelbart') 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/
|
||||||
|
|
||||||
Very few changes so this can be considered a stable release.
|
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
|
* --round-robin with --pipe will write all blocks to already running
|
||||||
|
jobs.
|
||||||
|
|
||||||
|
* --env can now transfer Bash function for remote execution. That is
|
||||||
|
pretty cool!
|
||||||
|
|
||||||
|
* New signing key. Due to recommendations from NIST
|
||||||
|
http://www.keylength.com/en/4/ the signing key was changed from
|
||||||
|
1024D/4000g/ID:FFFFFFF1 to 9888R/ID:88888888.
|
||||||
|
|
||||||
* GNU Parallel was used (unfortunately with improper citation) in:
|
* GNU Parallel was used (unfortunately with improper citation) in:
|
||||||
Understanding the Impact of E-Commerce Software on the Adoption of Structured Data on the Web
|
Understanding the Impact of E-Commerce Software on the Adoption of Structured Data on the Web
|
||||||
http://link.springer.com/chapter/10.1007/978-3-642-38366-3_9#page-1
|
http://link.springer.com/chapter/10.1007/978-3-642-38366-3_9#page-1
|
||||||
|
@ -212,14 +223,20 @@ New in this release:
|
||||||
CWI at TREC 2012, KBA track and Session Track
|
CWI at TREC 2012, KBA track and Session Track
|
||||||
http://trec.nist.gov/pubs/trec21/papers/CWI.kba.session.final.pdf
|
http://trec.nist.gov/pubs/trec21/papers/CWI.kba.session.final.pdf
|
||||||
|
|
||||||
* Mitigation of Adverse Effects Caused by Shock Wave Boundary Layer Interactions through Optimal Wall Shaping
|
* Mitigation of Adverse Effects Caused by Shock Wave Boundary Layer
|
||||||
|
Interactions through Optimal Wall Shaping.
|
||||||
http://arc.aiaa.org/doi/abs/10.2514/6.2013-2653
|
http://arc.aiaa.org/doi/abs/10.2514/6.2013-2653
|
||||||
|
|
||||||
* http://www.brunokim.com.br/blog/?p=18
|
* Using GNU parallel to convert images.
|
||||||
|
http://www.brunokim.com.br/blog/?p=18
|
||||||
|
|
||||||
* http://www.open-open.com/news/view/371301
|
* A quick way to parallelize.
|
||||||
|
http://timotheepoisot.fr/2013/07/08/parallel/
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* GNU Parallel 20130522 ('Rana Plaza') 发布,并行作业执行.
|
||||||
|
http://www.open-open.com/news/view/371301
|
||||||
|
|
||||||
|
* Quite a few bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
= About GNU Parallel =
|
= About GNU Parallel =
|
||||||
|
|
|
@ -155,11 +155,15 @@ xargs or cat | sh.</description>
|
||||||
<implementation id="sha1new=481d687481efe0e0f8dbb0af0c0dbe40cc40d522" released="2013-06-23" version="20130622">
|
<implementation id="sha1new=481d687481efe0e0f8dbb0af0c0dbe40cc40d522" released="2013-06-23" version="20130622">
|
||||||
<manifest-digest sha256new="SLPAY56ENZUBJYZMGTO4YVMNSJMSOEEUQLAFTTJT3QTDO2FZFXSQ"/>
|
<manifest-digest sha256new="SLPAY56ENZUBJYZMGTO4YVMNSJMSOEEUQLAFTTJT3QTDO2FZFXSQ"/>
|
||||||
<archive extract="parallel-20130622" href="http://ftpmirror.gnu.org/parallel/parallel-20130622.tar.bz2" size="243064"/>
|
<archive extract="parallel-20130622" href="http://ftpmirror.gnu.org/parallel/parallel-20130622.tar.bz2" size="243064"/>
|
||||||
|
</implementation>
|
||||||
|
<implementation id="sha1new=f8bb74a654d9db954642779d05d085f49a884237" released="2013-07-23" version="20130722">
|
||||||
|
<manifest-digest sha256new="55EVKHCPVW6O5F5RYWCYRH7P6MJ2FYQ3TYXAD2CM4ASVB5JQ6SLA"/>
|
||||||
|
<archive extract="parallel-20130722" href="http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2" size="245705"/>
|
||||||
</implementation>
|
</implementation>
|
||||||
</group>
|
</group>
|
||||||
</interface>
|
</interface>
|
||||||
<!-- Base64 Signature
|
<!-- Base64 Signature
|
||||||
iEYEABECAAYFAlHGaUcACgkQ/lhgK1iJTtLZXgCgn8r6w9A1+qsc9WIIwe5tlztGkoIAoItQAri+
|
iEYEABECAAYFAlHuJGcACgkQ/lhgK1iJTtImYACghf1EdeotOCcE84zqBf8VWCZFLmEAn3lMXUMU
|
||||||
VEgZG7fWKYJAPRcsjIjJ
|
KKcEhYVWTdtgUeL5jAyH
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
|
@ -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: 20130622
|
Version: 20130722
|
||||||
Release: 1
|
Release: 1
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Productivity/File utilities
|
Group: Productivity/File utilities
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
$Global::progname="niceload";
|
$Global::progname="niceload";
|
||||||
$Global::version = 20130630;
|
$Global::version = 20130722;
|
||||||
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) {
|
||||||
|
|
267
src/parallel
267
src/parallel
|
@ -33,7 +33,6 @@ use Getopt::Long;
|
||||||
# Used to ensure code quality
|
# Used to ensure code quality
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
$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 and Windows
|
# $ENV{SHELL} is sometimes not set on Mac OS X and Windows
|
||||||
::warning("\$SHELL not set. Using /bin/sh.\n");
|
::warning("\$SHELL not set. Using /bin/sh.\n");
|
||||||
|
@ -45,9 +44,10 @@ if(not $ENV{HOME}) {
|
||||||
$ENV{HOME} = "/tmp";
|
$ENV{HOME} = "/tmp";
|
||||||
}
|
}
|
||||||
|
|
||||||
save_sig_stdin_stdout_stderr();
|
save_stdin_stdout_stderr();
|
||||||
|
save_original_signal_handler();
|
||||||
parse_options();
|
parse_options();
|
||||||
|
::debug("Open file descriptors: ".join(" ",keys %Global::fd)."\n");
|
||||||
my $number_of_args;
|
my $number_of_args;
|
||||||
if($Global::max_number_of_args) {
|
if($Global::max_number_of_args) {
|
||||||
$number_of_args=$Global::max_number_of_args;
|
$number_of_args=$Global::max_number_of_args;
|
||||||
|
@ -527,12 +527,12 @@ sub write_record_to_pipe {
|
||||||
}
|
}
|
||||||
$job->write($header_ref);
|
$job->write($header_ref);
|
||||||
$job->write($record_ref);
|
$job->write($record_ref);
|
||||||
my $fh = $job->stdin();
|
my $stdin_fh = $job->fd(0);
|
||||||
close $fh;
|
close $stdin_fh;
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
my $fh = $job->stdin();
|
my $stdin_fh = $job->fd(0);
|
||||||
close $fh;
|
close $stdin_fh;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -726,7 +726,7 @@ sub get_options_from_array {
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
# Returns: N/A
|
# Returns: N/A
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20130630;
|
$Global::version = 20130722;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -1057,7 +1057,7 @@ sub open_joblog {
|
||||||
} else {
|
} else {
|
||||||
if($opt::joblog eq "-") {
|
if($opt::joblog eq "-") {
|
||||||
# Use STDOUT as joblog
|
# Use STDOUT as joblog
|
||||||
$Global::joblog = $Global::original_stdout
|
$Global::joblog = $Global::fd{1};
|
||||||
} elsif(not open($Global::joblog, ">", $opt::joblog)) {
|
} elsif(not open($Global::joblog, ">", $opt::joblog)) {
|
||||||
# Overwrite the joblog
|
# Overwrite the joblog
|
||||||
::error("Cannot write to --joblog $opt::joblog.\n");
|
::error("Cannot write to --joblog $opt::joblog.\n");
|
||||||
|
@ -1304,6 +1304,26 @@ sub shell_unquote {
|
||||||
|
|
||||||
sub __FILEHANDLES__ {}
|
sub __FILEHANDLES__ {}
|
||||||
|
|
||||||
|
|
||||||
|
sub save_stdin_stdout_stderr {
|
||||||
|
# Remember the original STDIN, STDOUT and STDERR
|
||||||
|
# and file descriptors opened by the shell (e.g. 3>/tmp/foo)
|
||||||
|
# Returns: N/A
|
||||||
|
|
||||||
|
# Find file descriptors that are already opened (by the shell)
|
||||||
|
for my $fdno (1..61) {
|
||||||
|
# /dev/fd/62 and above are used by bash for <(cmd)
|
||||||
|
my $fh;
|
||||||
|
if(open($fh,">&=",$fdno)) {
|
||||||
|
$Global::fd{$fdno}=$fh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open $Global::original_stderr, ">&", "STDERR" or
|
||||||
|
::die_bug("Can't dup STDERR: $!");
|
||||||
|
open $Global::original_stdin, "<&", "STDIN" or
|
||||||
|
::die_bug("Can't dup STDIN: $!");
|
||||||
|
}
|
||||||
|
|
||||||
sub enough_file_handles {
|
sub enough_file_handles {
|
||||||
# check that we have enough filehandles available for starting
|
# check that we have enough filehandles available for starting
|
||||||
# another job
|
# another job
|
||||||
|
@ -1314,16 +1334,18 @@ sub enough_file_handles {
|
||||||
if($Global::grouped) {
|
if($Global::grouped) {
|
||||||
my %fh;
|
my %fh;
|
||||||
my $enough_filehandles = 1;
|
my $enough_filehandles = 1;
|
||||||
# We need a filehandle for STDOUT and STDERR
|
# perl uses 7 filehandles for something?
|
||||||
# perl uses 7 filehandles for something?
|
|
||||||
# open3 uses 2 extra filehandles temporarily
|
# open3 uses 2 extra filehandles temporarily
|
||||||
for my $i (1..8) {
|
# We need a filehandle for each redirected file descriptor
|
||||||
|
# (normally just STDOUT and STDERR)
|
||||||
|
for my $i (1..(7+2+keys %Global::fd)) {
|
||||||
$enough_filehandles &&= open($fh{$i}, "<", "/dev/null");
|
$enough_filehandles &&= open($fh{$i}, "<", "/dev/null");
|
||||||
}
|
}
|
||||||
for (values %fh) { close $_; }
|
for (values %fh) { close $_; }
|
||||||
return $enough_filehandles;
|
return $enough_filehandles;
|
||||||
} else {
|
} else {
|
||||||
return 1;
|
# Ungrouped does not need extra file handles
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1358,19 +1380,6 @@ sub __RUNNING_THE_JOBS_AND_PRINTING_PROGRESS__ {}
|
||||||
# $Global::total_running = total number of running jobs
|
# $Global::total_running = total number of running jobs
|
||||||
# $Global::total_started = total jobs started
|
# $Global::total_started = total jobs started
|
||||||
|
|
||||||
sub save_sig_stdin_stdout_stderr {
|
|
||||||
# Remember the original signal handler, STDIN, STDOUT and STDERR
|
|
||||||
# Returns: N/A
|
|
||||||
%Global::original_sig = %SIG;
|
|
||||||
$SIG{TERM} = sub {}; # Dummy until jobs really start
|
|
||||||
open $Global::original_stdout, ">&", "STDOUT" or
|
|
||||||
::die_bug("Can't dup STDOUT: $!");
|
|
||||||
open $Global::original_stderr, ">&", "STDERR" or
|
|
||||||
::die_bug("Can't dup STDERR: $!");
|
|
||||||
open $Global::original_stdin, "<&", "STDIN" or
|
|
||||||
::die_bug("Can't dup STDIN: $!");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub init_run_jobs {
|
sub init_run_jobs {
|
||||||
$Global::total_running = 0;
|
$Global::total_running = 0;
|
||||||
$Global::total_started = 0;
|
$Global::total_started = 0;
|
||||||
|
@ -1483,13 +1492,15 @@ sub start_another_job {
|
||||||
::usleep(rand()*300);
|
::usleep(rand()*300);
|
||||||
::warning("No more processes: ",
|
::warning("No more processes: ",
|
||||||
"Decreasing number of running jobs to $max. ",
|
"Decreasing number of running jobs to $max. ",
|
||||||
"Raising ulimit -u may help.\n");
|
"Raising ulimit -u or /etc/security/limits.conf may help.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# No more file handles
|
# No more file handles
|
||||||
debug("Not starting: no more file handles\n");
|
$Global::no_more_file_handles_warned++ or
|
||||||
|
::warning("No more file handles. ".
|
||||||
|
"Raising ulimit -n or /etc/security/limits.conf may help.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1518,8 +1529,8 @@ sub drain_job_queue {
|
||||||
if($opt::pipe) {
|
if($opt::pipe) {
|
||||||
# When using --pipe sometimes file handles are not closed properly
|
# When using --pipe sometimes file handles are not closed properly
|
||||||
for my $job (values %Global::running) {
|
for my $job (values %Global::running) {
|
||||||
my $fh = $job->stdin();
|
my $stdin_fh = $job->fd(0);
|
||||||
close $fh;
|
close $stdin_fh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($opt::progress) {
|
if($opt::progress) {
|
||||||
|
@ -1915,6 +1926,14 @@ sub cleanup_basefile {
|
||||||
|
|
||||||
sub __SIGNAL_HANDLING__ {}
|
sub __SIGNAL_HANDLING__ {}
|
||||||
|
|
||||||
|
sub save_original_signal_handler {
|
||||||
|
# Remember the original signal handler
|
||||||
|
# Returns: N/A
|
||||||
|
$SIG{TERM} ||= sub { exit 0; }; # $SIG{TERM} is not set on Mac OS X
|
||||||
|
%Global::original_sig = %SIG;
|
||||||
|
$SIG{TERM} = sub {}; # Dummy until jobs really start
|
||||||
|
}
|
||||||
|
|
||||||
sub list_running_jobs {
|
sub list_running_jobs {
|
||||||
# Returns: N/A
|
# Returns: N/A
|
||||||
for my $v (values %Global::running) {
|
for my $v (values %Global::running) {
|
||||||
|
@ -2306,8 +2325,10 @@ sub debug {
|
||||||
# Returns: N/A
|
# Returns: N/A
|
||||||
$Global::debug or return;
|
$Global::debug or return;
|
||||||
@_ = grep { defined $_ ? $_ : "" } @_;
|
@_ = grep { defined $_ ? $_ : "" } @_;
|
||||||
if($Global::original_stdout) {
|
if($Global::fd{1}) {
|
||||||
print $Global::original_stdout @_;
|
# Original stdout was saved
|
||||||
|
my $stdout = $Global::fd{1};
|
||||||
|
print $stdout @_;
|
||||||
} else {
|
} else {
|
||||||
print @_;
|
print @_;
|
||||||
}
|
}
|
||||||
|
@ -2865,16 +2886,16 @@ sub processes_available_by_system_limit {
|
||||||
if($system_limit < $wanted_processes) {
|
if($system_limit < $wanted_processes) {
|
||||||
# The system_limit is less than the wanted_processes
|
# The system_limit is less than the wanted_processes
|
||||||
if($system_limit < 1 and not $Global::JobQueue->empty()) {
|
if($system_limit < 1 and not $Global::JobQueue->empty()) {
|
||||||
::warning("Cannot spawn any jobs. Raising ulimit -u may help.\n");
|
::warning("Cannot spawn any jobs. Raising ulimit -u or /etc/security/limits.conf may help.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
if(not $more_filehandles) {
|
if(not $more_filehandles) {
|
||||||
::warning("Only enough filehandles to run ", $system_limit,
|
::warning("Only enough file handles to run ", $system_limit, " jobs in parallel.\n",
|
||||||
" jobs in parallel. Raising ulimit -n may help.\n");
|
"Raising ulimit -n or /etc/security/limits.conf may help.\n");
|
||||||
}
|
}
|
||||||
if($max_system_proc_reached) {
|
if($max_system_proc_reached) {
|
||||||
::warning("Only enough available processes to run ", $system_limit,
|
::warning("Only enough available processes to run ", $system_limit,
|
||||||
" jobs in parallel. Raising ulimit -u may help.\n");
|
" jobs in parallel. Raising ulimit -u or /etc/security/limits.conf may help.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($] == 5.008008 and $system_limit > 1000) {
|
if($] == 5.008008 and $system_limit > 1000) {
|
||||||
|
@ -3582,10 +3603,7 @@ sub new {
|
||||||
'commandline' => $commandline, # The commandline with no args
|
'commandline' => $commandline, # The commandline with no args
|
||||||
'workdir' => undef, # --workdir
|
'workdir' => undef, # --workdir
|
||||||
'stdin' => undef, # filehandle for stdin (used for --pipe)
|
'stdin' => undef, # filehandle for stdin (used for --pipe)
|
||||||
'stdout' => undef, # filehandle for stdout (used for --group)
|
|
||||||
# filename for writing stdout to (used for --files)
|
# filename for writing stdout to (used for --files)
|
||||||
'stdoutfilename' => undef,
|
|
||||||
'stderr' => undef, # filehandle for stderr (used for --group)
|
|
||||||
'remaining' => "", # remaining data not sent to stdin (used for --pipe)
|
'remaining' => "", # remaining data not sent to stdin (used for --pipe)
|
||||||
'datawritten' => 0, # amount of data sent via stdin (used for --pipe)
|
'datawritten' => 0, # amount of data sent via stdin (used for --pipe)
|
||||||
'transfersize' => 0, # size of files using --transfer
|
'transfersize' => 0, # size of files using --transfer
|
||||||
|
@ -3628,65 +3646,53 @@ sub openresultsfile {
|
||||||
::error("Cannot write to `$name'.\n");
|
::error("Cannot write to `$name'.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
$self->set_stdoutfilename($name);
|
$self->set_fd_file_name(1,$name);
|
||||||
# prefix/name1/val1/name2/val2/stderr
|
# prefix/name1/val1/name2/val2/stderr
|
||||||
$name = "$dir/stderr";
|
$name = "$dir/stderr";
|
||||||
if(not open($errfh,"+>",$name)) {
|
if(not open($errfh,"+>",$name)) {
|
||||||
::error("Cannot write to `$name'.\n");
|
::error("Cannot write to `$name'.\n");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
|
$self->set_fd_file_name(2,$name);
|
||||||
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
|
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
|
||||||
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
|
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
|
||||||
$self->set_stdout($outfh);
|
$self->set_fd(1,$outfh);
|
||||||
$self->set_stderr($errfh);
|
$self->set_fd(2,$errfh);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_stdout {
|
sub set_fd {
|
||||||
|
# Set file descriptor
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$self->{'stdout'} = shift;
|
my $fd_no = shift;
|
||||||
|
$self->{'fd'}{$fd_no} = shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub stdout {
|
sub fd {
|
||||||
|
# Get file descriptor
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->{'stdout'};
|
my $fd_no = shift;
|
||||||
|
return $self->{'fd'}{$fd_no};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_stdoutfilename {
|
sub set_fd_file_name {
|
||||||
|
# Set file name for a file descriptor
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$self->{'stdoutfilename'} = shift;
|
my $fd_no = shift;
|
||||||
|
$self->{'fd_file_name',$fd_no} = shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub stdoutfilename {
|
sub fd_file_name {
|
||||||
|
# Get file name for a file descriptor
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return $self->{'stdoutfilename'};
|
my $fd_no = shift;
|
||||||
}
|
return $self->{'fd_file_name',$fd_no};
|
||||||
|
|
||||||
sub stderr {
|
|
||||||
my $self = shift;
|
|
||||||
return $self->{'stderr'};
|
|
||||||
}
|
|
||||||
|
|
||||||
sub set_stderr {
|
|
||||||
my $self = shift;
|
|
||||||
$self->{'stderr'} = shift;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub stdin {
|
|
||||||
my $self = shift;
|
|
||||||
return $self->{'stdin'};
|
|
||||||
}
|
|
||||||
|
|
||||||
sub set_stdin {
|
|
||||||
my $self = shift;
|
|
||||||
my $stdin = shift;
|
|
||||||
$self->{'stdin'} = $stdin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub write {
|
sub write {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $remaining_ref = shift;
|
my $remaining_ref = shift;
|
||||||
my $in = $self->{'stdin'};
|
my $stdin_fh = $self->fd(0);
|
||||||
syswrite($in,$$remaining_ref);
|
syswrite($stdin_fh,$$remaining_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_stdin_buffer {
|
sub set_stdin_buffer {
|
||||||
|
@ -3787,7 +3793,7 @@ sub runtime {
|
||||||
# Returns:
|
# Returns:
|
||||||
# Run time in seconds
|
# Run time in seconds
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
return int(($self->endtime() - $self->starttime())*1000)/1000;
|
return sprintf("%.3f",int(($self->endtime() - $self->starttime())*1000)/1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub endtime {
|
sub endtime {
|
||||||
|
@ -4263,15 +4269,15 @@ sub start {
|
||||||
# To group we create temporary files for STDOUT and STDERR
|
# To group we create temporary files for STDOUT and STDERR
|
||||||
# To avoid the cleanup unlink the files immediately (but keep them open)
|
# To avoid the cleanup unlink the files immediately (but keep them open)
|
||||||
($outfh, $name) = ::tempfile(SUFFIX => ".par");
|
($outfh, $name) = ::tempfile(SUFFIX => ".par");
|
||||||
$job->set_stdoutfilename($name);
|
$job->set_fd_file_name(1,$name);
|
||||||
$opt::files or unlink $name;
|
$opt::files or unlink $name;
|
||||||
($errfh, $name) = ::tempfile(SUFFIX => ".par");
|
($errfh, $name) = ::tempfile(SUFFIX => ".par");
|
||||||
unlink $name;
|
unlink $name;
|
||||||
|
|
||||||
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
|
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
|
||||||
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
|
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
|
||||||
$job->set_stdout($outfh);
|
$job->set_fd(1,$outfh);
|
||||||
$job->set_stderr($errfh);
|
$job->set_fd(2,$errfh);
|
||||||
} else {
|
} else {
|
||||||
(*OUT,*ERR)=(*STDOUT,*STDERR);
|
(*OUT,*ERR)=(*STDOUT,*STDERR);
|
||||||
}
|
}
|
||||||
|
@ -4292,7 +4298,7 @@ sub start {
|
||||||
::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 ($stdin_fh);
|
||||||
# Wrap command with end-of-file detector,
|
# Wrap command with end-of-file detector,
|
||||||
# so we do not spawn a program if there is no input.
|
# so we do not spawn a program if there is no input.
|
||||||
# Exit value:
|
# Exit value:
|
||||||
|
@ -4309,11 +4315,11 @@ sub start {
|
||||||
"($command);";
|
"($command);";
|
||||||
# The eval is needed to catch exception from open3
|
# The eval is needed to catch exception from open3
|
||||||
eval {
|
eval {
|
||||||
$pid = ::open3($in, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
$pid = ::open3($stdin_fh, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
|
||||||
::die_bug("open3-pipe");
|
::die_bug("open3-pipe");
|
||||||
1;
|
1;
|
||||||
};
|
};
|
||||||
$job->set_stdin($in);
|
$job->set_fd(0,$stdin_fh);
|
||||||
} 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
|
||||||
|
@ -4326,7 +4332,7 @@ sub start {
|
||||||
1;
|
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: $!");
|
||||||
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
|
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
|
||||||
open(my $devtty_fh, "<", "/dev/tty")) {
|
open(my $devtty_fh, "<", "/dev/tty")) {
|
||||||
|
@ -4417,18 +4423,16 @@ sub print {
|
||||||
if($opt::pipe and $self->virgin()) {
|
if($opt::pipe and $self->virgin()) {
|
||||||
# Nothing was printed to this job:
|
# Nothing was printed to this job:
|
||||||
# cleanup tmp files if --files was set
|
# cleanup tmp files if --files was set
|
||||||
unlink $self->{'stdoutfilename'};
|
unlink $self->fd_file_name(1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if($opt::dryrun) {
|
if($opt::dryrun) {
|
||||||
# Nothing was printed to this job:
|
# Nothing was printed to this job:
|
||||||
# cleanup tmp files if --files was set
|
# cleanup tmp files if --files was set
|
||||||
unlink $self->{'stdoutfilename'};
|
unlink $self->fd_file_name(1);
|
||||||
}
|
}
|
||||||
# Only relevant for grouping
|
# Only relevant for grouping
|
||||||
$Global::grouped or return;
|
$Global::grouped or return;
|
||||||
my $out = $self->stdout();
|
|
||||||
my $err = $self->stderr();
|
|
||||||
my $command = $self->sshlogin_wrap();
|
my $command = $self->sshlogin_wrap();
|
||||||
|
|
||||||
if($Global::joblog) {
|
if($Global::joblog) {
|
||||||
|
@ -4461,60 +4465,61 @@ sub print {
|
||||||
# so flush to avoid STDOUT being buffered
|
# so flush to avoid STDOUT being buffered
|
||||||
flush STDOUT;
|
flush STDOUT;
|
||||||
}
|
}
|
||||||
seek $err, 0, 0;
|
for my $fdno (sort { $a <=> $b } keys %Global::fd) {
|
||||||
if($Global::debug) {
|
# Sort by file descriptor numerically: 1,2,3,..,9,10,11
|
||||||
print STDERR "ERR:\n";
|
$fdno == 0 and next;
|
||||||
}
|
my $out_fd = $Global::fd{$fdno};
|
||||||
if($opt::tag or defined $opt::tagstring) {
|
my $in_fd = $self->fd($fdno);
|
||||||
my $tag = $self->tag();
|
if(not $in_fd) {
|
||||||
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
|
# ::warning("File descriptor $fdno not defined\n");
|
||||||
# This is a crappy way of ignoring it.
|
next;
|
||||||
while(<$err>) {
|
|
||||||
if($_ ne "tcgetattr: Invalid argument\n") {
|
|
||||||
print STDERR $tag,$_;
|
|
||||||
}
|
|
||||||
# At most run the loop once
|
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
while(<$err>) {
|
seek $in_fd, 0, 0;
|
||||||
print STDERR $tag,$_;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
my $buf;
|
|
||||||
sysread($err,$buf,1_000_000);
|
|
||||||
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
|
|
||||||
$buf =~ s/^tcgetattr: Invalid argument\n//;
|
|
||||||
print STDERR $buf;
|
|
||||||
while(sysread($err,$buf,1_000_000)) {
|
|
||||||
print STDERR $buf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
flush STDERR;
|
|
||||||
|
|
||||||
if($opt::files) {
|
|
||||||
print STDOUT $self->{'stdoutfilename'},"\n";
|
|
||||||
} else {
|
|
||||||
my $buf;
|
|
||||||
seek $out, 0, 0;
|
|
||||||
if($Global::debug) {
|
if($Global::debug) {
|
||||||
print STDOUT "OUT:\n";
|
print STDERR "File descriptor $fdno:\n";
|
||||||
}
|
}
|
||||||
if($opt::tag or defined $opt::tagstring) {
|
if($opt::files) {
|
||||||
my $tag = $self->tag();
|
$self->fd_file_name($fdno) and print $out_fd $self->fd_file_name($fdno),"\n";
|
||||||
while(<$out>) {
|
|
||||||
print STDOUT $tag,$_;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
my $buf;
|
my $buf;
|
||||||
while(sysread($out,$buf,1_000_000)) {
|
seek $in_fd, 0, 0;
|
||||||
print STDOUT $buf;
|
if($Global::debug) {
|
||||||
|
print STDOUT "OUT:\n";
|
||||||
|
}
|
||||||
|
if($opt::tag or defined $opt::tagstring) {
|
||||||
|
my $tag = $self->tag();
|
||||||
|
if($fdno == 2) {
|
||||||
|
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
|
||||||
|
# This is a crappy way of ignoring it.
|
||||||
|
while(<$in_fd>) {
|
||||||
|
if($_ ne "tcgetattr: Invalid argument\n") {
|
||||||
|
print $out_fd $tag,$_;
|
||||||
|
}
|
||||||
|
# At most run the loop once
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while(<$in_fd>) {
|
||||||
|
print $out_fd $tag,$_;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
my $buf;
|
||||||
|
if($fdno == 2) {
|
||||||
|
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
|
||||||
|
# This is a crappy way of ignoring it.
|
||||||
|
sysread($in_fd,$buf,1_000_000);
|
||||||
|
$buf =~ s/^tcgetattr: Invalid argument\n//;
|
||||||
|
print $out_fd $buf;
|
||||||
|
}
|
||||||
|
while(sysread($in_fd,$buf,1_000_000)) {
|
||||||
|
print $out_fd $buf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
flush STDOUT;
|
flush $out_fd;
|
||||||
::debug("<<joboutput $command\n");
|
::debug("<<joboutput $command\n");
|
||||||
|
close $in_fd;
|
||||||
}
|
}
|
||||||
close $out;
|
|
||||||
close $err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub tag {
|
sub tag {
|
||||||
|
@ -6006,6 +6011,6 @@ sub mkdir_or_die {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Keep perl -w happy
|
# Keep perl -w happy
|
||||||
$opt::x = $Semaphore::timeout = $Semaphore::wait = $opt::shebang =
|
$opt::x = $Semaphore::timeout = $Semaphore::wait = $opt::shebang = $Global::no_more_file_handles_warned =
|
||||||
0;
|
0;
|
||||||
|
|
||||||
|
|
|
@ -397,7 +397,7 @@ I<regexp> is a Perl Regular Expression:
|
||||||
http://perldoc.perl.org/perlre.html
|
http://perldoc.perl.org/perlre.html
|
||||||
|
|
||||||
|
|
||||||
=item B<--ctrlc> (beta testing)
|
=item B<--ctrlc>
|
||||||
|
|
||||||
Sends SIGINT to tasks running on remote computers thus killing them.
|
Sends SIGINT to tasks running on remote computers thus killing them.
|
||||||
|
|
||||||
|
@ -458,13 +458,14 @@ If I<eof-str> is omitted, there is no end of file string. If neither
|
||||||
B<-E> nor B<-e> is used, no end of file string is used.
|
B<-E> nor B<-e> is used, no end of file string is used.
|
||||||
|
|
||||||
|
|
||||||
=item B<--env> I<var>
|
=item B<--env> I<var> (alpha testing)
|
||||||
|
|
||||||
Copy environment variable I<var>. This will copy I<var> to the
|
Copy environment variable I<var>. This will copy I<var> to the
|
||||||
environment that the command is run in. This is especially useful for
|
environment that the command is run in. This is especially useful for
|
||||||
remote environments.
|
remote execution.
|
||||||
|
|
||||||
Caveat: If I<var> contains newline ('\n') the value is messed up.
|
In Bash I<var> can also be a Bash function - just remember to B<export
|
||||||
|
-f> the function.
|
||||||
|
|
||||||
|
|
||||||
=item B<--eta>
|
=item B<--eta>
|
||||||
|
@ -485,7 +486,7 @@ See also: B<--bg>, B<man sem>
|
||||||
Implies B<--semaphore>.
|
Implies B<--semaphore>.
|
||||||
|
|
||||||
|
|
||||||
=item B<--filter-hosts> (alpha testing)
|
=item B<--filter-hosts> (beta testing)
|
||||||
|
|
||||||
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.
|
||||||
|
@ -1100,6 +1101,19 @@ B<--return> is ignored when used with B<--sshlogin :> or when not used
|
||||||
with B<--sshlogin>.
|
with B<--sshlogin>.
|
||||||
|
|
||||||
|
|
||||||
|
=item B<--round-robin> (alpha testing)
|
||||||
|
|
||||||
|
=item B<--round> (alpha testing)
|
||||||
|
|
||||||
|
Normally B<--pipe> will give a single block to each instance of the
|
||||||
|
command. With B<--round-robin> all blocks will at random be written to
|
||||||
|
commands already running. This is useful if the command takes a long
|
||||||
|
time to initialize.
|
||||||
|
|
||||||
|
B<--keep-order> will not work with B<--round-robin> as it is
|
||||||
|
impossible to track which input block corresponds to which output.
|
||||||
|
|
||||||
|
|
||||||
=item B<--max-chars>=I<max-chars>
|
=item B<--max-chars>=I<max-chars>
|
||||||
|
|
||||||
=item B<-s> I<max-chars>
|
=item B<-s> I<max-chars>
|
||||||
|
@ -1370,7 +1384,7 @@ different dir for the files. Setting B<--tmpdir> is equivalent to
|
||||||
setting $TMPDIR.
|
setting $TMPDIR.
|
||||||
|
|
||||||
|
|
||||||
=item B<--timeout> I<val> (beta testing)
|
=item B<--timeout> I<val>
|
||||||
|
|
||||||
Time out for command. If the command runs for longer than I<val>
|
Time out for command. If the command runs for longer than I<val>
|
||||||
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
||||||
|
@ -1579,7 +1593,7 @@ See also B<-m>.
|
||||||
Exit if the size (see the B<-s> option) is exceeded.
|
Exit if the size (see the B<-s> option) is exceeded.
|
||||||
|
|
||||||
|
|
||||||
=item B<--xapply> (alpha testing)
|
=item B<--xapply> (beta testing)
|
||||||
|
|
||||||
Read multiple input sources like B<xapply>. If multiple input sources
|
Read multiple input sources like B<xapply>. If multiple input sources
|
||||||
are given, one argument will be read from each of the input
|
are given, one argument will be read from each of the input
|
||||||
|
|
|
@ -420,8 +420,8 @@ separating the columns. The n'th column can be access using
|
||||||
@emph{regexp} is a Perl Regular Expression:
|
@emph{regexp} is a Perl Regular Expression:
|
||||||
http://perldoc.perl.org/perlre.html
|
http://perldoc.perl.org/perlre.html
|
||||||
|
|
||||||
@item @strong{--ctrlc} (beta testing)
|
@item @strong{--ctrlc}
|
||||||
@anchor{@strong{--ctrlc} (beta testing)}
|
@anchor{@strong{--ctrlc}}
|
||||||
|
|
||||||
Sends SIGINT to tasks running on remote computers thus killing them.
|
Sends SIGINT to tasks running on remote computers thus killing them.
|
||||||
|
|
||||||
|
@ -485,14 +485,15 @@ because it is POSIX compliant for @strong{xargs} while this option is not.
|
||||||
If @emph{eof-str} is omitted, there is no end of file string. If neither
|
If @emph{eof-str} is omitted, there is no end of file string. If neither
|
||||||
@strong{-E} nor @strong{-e} is used, no end of file string is used.
|
@strong{-E} nor @strong{-e} is used, no end of file string is used.
|
||||||
|
|
||||||
@item @strong{--env} @emph{var}
|
@item @strong{--env} @emph{var} (alpha testing)
|
||||||
@anchor{@strong{--env} @emph{var}}
|
@anchor{@strong{--env} @emph{var} (alpha testing)}
|
||||||
|
|
||||||
Copy environment variable @emph{var}. This will copy @emph{var} to the
|
Copy environment variable @emph{var}. This will copy @emph{var} to the
|
||||||
environment that the command is run in. This is especially useful for
|
environment that the command is run in. This is especially useful for
|
||||||
remote environments.
|
remote execution.
|
||||||
|
|
||||||
Caveat: If @emph{var} contains newline ('\n') the value is messed up.
|
In Bash @emph{var} can also be a Bash function - just remember to @strong{export
|
||||||
|
-f} the function.
|
||||||
|
|
||||||
@item @strong{--eta}
|
@item @strong{--eta}
|
||||||
@anchor{@strong{--eta}}
|
@anchor{@strong{--eta}}
|
||||||
|
@ -512,8 +513,8 @@ See also: @strong{--bg}, @strong{man sem}
|
||||||
|
|
||||||
Implies @strong{--semaphore}.
|
Implies @strong{--semaphore}.
|
||||||
|
|
||||||
@item @strong{--filter-hosts} (alpha testing)
|
@item @strong{--filter-hosts} (beta testing)
|
||||||
@anchor{@strong{--filter-hosts} (alpha testing)}
|
@anchor{@strong{--filter-hosts} (beta testing)}
|
||||||
|
|
||||||
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.
|
||||||
|
@ -1180,6 +1181,20 @@ times:
|
||||||
@strong{--return} is ignored when used with @strong{--sshlogin :} or when not used
|
@strong{--return} is ignored when used with @strong{--sshlogin :} or when not used
|
||||||
with @strong{--sshlogin}.
|
with @strong{--sshlogin}.
|
||||||
|
|
||||||
|
@item @strong{--round-robin} (alpha testing)
|
||||||
|
@anchor{@strong{--round-robin} (alpha testing)}
|
||||||
|
|
||||||
|
@item @strong{--round} (alpha testing)
|
||||||
|
@anchor{@strong{--round} (alpha testing)}
|
||||||
|
|
||||||
|
Normally @strong{--pipe} will give a single block to each instance of the
|
||||||
|
command. With @strong{--round-robin} all blocks will at random be written to
|
||||||
|
commands already running. This is useful if the command takes a long
|
||||||
|
time to initialize.
|
||||||
|
|
||||||
|
@strong{--keep-order} will not work with @strong{--round-robin} as it is
|
||||||
|
impossible to track which input block corresponds to which output.
|
||||||
|
|
||||||
@item @strong{--max-chars}=@emph{max-chars}
|
@item @strong{--max-chars}=@emph{max-chars}
|
||||||
@anchor{@strong{--max-chars}=@emph{max-chars}}
|
@anchor{@strong{--max-chars}=@emph{max-chars}}
|
||||||
|
|
||||||
|
@ -1473,8 +1488,8 @@ 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{val} (beta testing)
|
@item @strong{--timeout} @emph{val}
|
||||||
@anchor{@strong{--timeout} @emph{val} (beta testing)}
|
@anchor{@strong{--timeout} @emph{val}}
|
||||||
|
|
||||||
Time out for command. If the command runs for longer than @emph{val}
|
Time out for command. If the command runs for longer than @emph{val}
|
||||||
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
seconds it will get killed with SIGTERM, followed by SIGTERM 200 ms
|
||||||
|
@ -1695,8 +1710,8 @@ See also @strong{-m}.
|
||||||
|
|
||||||
Exit if the size (see the @strong{-s} option) is exceeded.
|
Exit if the size (see the @strong{-s} option) is exceeded.
|
||||||
|
|
||||||
@item @strong{--xapply} (alpha testing)
|
@item @strong{--xapply} (beta testing)
|
||||||
@anchor{@strong{--xapply} (alpha testing)}
|
@anchor{@strong{--xapply} (beta testing)}
|
||||||
|
|
||||||
Read multiple input sources like @strong{xapply}. If multiple input sources
|
Read multiple input sources like @strong{xapply}. If multiple input sources
|
||||||
are given, one argument will be read from each of the input
|
are given, one argument will be read from each of the input
|
||||||
|
|
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 = 20130630;
|
$Global::version = 20130722;
|
||||||
$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
|
||||||
|
|
|
@ -5,50 +5,72 @@
|
||||||
# I.e.: No race conditions, no logins
|
# I.e.: No race conditions, no logins
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -k -j4 -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -k -j4 -L1
|
||||||
echo '### Test if we can deal with output > 4 GB'
|
echo '### Test if we can deal with output > 4 GB'
|
||||||
# echo | niceload --io 10 parallel -q perl -e '"\$a=\"x\"x1000000;for(0..4300){print \$a}"' | md5sum
|
## echo | niceload --io 10 parallel -q perl -e '"\$a=\"x\"x1000000;for(0..4300){print \$a}"' | md5sum
|
||||||
echo | parallel -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | md5sum
|
echo | parallel -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | md5sum
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
||||||
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) | stdout parallel -uj 0 | egrep -v 'processes took|adjusting'
|
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) | stdout parallel -uj 0 | egrep -v 'processes took|adjusting'
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test of --retries on unreachable host'
|
echo '### 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
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test race condition on 8 CPU (my laptop)';
|
echo '### Test race condition on 8 CPU (my laptop)';
|
||||||
seq 1 5000000 > /tmp/parallel_test;
|
seq 1 5000000 > /tmp/parallel_test;
|
||||||
seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}"
|
seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}"
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test exit val - true';
|
echo '### Test exit val - true';
|
||||||
echo true | parallel;
|
echo true | parallel;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test exit val - false';
|
echo '### Test exit val - false';
|
||||||
echo false | parallel;
|
echo false | parallel;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test --halt-on-error 0';
|
echo '### Test --halt-on-error 0';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 0;
|
||||||
echo $?;
|
echo $?;
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test --halt-on-error 1';
|
echo '### Test --halt-on-error 1';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 1;
|
||||||
echo $?;
|
echo $?;
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test --halt-on-error 2';
|
echo '### Test --halt-on-error 2';
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true") | parallel -j10 --halt-on-error 2;
|
||||||
echo $?;
|
echo $?;
|
||||||
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2;
|
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2;
|
||||||
echo $?
|
echo $?
|
||||||
|
|
||||||
echo '### Test last dying print --halt-on-error';
|
echo '**'
|
||||||
|
|
||||||
|
echo '### Test last dying print --halt-on-error 1';
|
||||||
(seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 1 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift';
|
(seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 1 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift';
|
||||||
echo $?;
|
echo exit code $?
|
||||||
|
|
||||||
|
echo '### Test last dying print --halt-on-error 2';
|
||||||
(seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift';
|
(seq 0 8;echo 0; echo 9) | parallel -j10 -kq --halt 2 perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; exit shift';
|
||||||
echo $?
|
echo exit code $?
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834';
|
echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834';
|
||||||
seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo
|
seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo
|
||||||
|
|
|
@ -35,11 +35,17 @@ parallel -S localhost --env SPC echo 'a"$SPC"b' ::: 5
|
||||||
parallel -S csh@localhost --env SPC echo 'a"$SPC"b' ::: 5
|
parallel -S csh@localhost --env SPC echo 'a"$SPC"b' ::: 5
|
||||||
parallel -S tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5
|
parallel -S tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5
|
||||||
|
|
||||||
echo '### Test --env for \n and \\ - single and double - no output is good'
|
echo '### Test --env for \n and \\ - single and double (bash only) - no output is good'
|
||||||
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo,1/csh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
|
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S 2/:,2/lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
|
||||||
|
|
||||||
echo '### Test --env for \n and \\ - single and double --onall - no output is good'
|
echo '### Test --env for \n and \\ - single and double (*csh only) - no output is good'
|
||||||
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo,1/csh@lo --onall --env V,V2 echo \''"{}$V$V2"'\' ::: {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
|
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S 2/tcsh@lo,2/csh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
|
||||||
|
|
||||||
|
echo '### Test --env for \n and \\ - single and double --onall (bash only) - no output is good'
|
||||||
|
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,lo --onall --env V,V2 echo \''"{}$V$V2"'\' ::: {#} | sort | uniq -c | grep -v ' 4 '|grep -v xauth |grep -v X11
|
||||||
|
|
||||||
|
echo '### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good'
|
||||||
|
perl -e 'for(10,92) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S 1/tcsh@lo,1/csh@lo --onall --env V,V2 echo \''"{}$V$V2"'\' ::: {#} | sort | uniq -c | grep -v ' 2 '|grep -v xauth |grep -v X11
|
||||||
|
|
||||||
echo '### Test --env for \160 - which kills csh - single and double - no output is good'
|
echo '### Test --env for \160 - which kills csh - single and double - no output is good'
|
||||||
perl -e 'for(160) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} | uniq -c | grep -v ' 3 '|grep -v xauth |grep -v X11
|
perl -e 'for(160) { printf "%c%c %c%d\0",$_,$_,$_,$_ }' | stdout parallel --nice 19 -j4 -k -I // --arg-sep _ -0 V=// V2=V2=// parallel -k -j1 -S :,1/lo,1/tcsh@lo --env V,V2 echo \''"{}$V$V2"'\' ::: {#} {#} {#} | uniq -c | grep -v ' 3 '|grep -v xauth |grep -v X11
|
||||||
|
|
|
@ -1,19 +1,29 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
P="scosysv centos dragonfly netbsd freebsd solaris openbsd debian aix hpux qnx irix suse minix openindiana mandriva unixware miros raspberrypi hurd ultrix ubuntu redhat"
|
P_ALL="vax freebsd solaris openbsd netbsd debian alpha aix redhat hpux ultrix qnx irix tru64 openindiana suse openstep mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi"
|
||||||
P="scosysv centos dragonfly netbsd freebsd solaris openbsd debian aix hpux qnx irix suse minix openindiana mandriva unixware raspberrypi hurd ultrix ubuntu"
|
P_NOTWORKING="vax alpha openstep"
|
||||||
#P="scosysv hpux qnx irix openindiana ultrix"
|
P_NOTWORKING_YET="ultrix tru64"
|
||||||
POLAR=`parallel echo {}.polarhome.com ::: $P`
|
|
||||||
|
P_WORKING="freebsd solaris openbsd netbsd debian aix redhat hpux qnx irix openindiana suse mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi"
|
||||||
|
|
||||||
|
P="$P_WORKING"
|
||||||
|
POLAR=`parallel -k echo {}.polarhome.com ::: $P`
|
||||||
|
# Avoid the stupid /etc/issue.net banner at Polarhome
|
||||||
|
|
||||||
echo '### Tests on polarhome machines'
|
echo '### Tests on polarhome machines'
|
||||||
echo 'Setup on polarhome machines'
|
echo 'Setup on polarhome machines'
|
||||||
stdout parallel -kj0 ssh {} mkdir -p bin ::: $POLAR >/dev/null 2>/dev/null &
|
stdout parallel -kj0 ssh -oLogLevel=quiet {} mkdir -p bin ::: $POLAR &
|
||||||
# scp to each polarhome machine do not work. From redhat it works.
|
# scp to each polarhome machine do not work. Use cat
|
||||||
stdout rsync -a `which parallel` redhat.polarhome.com:bin/
|
copy_to_host() {
|
||||||
stdout ssh redhat.polarhome.com \
|
H=$1
|
||||||
chmod 755 bin/parallel\; \
|
# Avoid the stupid /etc/issue.net banner with -oLogLevel=quiet
|
||||||
bin/parallel --tag -kj0 -v --delay 0.2 ssh {} rm -f bin/parallel\\\;scp bin/parallel {}:bin/ ::: $POLAR | sort
|
ssh -oLogLevel=quiet $H rm -f bin/parallel
|
||||||
|
cat `which parallel` | ssh -oLogLevel=quiet $H 'cat > bin/parallel; chmod 755 bin/parallel'
|
||||||
|
}
|
||||||
|
export -f copy_to_host
|
||||||
|
stdout parallel -j0 --timeout 20 --tag -kj0 -v copy_to_host {} ::: $POLAR
|
||||||
# Now test
|
# Now test
|
||||||
echo 'Run the test on polarhome machines'
|
echo '### Run the test on polarhome machines'
|
||||||
stdout parallel --argsep // -k --tag ssh {} bin/parallel -k echo Works on ::: {} // $POLAR | sort
|
stdout parallel -j0 --argsep // -k --tag ssh -oLogLevel=quiet {} bin/perl bin/parallel -k echo Works on ::: {} // $POLAR
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
### Test if we can deal with output > 4 GB
|
### Test if we can deal with output > 4 GB
|
||||||
46a318993dfc8e2afd71ff2bc6f605f1 -
|
46a318993dfc8e2afd71ff2bc6f605f1 -
|
||||||
|
**
|
||||||
### Test Force outside the file handle limit, 2009-02-17 Gave fork error
|
### Test Force outside the file handle limit, 2009-02-17 Gave fork error
|
||||||
parallel: Warning: Only enough filehandles to run 506 jobs in parallel. Raising ulimit -n may help.
|
parallel: Warning: Only enough file handles to run 506 jobs in parallel.
|
||||||
|
Raising ulimit -n or /etc/security/limits.conf may help.
|
||||||
Start
|
Start
|
||||||
end
|
end
|
||||||
|
**
|
||||||
### Test of --retries on unreachable host
|
### Test of --retries on unreachable host
|
||||||
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.
|
||||||
|
@ -11,6 +14,7 @@ echo 1
|
||||||
1
|
1
|
||||||
echo 2
|
echo 2
|
||||||
2
|
2
|
||||||
|
**
|
||||||
### Test race condition on 8 CPU (my laptop)
|
### Test race condition on 8 CPU (my laptop)
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
@ -22,14 +26,21 @@ echo 2
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
10
|
10
|
||||||
|
**
|
||||||
### Test exit val - true
|
### Test exit val - true
|
||||||
0
|
0
|
||||||
|
**
|
||||||
### Test exit val - false
|
### Test exit val - false
|
||||||
1
|
1
|
||||||
/bin/bash: non_exist: command not found
|
**
|
||||||
### Test --halt-on-error 0
|
### Test --halt-on-error 0
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
/bin/bash: non_exist: command not found
|
||||||
|
**
|
||||||
|
### Test --halt-on-error 1
|
||||||
|
1
|
||||||
|
127
|
||||||
parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
|
parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
|
||||||
sleep 2;false
|
sleep 2;false
|
||||||
/bin/bash: non_exist: command not found
|
/bin/bash: non_exist: command not found
|
||||||
|
@ -37,16 +48,17 @@ parallel: Starting no more jobs. Waiting for 3 jobs to finish. This job failed:
|
||||||
sleep 2;false
|
sleep 2;false
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
|
||||||
sleep 4; non_exist
|
sleep 4; non_exist
|
||||||
### Test --halt-on-error 1
|
**
|
||||||
1
|
|
||||||
127
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 2;false
|
|
||||||
parallel: This job failed:
|
|
||||||
sleep 2;false
|
|
||||||
### Test --halt-on-error 2
|
### Test --halt-on-error 2
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 2;false
|
||||||
|
parallel: This job failed:
|
||||||
|
sleep 2;false
|
||||||
|
**
|
||||||
|
### Test last dying print --halt-on-error 1
|
||||||
|
exit code 9
|
||||||
0
|
0
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
@ -76,13 +88,13 @@ parallel: Starting no more jobs. Waiting for 2 jobs to finish. This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 8
|
||||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
|
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 9
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 9
|
||||||
|
### Test last dying print --halt-on-error 2
|
||||||
|
exit code 1
|
||||||
0
|
0
|
||||||
1
|
1
|
||||||
parallel: This job failed:
|
parallel: This job failed:
|
||||||
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
|
perl -e sleep\ \$ARGV\[0\]\;print\ STDERR\ @ARGV,\"\\n\"\;\ exit\ shift 1
|
||||||
### Test last dying print --halt-on-error
|
**
|
||||||
9
|
|
||||||
1
|
|
||||||
### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834
|
### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
|
|
@ -24,19 +24,25 @@ a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
||||||
a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
||||||
a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
||||||
a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
a' * ? >o <i*? ][\!#¤%=( ) | }b 5
|
||||||
### Test --env for \n and \\ - single and double - no output is good
|
### Test --env for \n and \\ - single and double (bash only) - no output is good
|
||||||
2 1 10V2= 10
|
8
|
||||||
|
8
|
||||||
|
### Test --env for \n and \\ - single and double (*csh only) - no output is good
|
||||||
|
2 2\ \92V2=\ \92
|
||||||
|
2 2\\ \92V2=\\ \92
|
||||||
|
16 : Command not found.
|
||||||
|
8 Unmatched ".
|
||||||
|
16 \ : Command not found.
|
||||||
|
### Test --env for \n and \\ - single and double --onall (bash only) - no output is good
|
||||||
|
2 1
|
||||||
|
2 10
|
||||||
|
2 10V2=
|
||||||
|
2 2\\ \92V2=\\ \92
|
||||||
|
### Test --env for \n and \\ - single and double --onall (*csh only) - no output is good
|
||||||
1 2\ \92V2=\ \92
|
1 2\ \92V2=\ \92
|
||||||
3 2\\ \92V2=\\ \92
|
1 2\\ \92V2=\\ \92
|
||||||
1 V: Undefined variable.
|
8 : Command not found.
|
||||||
1 export: Command not found.
|
4 Unmatched ".
|
||||||
2 setenv: Too many arguments.
|
8 \ : Command not found.
|
||||||
### Test --env for \n and \\ - single and double --onall - no output is good
|
|
||||||
2 1 10V2= 10
|
|
||||||
1 2\ \92V2=\ \92
|
|
||||||
3 2\\ \92V2=\\ \92
|
|
||||||
1 V: Undefined variable.
|
|
||||||
1 export: Command not found.
|
|
||||||
2 setenv: Too many arguments.
|
|
||||||
### Test --env for \160 - which kills csh - single and double - no output is good
|
### Test --env for \160 - which kills csh - single and double - no output is good
|
||||||
### Test --env for \160 - which kills csh - single and double --onall - no output is good
|
### Test --env for \160 - which kills csh - single and double --onall - no output is good
|
||||||
|
|
|
@ -36,16 +36,16 @@ Cores should complete first on machines with less than 4 physical CPUs
|
||||||
cores done
|
cores done
|
||||||
CPUs done
|
CPUs done
|
||||||
### Test --tag ::: a ::: b
|
### Test --tag ::: a ::: b
|
||||||
a b stderr-a b
|
|
||||||
a b stdout-a b
|
a b stdout-a b
|
||||||
|
a b stderr-a b
|
||||||
### Test --tag ::: a b
|
### Test --tag ::: a b
|
||||||
a stderr-a
|
|
||||||
a stdout-a
|
a stdout-a
|
||||||
b stderr-b
|
a stderr-a
|
||||||
b stdout-b
|
b stdout-b
|
||||||
|
b stderr-b
|
||||||
### Test --tag -X ::: a b
|
### Test --tag -X ::: a b
|
||||||
a b stderr-a stderr-b
|
|
||||||
a b stdout-a stdout-b
|
a b stdout-a stdout-b
|
||||||
|
a b stderr-a stderr-b
|
||||||
### Test bash redirection <()
|
### Test bash redirection <()
|
||||||
a
|
a
|
||||||
b
|
b
|
||||||
|
|
|
@ -1,282 +1,48 @@
|
||||||
### Tests on polarhome machines
|
### Tests on polarhome machines
|
||||||
Setup on polarhome machines
|
Setup on polarhome machines
|
||||||
Fedora release 17 (Beefy Miracle)
|
copy_to_host freebsd.polarhome.com
|
||||||
Welcome to RedHat/Fedora ...member of polarhome.com realm
|
copy_to_host solaris.polarhome.com
|
||||||
|
copy_to_host openbsd.polarhome.com
|
||||||
|
copy_to_host netbsd.polarhome.com
|
||||||
Fedora release 17 (Beefy Miracle)
|
copy_to_host debian.polarhome.com
|
||||||
Welcome to RedHat/Fedora ...member of polarhome.com realm
|
copy_to_host aix.polarhome.com
|
||||||
aix.polarhome.com
|
copy_to_host redhat.polarhome.com
|
||||||
aix.polarhome.com
|
copy_to_host hpux.polarhome.com
|
||||||
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm
|
copy_to_host qnx.polarhome.com
|
||||||
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm
|
copy_to_host irix.polarhome.com
|
||||||
centos.polarhome.com
|
copy_to_host openindiana.polarhome.com
|
||||||
centos.polarhome.com
|
copy_to_host suse.polarhome.com
|
||||||
centos.polarhome.com
|
copy_to_host mandriva.polarhome.com
|
||||||
centos.polarhome.com
|
copy_to_host ubuntu.polarhome.com
|
||||||
centos.polarhome.com CentOS release 5.6 (Final)
|
copy_to_host scosysv.polarhome.com
|
||||||
centos.polarhome.com CentOS release 5.6 (Final)
|
copy_to_host unixware.polarhome.com
|
||||||
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm
|
copy_to_host dragonfly.polarhome.com
|
||||||
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm
|
copy_to_host centos.polarhome.com
|
||||||
debian.polarhome.com
|
copy_to_host miros.polarhome.com
|
||||||
debian.polarhome.com
|
copy_to_host hurd.polarhome.com
|
||||||
debian.polarhome.com
|
copy_to_host minix.polarhome.com
|
||||||
debian.polarhome.com
|
copy_to_host raspberrypi.polarhome.com
|
||||||
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze)
|
### Run the test on polarhome machines
|
||||||
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze)
|
|
||||||
debian.polarhome.com Welcome to debian ...member of polarhome.com realm
|
|
||||||
debian.polarhome.com Welcome to debian ...member of polarhome.com realm
|
|
||||||
dragonfly.polarhome.com
|
|
||||||
dragonfly.polarhome.com
|
|
||||||
dragonfly.polarhome.com
|
|
||||||
dragonfly.polarhome.com
|
|
||||||
dragonfly.polarhome.com DragonFly v2.10.1.1
|
|
||||||
dragonfly.polarhome.com DragonFly v2.10.1.1
|
|
||||||
dragonfly.polarhome.com Welcome to DragonFly ...member of polarhome.com realm
|
|
||||||
dragonfly.polarhome.com Welcome to DragonFly ...member of polarhome.com realm
|
|
||||||
freebsd.polarhome.com
|
|
||||||
freebsd.polarhome.com
|
|
||||||
freebsd.polarhome.com
|
|
||||||
freebsd.polarhome.com
|
|
||||||
freebsd.polarhome.com FreeBSD 8.2
|
|
||||||
freebsd.polarhome.com FreeBSD 8.2
|
|
||||||
freebsd.polarhome.com Welcome to FreeBSD ...member of polarhome.com realm
|
|
||||||
freebsd.polarhome.com Welcome to FreeBSD ...member of polarhome.com realm
|
|
||||||
hpux.polarhome.com
|
|
||||||
hpux.polarhome.com
|
|
||||||
hpux.polarhome.com
|
|
||||||
hpux.polarhome.com
|
|
||||||
hpux.polarhome.com HP-UX hpux.polarhome.com B.11.11 U 9000/785 (ta)
|
|
||||||
hpux.polarhome.com HP-UX hpux.polarhome.com B.11.11 U 9000/785 (ta)
|
|
||||||
hpux.polarhome.com Welcome to HPUX... member of polarhome.com realm
|
|
||||||
hpux.polarhome.com Welcome to HPUX... member of polarhome.com realm
|
|
||||||
hurd.polarhome.com
|
|
||||||
hurd.polarhome.com
|
|
||||||
hurd.polarhome.com
|
|
||||||
hurd.polarhome.com
|
|
||||||
hurd.polarhome.com Debian GNU/Hurd wheezy/sid
|
|
||||||
hurd.polarhome.com Debian GNU/Hurd wheezy/sid
|
|
||||||
hurd.polarhome.com Welcome to hurd ...member of polarhome.com realm.
|
|
||||||
hurd.polarhome.com Welcome to hurd ...member of polarhome.com realm.
|
|
||||||
irix.polarhome.com
|
|
||||||
irix.polarhome.com
|
|
||||||
irix.polarhome.com IRIX64 6.5 07202013 IP35
|
|
||||||
irix.polarhome.com IRIX64 6.5 07202013 IP35
|
|
||||||
irix.polarhome.com Welcome to irix ...member of polarhome.com realm
|
|
||||||
irix.polarhome.com Welcome to irix ...member of polarhome.com realm
|
|
||||||
mandriva.polarhome.com
|
|
||||||
mandriva.polarhome.com
|
|
||||||
mandriva.polarhome.com
|
|
||||||
mandriva.polarhome.com
|
|
||||||
mandriva.polarhome.com Mandriva Linux release 2010.2 (Official) for x86_64
|
|
||||||
mandriva.polarhome.com Mandriva Linux release 2010.2 (Official) for x86_64
|
|
||||||
mandriva.polarhome.com Welcome to Mandrake/Mandriva ...member of polarhome.com realm
|
|
||||||
mandriva.polarhome.com Welcome to Mandrake/Mandriva ...member of polarhome.com realm
|
|
||||||
netbsd.polarhome.com
|
|
||||||
netbsd.polarhome.com
|
|
||||||
netbsd.polarhome.com
|
|
||||||
netbsd.polarhome.com
|
|
||||||
netbsd.polarhome.com NetBSD 5.1
|
|
||||||
netbsd.polarhome.com NetBSD 5.1
|
|
||||||
netbsd.polarhome.com Welcome to NetBSD ...member of polarhome.com realm
|
|
||||||
netbsd.polarhome.com Welcome to NetBSD ...member of polarhome.com realm
|
|
||||||
openbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com OpenBSD 4.9
|
|
||||||
openbsd.polarhome.com OpenBSD 4.9
|
|
||||||
openbsd.polarhome.com Welcome to OpenBSD ...member of polarhome.com realm
|
|
||||||
openbsd.polarhome.com Welcome to OpenBSD ...member of polarhome.com realm
|
|
||||||
openindiana.polarhome.com
|
|
||||||
openindiana.polarhome.com
|
|
||||||
openindiana.polarhome.com
|
|
||||||
openindiana.polarhome.com
|
|
||||||
openindiana.polarhome.com OpenIndiana SunOS 5.11
|
|
||||||
openindiana.polarhome.com OpenIndiana SunOS 5.11
|
|
||||||
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm
|
|
||||||
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm
|
|
||||||
qnx.polarhome.com
|
|
||||||
qnx.polarhome.com
|
|
||||||
qnx.polarhome.com
|
|
||||||
qnx.polarhome.com
|
|
||||||
qnx.polarhome.com QNX 6.5.0
|
|
||||||
qnx.polarhome.com QNX 6.5.0
|
|
||||||
qnx.polarhome.com Welcome to QNX ...member of polarhome.com realm
|
|
||||||
qnx.polarhome.com Welcome to QNX ...member of polarhome.com realm
|
|
||||||
raspberrypi.polarhome.com
|
|
||||||
raspberrypi.polarhome.com
|
|
||||||
raspberrypi.polarhome.com Debian GNU/Linux 6.0
|
|
||||||
raspberrypi.polarhome.com Debian GNU/Linux 6.0
|
|
||||||
raspberrypi.polarhome.com RaspberryPi/bcm2708 reference 2.0
|
|
||||||
raspberrypi.polarhome.com RaspberryPi/bcm2708 reference 2.0
|
|
||||||
raspberrypi.polarhome.com Welcome to raspberrypi ...member of polarhome.com realm
|
|
||||||
raspberrypi.polarhome.com Welcome to raspberrypi ...member of polarhome.com realm
|
|
||||||
scosysv.polarhome.com
|
|
||||||
scosysv.polarhome.com
|
|
||||||
scosysv.polarhome.com SCO OpenServer(TM) Release 6
|
|
||||||
scosysv.polarhome.com SCO OpenServer(TM) Release 6
|
|
||||||
scosysv.polarhome.com Welcome to scosysv ...member of polarhome.com realm
|
|
||||||
scosysv.polarhome.com Welcome to scosysv ...member of polarhome.com realm
|
|
||||||
solaris.polarhome.com
|
|
||||||
solaris.polarhome.com
|
|
||||||
solaris.polarhome.com
|
|
||||||
solaris.polarhome.com
|
|
||||||
solaris.polarhome.com SUN Ultra-5
|
|
||||||
solaris.polarhome.com SUN Ultra-5
|
|
||||||
solaris.polarhome.com SunOS 5.10
|
|
||||||
solaris.polarhome.com SunOS 5.10
|
|
||||||
solaris.polarhome.com Welcome to Solaris ...member of polarhome.com realm
|
|
||||||
solaris.polarhome.com Welcome to Solaris ...member of polarhome.com realm
|
|
||||||
ssh aix.polarhome.com rm -f bin/parallel;scp bin/parallel aix.polarhome.com:bin/
|
|
||||||
ssh centos.polarhome.com rm -f bin/parallel;scp bin/parallel centos.polarhome.com:bin/
|
|
||||||
ssh debian.polarhome.com rm -f bin/parallel;scp bin/parallel debian.polarhome.com:bin/
|
|
||||||
ssh dragonfly.polarhome.com rm -f bin/parallel;scp bin/parallel dragonfly.polarhome.com:bin/
|
|
||||||
ssh freebsd.polarhome.com rm -f bin/parallel;scp bin/parallel freebsd.polarhome.com:bin/
|
|
||||||
ssh hpux.polarhome.com rm -f bin/parallel;scp bin/parallel hpux.polarhome.com:bin/
|
|
||||||
ssh hurd.polarhome.com rm -f bin/parallel;scp bin/parallel hurd.polarhome.com:bin/
|
|
||||||
ssh irix.polarhome.com rm -f bin/parallel;scp bin/parallel irix.polarhome.com:bin/
|
|
||||||
ssh mandriva.polarhome.com rm -f bin/parallel;scp bin/parallel mandriva.polarhome.com:bin/
|
|
||||||
ssh minix.polarhome.com rm -f bin/parallel;scp bin/parallel minix.polarhome.com:bin/
|
|
||||||
ssh netbsd.polarhome.com rm -f bin/parallel;scp bin/parallel netbsd.polarhome.com:bin/
|
|
||||||
ssh openbsd.polarhome.com rm -f bin/parallel;scp bin/parallel openbsd.polarhome.com:bin/
|
|
||||||
ssh openindiana.polarhome.com rm -f bin/parallel;scp bin/parallel openindiana.polarhome.com:bin/
|
|
||||||
ssh qnx.polarhome.com rm -f bin/parallel;scp bin/parallel qnx.polarhome.com:bin/
|
|
||||||
ssh raspberrypi.polarhome.com rm -f bin/parallel;scp bin/parallel raspberrypi.polarhome.com:bin/
|
|
||||||
ssh scosysv.polarhome.com rm -f bin/parallel;scp bin/parallel scosysv.polarhome.com:bin/
|
|
||||||
ssh solaris.polarhome.com rm -f bin/parallel;scp bin/parallel solaris.polarhome.com:bin/
|
|
||||||
ssh suse.polarhome.com rm -f bin/parallel;scp bin/parallel suse.polarhome.com:bin/
|
|
||||||
ssh ubuntu.polarhome.com rm -f bin/parallel;scp bin/parallel ubuntu.polarhome.com:bin/
|
|
||||||
ssh ultrix.polarhome.com rm -f bin/parallel;scp bin/parallel ultrix.polarhome.com:bin/
|
|
||||||
ssh unixware.polarhome.com rm -f bin/parallel;scp bin/parallel unixware.polarhome.com:bin/
|
|
||||||
suse.polarhome.com
|
|
||||||
suse.polarhome.com
|
|
||||||
suse.polarhome.com
|
|
||||||
suse.polarhome.com
|
|
||||||
suse.polarhome.com Welcome to SuSE/openSUSE ...member of polarhome.com realm
|
|
||||||
suse.polarhome.com Welcome to SuSE/openSUSE ...member of polarhome.com realm
|
|
||||||
suse.polarhome.com openSUSE 11.4 "Celadon"
|
|
||||||
suse.polarhome.com openSUSE 11.4 "Celadon"
|
|
||||||
ubuntu.polarhome.com
|
|
||||||
ubuntu.polarhome.com
|
|
||||||
ubuntu.polarhome.com
|
|
||||||
ubuntu.polarhome.com
|
|
||||||
ubuntu.polarhome.com Ubuntu 10.04.2 LTS
|
|
||||||
ubuntu.polarhome.com Ubuntu 10.04.2 LTS
|
|
||||||
ubuntu.polarhome.com Welcome to Ubuntu ...member of polarhome.com realm
|
|
||||||
ubuntu.polarhome.com Welcome to Ubuntu ...member of polarhome.com realm
|
|
||||||
unixware.polarhome.com
|
|
||||||
unixware.polarhome.com
|
|
||||||
unixware.polarhome.com SCO UnixWare 7.1.4
|
|
||||||
unixware.polarhome.com SCO UnixWare 7.1.4
|
|
||||||
unixware.polarhome.com Welcome to unixware ...member of polarhome.com realm
|
|
||||||
unixware.polarhome.com Welcome to unixware ...member of polarhome.com realm
|
|
||||||
Run the test on polarhome machines
|
|
||||||
aix.polarhome.com
|
|
||||||
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm
|
|
||||||
aix.polarhome.com Works on aix.polarhome.com
|
|
||||||
centos.polarhome.com
|
|
||||||
centos.polarhome.com
|
|
||||||
centos.polarhome.com CentOS release 5.6 (Final)
|
|
||||||
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm
|
|
||||||
centos.polarhome.com Works on centos.polarhome.com
|
|
||||||
debian.polarhome.com
|
|
||||||
debian.polarhome.com
|
|
||||||
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze)
|
|
||||||
debian.polarhome.com Welcome to debian ...member of polarhome.com realm
|
|
||||||
debian.polarhome.com Works on debian.polarhome.com
|
|
||||||
dragonfly.polarhome.com
|
|
||||||
dragonfly.polarhome.com
|
|
||||||
dragonfly.polarhome.com DragonFly v2.10.1.1
|
|
||||||
dragonfly.polarhome.com Welcome to DragonFly ...member of polarhome.com realm
|
|
||||||
dragonfly.polarhome.com Works on dragonfly.polarhome.com
|
|
||||||
freebsd.polarhome.com
|
|
||||||
freebsd.polarhome.com
|
|
||||||
freebsd.polarhome.com FreeBSD 8.2
|
|
||||||
freebsd.polarhome.com Welcome to FreeBSD ...member of polarhome.com realm
|
|
||||||
freebsd.polarhome.com Works on freebsd.polarhome.com
|
freebsd.polarhome.com Works on freebsd.polarhome.com
|
||||||
hpux.polarhome.com
|
solaris.polarhome.com Works on solaris.polarhome.com
|
||||||
hpux.polarhome.com
|
|
||||||
hpux.polarhome.com HP-UX hpux.polarhome.com B.11.11 U 9000/785 (ta)
|
|
||||||
hpux.polarhome.com No such file or directory: perl
|
|
||||||
hpux.polarhome.com Welcome to HPUX... member of polarhome.com realm
|
|
||||||
hurd.polarhome.com
|
|
||||||
hurd.polarhome.com
|
|
||||||
hurd.polarhome.com Debian GNU/Hurd wheezy/sid
|
|
||||||
hurd.polarhome.com Welcome to hurd ...member of polarhome.com realm.
|
|
||||||
hurd.polarhome.com Works on hurd.polarhome.com
|
|
||||||
irix.polarhome.com
|
|
||||||
irix.polarhome.com IRIX64 6.5 07202013 IP35
|
|
||||||
irix.polarhome.com Unknown open() mode '>&' at bin/parallel line 1310.
|
|
||||||
irix.polarhome.com Welcome to irix ...member of polarhome.com realm
|
|
||||||
mandriva.polarhome.com
|
|
||||||
mandriva.polarhome.com
|
|
||||||
mandriva.polarhome.com Mandriva Linux release 2010.2 (Official) for x86_64
|
|
||||||
mandriva.polarhome.com Welcome to Mandrake/Mandriva ...member of polarhome.com realm
|
|
||||||
mandriva.polarhome.com Works on mandriva.polarhome.com
|
|
||||||
minix.polarhome.com Works on minix.polarhome.com
|
|
||||||
netbsd.polarhome.com
|
|
||||||
netbsd.polarhome.com
|
|
||||||
netbsd.polarhome.com NetBSD 5.1
|
|
||||||
netbsd.polarhome.com Welcome to NetBSD ...member of polarhome.com realm
|
|
||||||
netbsd.polarhome.com Works on netbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com
|
|
||||||
openbsd.polarhome.com OpenBSD 4.9
|
|
||||||
openbsd.polarhome.com Welcome to OpenBSD ...member of polarhome.com realm
|
|
||||||
openbsd.polarhome.com Works on openbsd.polarhome.com
|
openbsd.polarhome.com Works on openbsd.polarhome.com
|
||||||
openindiana.polarhome.com
|
netbsd.polarhome.com Works on netbsd.polarhome.com
|
||||||
openindiana.polarhome.com
|
debian.polarhome.com Works on debian.polarhome.com
|
||||||
openindiana.polarhome.com OpenIndiana SunOS 5.11
|
aix.polarhome.com Works on aix.polarhome.com
|
||||||
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm
|
redhat.polarhome.com Works on redhat.polarhome.com
|
||||||
|
hpux.polarhome.com Works on hpux.polarhome.com
|
||||||
|
qnx.polarhome.com Works on qnx.polarhome.com
|
||||||
|
qnx.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1.
|
||||||
|
irix.polarhome.com Unknown open() mode '>&=' at bin/parallel line 1316.
|
||||||
openindiana.polarhome.com Works on openindiana.polarhome.com
|
openindiana.polarhome.com Works on openindiana.polarhome.com
|
||||||
openindiana.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1.
|
openindiana.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1.
|
||||||
qnx.polarhome.com
|
|
||||||
qnx.polarhome.com
|
|
||||||
qnx.polarhome.com QNX 6.5.0
|
|
||||||
qnx.polarhome.com Welcome to QNX ...member of polarhome.com realm
|
|
||||||
qnx.polarhome.com perl: No such file or directory
|
|
||||||
raspberrypi.polarhome.com
|
|
||||||
raspberrypi.polarhome.com
|
|
||||||
raspberrypi.polarhome.com CentOS release 5.6 (Final)
|
|
||||||
raspberrypi.polarhome.com Welcome to CentOS ...member of polarhome.com realm
|
|
||||||
raspberrypi.polarhome.com Works on raspberrypi.polarhome.com
|
|
||||||
scosysv.polarhome.com
|
|
||||||
scosysv.polarhome.com SCO OpenServer(TM) Release 6
|
|
||||||
scosysv.polarhome.com Welcome to scosysv ...member of polarhome.com realm
|
|
||||||
scosysv.polarhome.com Works on scosysv.polarhome.com
|
|
||||||
solaris.polarhome.com
|
|
||||||
solaris.polarhome.com
|
|
||||||
solaris.polarhome.com SUN Ultra-5
|
|
||||||
solaris.polarhome.com SunOS 5.10
|
|
||||||
solaris.polarhome.com Welcome to Solaris ...member of polarhome.com realm
|
|
||||||
solaris.polarhome.com Works on solaris.polarhome.com
|
|
||||||
suse.polarhome.com
|
|
||||||
suse.polarhome.com
|
|
||||||
suse.polarhome.com Welcome to SuSE/openSUSE ...member of polarhome.com realm
|
|
||||||
suse.polarhome.com Works on suse.polarhome.com
|
suse.polarhome.com Works on suse.polarhome.com
|
||||||
suse.polarhome.com openSUSE 11.4 "Celadon"
|
mandriva.polarhome.com Works on mandriva.polarhome.com
|
||||||
ubuntu.polarhome.com
|
|
||||||
ubuntu.polarhome.com
|
|
||||||
ubuntu.polarhome.com Ubuntu 10.04.2 LTS
|
|
||||||
ubuntu.polarhome.com Welcome to Ubuntu ...member of polarhome.com realm
|
|
||||||
ubuntu.polarhome.com Works on ubuntu.polarhome.com
|
ubuntu.polarhome.com Works on ubuntu.polarhome.com
|
||||||
ultrix.polarhome.com BEGIN failed--compilation aborted at File/Temp.pm line 148.
|
scosysv.polarhome.com Works on scosysv.polarhome.com
|
||||||
ultrix.polarhome.com BEGIN failed--compilation aborted at bin/parallel line 28.
|
|
||||||
ultrix.polarhome.com BEGIN not safe after errors--compilation aborted at Errno.pm line 188.
|
|
||||||
ultrix.polarhome.com Global symbol "EXPORT_OK" requires explicit package name at Errno.pm line 14.
|
|
||||||
ultrix.polarhome.com Global symbol "EXPORT_TAGS" requires explicit package name at Errno.pm line 32.
|
|
||||||
ultrix.polarhome.com Global symbol "ISA" requires explicit package name at Errno.pm line 12.
|
|
||||||
ultrix.polarhome.com Global symbol "VERSION" requires explicit package name at Errno.pm line 10.
|
|
||||||
ultrix.polarhome.com Global symbol "VERSION" requires explicit package name at Errno.pm line 11.
|
|
||||||
ultrix.polarhome.com Global symbol "VERSION" requires explicit package name at Errno.pm line 11.
|
|
||||||
ultrix.polarhome.com Variable "$VERSION" is not imported at Errno.pm line 10.
|
|
||||||
ultrix.polarhome.com Variable "$VERSION" is not imported at Errno.pm line 11.
|
|
||||||
ultrix.polarhome.com Variable "$VERSION" is not imported at Errno.pm line 11.
|
|
||||||
ultrix.polarhome.com Variable "%EXPORT_TAGS" is not imported at Errno.pm line 32.
|
|
||||||
ultrix.polarhome.com Variable "@EXPORT_OK" is not imported at Errno.pm line 14.
|
|
||||||
ultrix.polarhome.com Variable "@ISA" is not imported at Errno.pm line 12.
|
|
||||||
unixware.polarhome.com
|
|
||||||
unixware.polarhome.com SCO UnixWare 7.1.4
|
|
||||||
unixware.polarhome.com Welcome to unixware ...member of polarhome.com realm
|
|
||||||
unixware.polarhome.com Works on unixware.polarhome.com
|
unixware.polarhome.com Works on unixware.polarhome.com
|
||||||
|
dragonfly.polarhome.com Works on dragonfly.polarhome.com
|
||||||
|
centos.polarhome.com Works on centos.polarhome.com
|
||||||
|
miros.polarhome.com Works on miros.polarhome.com
|
||||||
|
hurd.polarhome.com Works on hurd.polarhome.com
|
||||||
|
minix.polarhome.com Works on minix.polarhome.com
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
### Test -k
|
### Test -k
|
||||||
parallel: Warning: Only enough filehandles to run 19 jobs in parallel. Raising ulimit -n may help.
|
parallel: Warning: Only enough file handles to run 19 jobs in parallel.
|
||||||
|
Raising ulimit -n or /etc/security/limits.conf may help.
|
||||||
begin
|
begin
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
@ -17,6 +18,7 @@ begin
|
||||||
14
|
14
|
||||||
15
|
15
|
||||||
16
|
16
|
||||||
|
parallel: Warning: No more file handles. Raising ulimit -n or /etc/security/limits.conf may help.
|
||||||
17
|
17
|
||||||
18
|
18
|
||||||
19
|
19
|
||||||
|
|
Loading…
Reference in a new issue