Merge branch 'master' of git.sv.gnu.org:/srv/git/parallel

This commit is contained in:
Ole Tange 2013-07-24 15:26:41 +02:00
commit 92773c7899
21 changed files with 426 additions and 508 deletions

View file

@ -14,7 +14,12 @@
# If that fails, it does a personal installation.
# 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
# Source dir does not exist
rm -f $LATEST.tar.bz2 $LATEST.tar.bz2.sig
@ -27,8 +32,10 @@ if gpg -h 2>/dev/null >/dev/null; then
# GnuPG installed
# Setup .gnupg/gpg.conf if not already done
echo | gpg 2>/dev/null >/dev/null
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
# Source code signed by Ole Tange <ole@tange.dk> KeyID FFFFFFF1
gpg --keyserver keys.gnupg.net --recv-key FFFFFFF1
gpg --keyserver keys.gnupg.net --recv-key 88888888
if gpg --with-fingerprint $LATEST.tar.bz2.sig 2>&1 | $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
else
# GnuPG signature failed
@ -46,12 +53,12 @@ else
echo
echo "Continue anyway? (y/n)"
read YN
if test $YN = "y" -o $YN = "Y"; then
# Continue
true
else
if test "$YN" = "n"; then
# Stop
exit 2
else
# Continue
true
fi
fi

32
NEWS
View file

@ -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
* --xapply now recycles arguments if an input source has more

12
README
View file

@ -40,9 +40,9 @@ document.
Full installation of GNU Parallel is as simple as:
wget http://ftpmirror.gnu.org/parallel/parallel-20130630.tar.bz2
bzip2 -dc parallel-20130630.tar.bz2 | tar xvf -
cd parallel-20130630
wget http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2
bzip2 -dc parallel-20130722.tar.bz2 | tar xvf -
cd parallel-20130722
./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
~/bin and ~/share:
wget http://ftpmirror.gnu.org/parallel/parallel-20130630.tar.bz2
bzip2 -dc parallel-20130630.tar.bz2 | tar xvf -
cd parallel-20130630
wget http://ftpmirror.gnu.org/parallel/parallel-20130722.tar.bz2
bzip2 -dc parallel-20130722.tar.bz2 | tar xvf -
cd parallel-20130722
./configure --prefix=$HOME && make && make install
Or if your system lacks 'make' you can simply copy src/parallel

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# 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>.
#
@ -559,8 +559,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='parallel'
PACKAGE_TARNAME='parallel'
PACKAGE_VERSION='20130630'
PACKAGE_STRING='parallel 20130630'
PACKAGE_VERSION='20130722'
PACKAGE_STRING='parallel 20130722'
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
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.
# This message is too long to be a string in the A/UX 3.1 sh.
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]...
@ -1242,7 +1242,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of parallel 20130630:";;
short | recursive ) echo "Configuration of parallel 20130722:";;
esac
cat <<\_ACEOF
@ -1309,7 +1309,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
parallel configure 20130630
parallel configure 20130722
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@ -1326,7 +1326,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
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
$ $0 $@
@ -2141,7 +2141,7 @@ fi
# Define the identity of the package.
PACKAGE='parallel'
VERSION='20130630'
VERSION='20130722'
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
# values after options handling.
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
CONFIG_FILES = $CONFIG_FILES
@ -2766,7 +2766,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
parallel config.status 20130630
parallel config.status 20130722
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"

View file

@ -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])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([

View file

@ -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-$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-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/
@ -125,6 +127,7 @@ cd parallel-$YYYYMMDD
./configure
make -j && sudo make -j install
pushd
sudo cp /usr/local/bin/parallel /usr/local/bin/parallel-$YYYYMMDD
== Update website ==
@ -200,10 +203,18 @@ Subject: GNU Parallel 20130722 ('Engelbart') released
GNU Parallel 20130722 ('Engelbart') has been released. It is
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:
* --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:
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
@ -212,14 +223,20 @@ New in this release:
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
* 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://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 =

View file

@ -155,11 +155,15 @@ xargs or cat | sh.</description>
<implementation id="sha1new=481d687481efe0e0f8dbb0af0c0dbe40cc40d522" released="2013-06-23" version="20130622">
<manifest-digest sha256new="SLPAY56ENZUBJYZMGTO4YVMNSJMSOEEUQLAFTTJT3QTDO2FZFXSQ"/>
<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>
</group>
</interface>
<!-- Base64 Signature
iEYEABECAAYFAlHGaUcACgkQ/lhgK1iJTtLZXgCgn8r6w9A1+qsc9WIIwe5tlztGkoIAoItQAri+
VEgZG7fWKYJAPRcsjIjJ
iEYEABECAAYFAlHuJGcACgkQ/lhgK1iJTtImYACghf1EdeotOCcE84zqBf8VWCZFLmEAn3lMXUMU
KKcEhYVWTdtgUeL5jAyH
-->

View file

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

View file

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

View file

@ -33,7 +33,6 @@ use Getopt::Long;
# Used to ensure code quality
use strict;
$SIG{TERM} ||= sub { exit 0; }; # $SIG{TERM} is not set on Mac OS X
if(not $ENV{SHELL}) {
# $ENV{SHELL} is sometimes not set on Mac OS X and Windows
::warning("\$SHELL not set. Using /bin/sh.\n");
@ -45,9 +44,10 @@ if(not $ENV{HOME}) {
$ENV{HOME} = "/tmp";
}
save_sig_stdin_stdout_stderr();
save_stdin_stdout_stderr();
save_original_signal_handler();
parse_options();
::debug("Open file descriptors: ".join(" ",keys %Global::fd)."\n");
my $number_of_args;
if($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($record_ref);
my $fh = $job->stdin();
close $fh;
my $stdin_fh = $job->fd(0);
close $stdin_fh;
exit(0);
}
my $fh = $job->stdin();
close $fh;
my $stdin_fh = $job->fd(0);
close $stdin_fh;
return 1;
}
@ -726,7 +726,7 @@ sub get_options_from_array {
sub parse_options {
# Returns: N/A
# Defaults:
$Global::version = 20130630;
$Global::version = 20130722;
$Global::progname = 'parallel';
$Global::infinity = 2**31;
$Global::debug = 0;
@ -1057,7 +1057,7 @@ sub open_joblog {
} else {
if($opt::joblog eq "-") {
# Use STDOUT as joblog
$Global::joblog = $Global::original_stdout
$Global::joblog = $Global::fd{1};
} elsif(not open($Global::joblog, ">", $opt::joblog)) {
# Overwrite the joblog
::error("Cannot write to --joblog $opt::joblog.\n");
@ -1304,6 +1304,26 @@ sub shell_unquote {
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 {
# check that we have enough filehandles available for starting
# another job
@ -1314,15 +1334,17 @@ sub enough_file_handles {
if($Global::grouped) {
my %fh;
my $enough_filehandles = 1;
# We need a filehandle for STDOUT and STDERR
# perl uses 7 filehandles for something?
# 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");
}
for (values %fh) { close $_; }
return $enough_filehandles;
} else {
# 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_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 {
$Global::total_running = 0;
$Global::total_started = 0;
@ -1483,13 +1492,15 @@ sub start_another_job {
::usleep(rand()*300);
::warning("No more processes: ",
"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;
}
}
} else {
# 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;
}
}
@ -1518,8 +1529,8 @@ sub drain_job_queue {
if($opt::pipe) {
# When using --pipe sometimes file handles are not closed properly
for my $job (values %Global::running) {
my $fh = $job->stdin();
close $fh;
my $stdin_fh = $job->fd(0);
close $stdin_fh;
}
}
if($opt::progress) {
@ -1915,6 +1926,14 @@ sub cleanup_basefile {
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 {
# Returns: N/A
for my $v (values %Global::running) {
@ -2306,8 +2325,10 @@ sub debug {
# Returns: N/A
$Global::debug or return;
@_ = grep { defined $_ ? $_ : "" } @_;
if($Global::original_stdout) {
print $Global::original_stdout @_;
if($Global::fd{1}) {
# Original stdout was saved
my $stdout = $Global::fd{1};
print $stdout @_;
} else {
print @_;
}
@ -2865,16 +2886,16 @@ sub processes_available_by_system_limit {
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");
::warning("Cannot spawn any jobs. Raising ulimit -u or /etc/security/limits.conf 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");
::warning("Only enough file handles to run ", $system_limit, " jobs in parallel.\n",
"Raising ulimit -n or /etc/security/limits.conf 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");
" jobs in parallel. Raising ulimit -u or /etc/security/limits.conf may help.\n");
}
}
if($] == 5.008008 and $system_limit > 1000) {
@ -3582,10 +3603,7 @@ sub new {
'commandline' => $commandline, # The commandline with no args
'workdir' => undef, # --workdir
'stdin' => undef, # filehandle for stdin (used for --pipe)
'stdout' => undef, # filehandle for stdout (used for --group)
# 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)
'datawritten' => 0, # amount of data sent via stdin (used for --pipe)
'transfersize' => 0, # size of files using --transfer
@ -3628,65 +3646,53 @@ sub openresultsfile {
::error("Cannot write to `$name'.\n");
::wait_and_exit(255);
}
$self->set_stdoutfilename($name);
$self->set_fd_file_name(1,$name);
# prefix/name1/val1/name2/val2/stderr
$name = "$dir/stderr";
if(not open($errfh,"+>",$name)) {
::error("Cannot write to `$name'.\n");
::wait_and_exit(255);
}
$self->set_fd_file_name(2,$name);
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
$self->set_stdout($outfh);
$self->set_stderr($errfh);
$self->set_fd(1,$outfh);
$self->set_fd(2,$errfh);
}
sub set_stdout {
sub set_fd {
# Set file descriptor
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;
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;
$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;
return $self->{'stdoutfilename'};
}
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;
my $fd_no = shift;
return $self->{'fd_file_name',$fd_no};
}
sub write {
my $self = shift;
my $remaining_ref = shift;
my $in = $self->{'stdin'};
syswrite($in,$$remaining_ref);
my $stdin_fh = $self->fd(0);
syswrite($stdin_fh,$$remaining_ref);
}
sub set_stdin_buffer {
@ -3787,7 +3793,7 @@ sub runtime {
# Returns:
# Run time in seconds
my $self = shift;
return int(($self->endtime() - $self->starttime())*1000)/1000;
return sprintf("%.3f",int(($self->endtime() - $self->starttime())*1000)/1000);
}
sub endtime {
@ -4263,15 +4269,15 @@ sub start {
# To group we create temporary files for STDOUT and STDERR
# To avoid the cleanup unlink the files immediately (but keep them open)
($outfh, $name) = ::tempfile(SUFFIX => ".par");
$job->set_stdoutfilename($name);
$job->set_fd_file_name(1,$name);
$opt::files or unlink $name;
($errfh, $name) = ::tempfile(SUFFIX => ".par");
unlink $name;
open OUT, '>&', $outfh or ::die_bug("Can't redirect STDOUT: $!");
open ERR, '>&', $errfh or ::die_bug("Can't dup STDOUT: $!");
$job->set_stdout($outfh);
$job->set_stderr($errfh);
$job->set_fd(1,$outfh);
$job->set_fd(2,$errfh);
} else {
(*OUT,*ERR)=(*STDOUT,*STDERR);
}
@ -4292,7 +4298,7 @@ sub start {
::debug("$Global::total_running processes. Starting ("
. $job->seq() . "): $command\n");
if($opt::pipe) {
my ($in);
my ($stdin_fh);
# Wrap command with end-of-file detector,
# so we do not spawn a program if there is no input.
# Exit value:
@ -4309,11 +4315,11 @@ sub start {
"($command);";
# The eval is needed to catch exception from open3
eval {
$pid = ::open3($in, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
$pid = ::open3($stdin_fh, ">&OUT", ">&ERR", $ENV{SHELL}, "-c", $command) ||
::die_bug("open3-pipe");
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
and $job->sshlogin()->string() eq ":") {
# Give STDIN to the first job if using -a (but only if running
@ -4326,7 +4332,7 @@ sub start {
1;
};
# Re-open to avoid complaining
open STDIN, "<&", $Global::original_stdin
open(STDIN, "<&", $Global::original_stdin)
or ::die_bug("dup-\$Global::original_stdin: $!");
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
open(my $devtty_fh, "<", "/dev/tty")) {
@ -4417,18 +4423,16 @@ sub print {
if($opt::pipe and $self->virgin()) {
# Nothing was printed to this job:
# cleanup tmp files if --files was set
unlink $self->{'stdoutfilename'};
unlink $self->fd_file_name(1);
return;
}
if($opt::dryrun) {
# Nothing was printed to this job:
# cleanup tmp files if --files was set
unlink $self->{'stdoutfilename'};
unlink $self->fd_file_name(1);
}
# Only relevant for grouping
$Global::grouped or return;
my $out = $self->stdout();
my $err = $self->stderr();
my $command = $self->sshlogin_wrap();
if($Global::joblog) {
@ -4461,60 +4465,61 @@ sub print {
# so flush to avoid STDOUT being buffered
flush STDOUT;
}
seek $err, 0, 0;
for my $fdno (sort { $a <=> $b } keys %Global::fd) {
# Sort by file descriptor numerically: 1,2,3,..,9,10,11
$fdno == 0 and next;
my $out_fd = $Global::fd{$fdno};
my $in_fd = $self->fd($fdno);
if(not $in_fd) {
# ::warning("File descriptor $fdno not defined\n");
next;
}
seek $in_fd, 0, 0;
if($Global::debug) {
print STDERR "ERR:\n";
print STDERR "File descriptor $fdno:\n";
}
if($opt::tag or defined $opt::tagstring) {
my $tag = $self->tag();
# OpenSSH_3.6.1p2 gives 'tcgetattr: Invalid argument' with -tt
# This is a crappy way of ignoring it.
while(<$err>) {
if($_ ne "tcgetattr: Invalid argument\n") {
print STDERR $tag,$_;
}
# At most run the loop once
last;
}
while(<$err>) {
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";
$self->fd_file_name($fdno) and print $out_fd $self->fd_file_name($fdno),"\n";
} else {
my $buf;
seek $out, 0, 0;
seek $in_fd, 0, 0;
if($Global::debug) {
print STDOUT "OUT:\n";
}
if($opt::tag or defined $opt::tagstring) {
my $tag = $self->tag();
while(<$out>) {
print STDOUT $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;
while(sysread($out,$buf,1_000_000)) {
print STDOUT $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");
close $in_fd;
}
close $out;
close $err;
}
sub tag {
@ -6006,6 +6011,6 @@ sub mkdir_or_die {
}
# 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;

View file

@ -397,7 +397,7 @@ I<regexp> is a Perl Regular Expression:
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.
@ -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.
=item B<--env> I<var>
=item B<--env> I<var> (alpha testing)
Copy environment variable I<var>. This will copy I<var> to the
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>
@ -485,7 +486,7 @@ See also: B<--bg>, B<man sem>
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
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>.
=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<-s> I<max-chars>
@ -1370,7 +1384,7 @@ different dir for the files. Setting B<--tmpdir> is equivalent to
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>
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.
=item B<--xapply> (alpha testing)
=item B<--xapply> (beta testing)
Read multiple input sources like B<xapply>. If multiple input sources
are given, one argument will be read from each of the input

View file

@ -420,8 +420,8 @@ separating the columns. The n'th column can be access using
@emph{regexp} is a Perl Regular Expression:
http://perldoc.perl.org/perlre.html
@item @strong{--ctrlc} (beta testing)
@anchor{@strong{--ctrlc} (beta testing)}
@item @strong{--ctrlc}
@anchor{@strong{--ctrlc}}
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
@strong{-E} nor @strong{-e} is used, no end of file string is used.
@item @strong{--env} @emph{var}
@anchor{@strong{--env} @emph{var}}
@item @strong{--env} @emph{var} (alpha testing)
@anchor{@strong{--env} @emph{var} (alpha testing)}
Copy environment variable @emph{var}. This will copy @emph{var} to the
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}
@anchor{@strong{--eta}}
@ -512,8 +513,8 @@ See also: @strong{--bg}, @strong{man sem}
Implies @strong{--semaphore}.
@item @strong{--filter-hosts} (alpha testing)
@anchor{@strong{--filter-hosts} (alpha testing)}
@item @strong{--filter-hosts} (beta testing)
@anchor{@strong{--filter-hosts} (beta testing)}
Remove down hosts. For each remote host: check that login through ssh
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
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}
@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
setting $TMPDIR.
@item @strong{--timeout} @emph{val} (beta testing)
@anchor{@strong{--timeout} @emph{val} (beta testing)}
@item @strong{--timeout} @emph{val}
@anchor{@strong{--timeout} @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
@ -1695,8 +1710,8 @@ See also @strong{-m}.
Exit if the size (see the @strong{-s} option) is exceeded.
@item @strong{--xapply} (alpha testing)
@anchor{@strong{--xapply} (alpha testing)}
@item @strong{--xapply} (beta testing)
@anchor{@strong{--xapply} (beta testing)}
Read multiple input sources like @strong{xapply}. If multiple input sources
are given, one argument will be read from each of the input

View file

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

View file

@ -5,50 +5,72 @@
# I.e.: No race conditions, no logins
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 | 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 '**'
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 '### Test of --retries on unreachable host'
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
echo '**'
echo '### Test race condition on 8 CPU (my laptop)';
seq 1 5000000 > /tmp/parallel_test;
seq 1 10 | parallel -k "cat /tmp/parallel_test | parallel --pipe --recend '' -k gzip >/dev/null; echo {}"
echo '**'
echo '### Test exit val - true';
echo true | parallel;
echo $?
echo '**'
echo '### Test exit val - false';
echo false | parallel;
echo $?
echo '**'
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 $?;
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 0;
echo $?
echo '**'
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 $?;
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 1;
echo $?
echo '**'
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 $?;
(echo "sleep 1;true"; echo "sleep 2;false";echo "sleep 3;true";echo "sleep 4; non_exist") | parallel -j10 --halt 2;
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';
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';
echo $?
echo exit code $?
echo '**'
echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834';
seq 1 3 | parallel -j1 "sleep 2; echo {}" | parallel -kj2 echo

View file

@ -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 tcsh@localhost --env SPC echo 'a"$SPC"b' ::: 5
echo '### Test --env for \n and \\ - single and double - 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
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 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'
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
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 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'
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

View file

@ -1,19 +1,29 @@
#!/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="scosysv centos dragonfly netbsd freebsd solaris openbsd debian aix hpux qnx irix suse minix openindiana mandriva unixware raspberrypi hurd ultrix ubuntu"
#P="scosysv hpux qnx irix openindiana ultrix"
POLAR=`parallel echo {}.polarhome.com ::: $P`
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_NOTWORKING="vax alpha openstep"
P_NOTWORKING_YET="ultrix tru64"
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 'Setup on polarhome machines'
stdout parallel -kj0 ssh {} mkdir -p bin ::: $POLAR >/dev/null 2>/dev/null &
# scp to each polarhome machine do not work. From redhat it works.
stdout rsync -a `which parallel` redhat.polarhome.com:bin/
stdout ssh redhat.polarhome.com \
chmod 755 bin/parallel\; \
bin/parallel --tag -kj0 -v --delay 0.2 ssh {} rm -f bin/parallel\\\;scp bin/parallel {}:bin/ ::: $POLAR | sort
stdout parallel -kj0 ssh -oLogLevel=quiet {} mkdir -p bin ::: $POLAR &
# scp to each polarhome machine do not work. Use cat
copy_to_host() {
H=$1
# Avoid the stupid /etc/issue.net banner with -oLogLevel=quiet
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
echo 'Run the test on polarhome machines'
stdout parallel --argsep // -k --tag ssh {} bin/parallel -k echo Works on ::: {} // $POLAR | sort
echo '### Run the test on polarhome machines'
stdout parallel -j0 --argsep // -k --tag ssh -oLogLevel=quiet {} bin/perl bin/parallel -k echo Works on ::: {} // $POLAR

View file

@ -1,9 +1,12 @@
### Test if we can deal with output > 4 GB
46a318993dfc8e2afd71ff2bc6f605f1 -
**
### 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
end
**
### Test of --retries on unreachable host
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.
@ -11,6 +14,7 @@ echo 1
1
echo 2
2
**
### Test race condition on 8 CPU (my laptop)
1
2
@ -22,14 +26,21 @@ echo 2
8
9
10
**
### Test exit val - true
0
**
### Test exit val - false
1
/bin/bash: non_exist: command not found
**
### Test --halt-on-error 0
1
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:
sleep 2;false
/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
parallel: Starting no more jobs. Waiting for 1 jobs to finish. This job failed:
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
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
1
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
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
### Test last dying print --halt-on-error 2
exit code 1
0
1
parallel: This job failed:
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
1
2

View file

@ -24,19 +24,25 @@ 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
2 1 10V2= 10
### Test --env for \n and \\ - single and double (bash only) - no output is good
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
3 2\\ \92V2=\\ \92
1 V: Undefined variable.
1 export: Command not found.
2 setenv: Too many arguments.
### 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.
1 2\\ \92V2=\\ \92
8 : Command not found.
4 Unmatched ".
8 \ : Command not found.
### 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

View file

@ -36,16 +36,16 @@ Cores should complete first on machines with less than 4 physical CPUs
cores done
CPUs done
### Test --tag ::: a ::: b
a b stderr-a b
a b stdout-a b
a b stderr-a b
### Test --tag ::: a b
a stderr-a
a stdout-a
b stderr-b
a stderr-a
b stdout-b
b stderr-b
### Test --tag -X ::: a b
a b stderr-a stderr-b
a b stdout-a stdout-b
a b stderr-a stderr-b
### Test bash redirection <()
a
b

View file

@ -1,282 +1,48 @@
### Tests on polarhome machines
Setup on polarhome machines
Fedora release 17 (Beefy Miracle)
Welcome to RedHat/Fedora ...member of polarhome.com realm
Fedora release 17 (Beefy Miracle)
Welcome to RedHat/Fedora ...member of polarhome.com realm
aix.polarhome.com
aix.polarhome.com
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm
aix.polarhome.com Welcome to AIX7 ...member of polarhome.com realm
centos.polarhome.com
centos.polarhome.com
centos.polarhome.com
centos.polarhome.com
centos.polarhome.com CentOS release 5.6 (Final)
centos.polarhome.com CentOS release 5.6 (Final)
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm
centos.polarhome.com Welcome to CentOS ...member of polarhome.com realm
debian.polarhome.com
debian.polarhome.com
debian.polarhome.com
debian.polarhome.com
debian.polarhome.com Debian GNU/Linux 6.0.2 (squeeze)
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
copy_to_host freebsd.polarhome.com
copy_to_host solaris.polarhome.com
copy_to_host openbsd.polarhome.com
copy_to_host netbsd.polarhome.com
copy_to_host debian.polarhome.com
copy_to_host aix.polarhome.com
copy_to_host redhat.polarhome.com
copy_to_host hpux.polarhome.com
copy_to_host qnx.polarhome.com
copy_to_host irix.polarhome.com
copy_to_host openindiana.polarhome.com
copy_to_host suse.polarhome.com
copy_to_host mandriva.polarhome.com
copy_to_host ubuntu.polarhome.com
copy_to_host scosysv.polarhome.com
copy_to_host unixware.polarhome.com
copy_to_host dragonfly.polarhome.com
copy_to_host centos.polarhome.com
copy_to_host miros.polarhome.com
copy_to_host hurd.polarhome.com
copy_to_host minix.polarhome.com
copy_to_host raspberrypi.polarhome.com
### Run the test on polarhome machines
freebsd.polarhome.com Works on freebsd.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 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
solaris.polarhome.com Works on solaris.polarhome.com
openbsd.polarhome.com Works on openbsd.polarhome.com
openindiana.polarhome.com
openindiana.polarhome.com
openindiana.polarhome.com OpenIndiana SunOS 5.11
openindiana.polarhome.com Welcome to OpenIndiana ...member of polarhome.com realm
netbsd.polarhome.com Works on netbsd.polarhome.com
debian.polarhome.com Works on debian.polarhome.com
aix.polarhome.com Works on aix.polarhome.com
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 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 openSUSE 11.4 "Celadon"
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
mandriva.polarhome.com Works on mandriva.polarhome.com
ubuntu.polarhome.com Works on ubuntu.polarhome.com
ultrix.polarhome.com BEGIN failed--compilation aborted at File/Temp.pm line 148.
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
scosysv.polarhome.com Works on scosysv.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

View file

@ -1,5 +1,6 @@
### 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
1
2
@ -17,6 +18,7 @@ begin
14
15
16
parallel: Warning: No more file handles. Raising ulimit -n or /etc/security/limits.conf may help.
17
18
19