mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-26 07:57:58 +00:00
Fixed bug #44553: --rpl should replace the longest expression first.
This commit is contained in:
parent
32b6dc4ba5
commit
8990c7bb42
|
@ -208,28 +208,51 @@ cc:Tim Cuthbertson <tim3d.junk@gmail.com>,
|
||||||
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>,
|
||||||
Jesse Alama <jesse.alama@gmail.com>
|
Jesse Alama <jesse.alama@gmail.com>
|
||||||
|
|
||||||
Subject: GNU Parallel 20150322 ('') released
|
Subject: GNU Parallel 20150322 ('Hellwig') released
|
||||||
|
|
||||||
GNU Parallel 20150322 ('') has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
GNU Parallel 20150322 ('Hellwig') has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/
|
||||||
|
|
||||||
Haiku of the month:
|
Haiku of the month:
|
||||||
|
|
||||||
<<>>
|
Stand up for your rights.
|
||||||
|
VMware does not comply.
|
||||||
|
Hellwig goes to court.
|
||||||
|
|
||||||
|
(https://sfconservancy.org/linux-compliance/vmware-lawsuit-faq.html)
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
|
* --number-of-cores respects 'taskset' on GNU/Linux.
|
||||||
|
|
||||||
|
* --joblog --pipe gives the data send and received in the log.
|
||||||
|
|
||||||
|
* GNU Parallel was tested to support 100 GB sized records in --pipe. A few bugs was fixed to support >2 GB records. It works, but is rather slow.
|
||||||
|
|
||||||
* GNU Parallel was cited in: RIG: Recalibration and Interrelation of genomic sequence data with the GATK http://www.g3journal.org/content/early/2015/02/13/g3.115.017012.full.pdf+html
|
* GNU Parallel was cited in: RIG: Recalibration and Interrelation of genomic sequence data with the GATK http://www.g3journal.org/content/early/2015/02/13/g3.115.017012.full.pdf+html
|
||||||
|
|
||||||
* GNU Parallel was cited in: MPI-blastn and NCBI-TaxCollector: Improving metagenomic analysis with high performance classification and wide taxonomic attachment http://www.worldscientific.com/doi/abs/10.1142/S0219720014500139?af=R&
|
* GNU Parallel was cited in: MPI-blastn and NCBI-TaxCollector: Improving metagenomic analysis with high performance classification and wide taxonomic attachment http://www.worldscientific.com/doi/abs/10.1142/S0219720014500139?af=R&
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Recent evolution in Rattus norvegicus is shaped by declining effective population size http://biorxiv.org/content/biorxiv/early/2015/03/01/015818.full.pdf
|
||||||
|
|
||||||
|
* GNU Parallel was cited in: Evidence for DCO+ as a probe of ionization in the warm disk surface http://arxiv.org/pdf/1503.02659.pdf
|
||||||
|
|
||||||
* GNU Parallel was used in: https://github.com/alexbyrnes/FCC-Political-Ads_The-Code
|
* GNU Parallel was used in: https://github.com/alexbyrnes/FCC-Political-Ads_The-Code
|
||||||
|
|
||||||
* GNU Parallel was used in: https://github.com/martymac/fpart
|
* GNU Parallel was used in: https://github.com/martymac/fpart
|
||||||
|
|
||||||
* GNU Parallel was used in: https://github.com/mehmattski/HybSeqPipeline
|
* GNU Parallel was used in: https://github.com/mehmattski/HybSeqPipeline
|
||||||
|
|
||||||
|
|
||||||
|
taxator-tk http://algbio.cs.uni-duesseldorf.de/webapps/wa-download/ (check it)
|
||||||
|
|
||||||
* Using GNU Parallel on a Raspberry Pi cluster: http://www.dcglug.org.uk/cluster-progress/
|
* Using GNU Parallel on a Raspberry Pi cluster: http://www.dcglug.org.uk/cluster-progress/
|
||||||
|
|
||||||
|
* Running scripts in parallel with GNU Parallel: http://code.jasonbhill.com/2015/03/
|
||||||
|
|
||||||
|
* Mahout: Parallelising the creation of DecisionTrees: http://www.markhneedham.com/blog/2012/12/27/mahout-parallelising-the-creation-of-decisiontrees/
|
||||||
|
|
||||||
|
* Parallel - Jobs in Skripten parallelisieren: https://slzm.de/blog/linux-tool-des-tages-parallel-jobs-in-skripten-parallelisieren/#more-612
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
GNU Parallel - For people who live life in the parallel lane.
|
GNU Parallel - For people who live life in the parallel lane.
|
||||||
|
|
49
src/parallel
49
src/parallel
|
@ -1052,7 +1052,7 @@ sub parse_options {
|
||||||
|
|
||||||
sub init_globals {
|
sub init_globals {
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20150307;
|
$Global::version = 20150308;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -1585,7 +1585,7 @@ sub perl_quote_scalar {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub unquote_printf {
|
sub unquote_printf {
|
||||||
# Convert \t \n \r \0 \000
|
# Convert \t \n \r \000 \0
|
||||||
$_ = shift;
|
$_ = shift;
|
||||||
s/\\t/\t/g;
|
s/\\t/\t/g;
|
||||||
s/\\n/\n/g;
|
s/\\n/\n/g;
|
||||||
|
@ -3756,7 +3756,7 @@ sub memfree_recompute {
|
||||||
my $script = memfreescript();
|
my $script = memfreescript();
|
||||||
|
|
||||||
# TODO add sshlogin and backgrounding
|
# TODO add sshlogin and backgrounding
|
||||||
$self->{'memfree'} = `$script`;
|
$self->{'memfree'} = qx{ $script };
|
||||||
#::debug("mem","New free:",$self->{'memfree'}," ");
|
#::debug("mem","New free:",$self->{'memfree'}," ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3805,7 +3805,7 @@ sub memfree_recompute {
|
||||||
for my $os (keys %script_of) {
|
for my $os (keys %script_of) {
|
||||||
$perlscript .= 'if($^O eq "'.$os.'") { '.$script_of{$os}.'}';
|
$perlscript .= 'if($^O eq "'.$os.'") { '.$script_of{$os}.'}';
|
||||||
}
|
}
|
||||||
$perlscript =~ s/[\t\n]/ /g;
|
$perlscript =~ s/[\t\n ]+/ /g;
|
||||||
$perlscript = "perl -e " . ::shell_quote_scalar($perlscript);
|
$perlscript = "perl -e " . ::shell_quote_scalar($perlscript);
|
||||||
$script = $Global::envvar. " " .$perlscript;
|
$script = $Global::envvar. " " .$perlscript;
|
||||||
}
|
}
|
||||||
|
@ -5403,16 +5403,27 @@ sub slot {
|
||||||
# syswrite may be interrupted by SIGHUP
|
# syswrite may be interrupted by SIGHUP
|
||||||
substr($buf,0,$bytes_written) = "";
|
substr($buf,0,$bytes_written) = "";
|
||||||
}
|
}
|
||||||
|
# Something printed: Wait less next time
|
||||||
|
$sleep /= 2;
|
||||||
} else {
|
} else {
|
||||||
if(eof(IN) and not $writer_running) {
|
if(eof(IN) and not $writer_running) {
|
||||||
# Writer dead: There will never be more to read => exit
|
# Writer dead: There will never be more to read => exit
|
||||||
-e $unlink_file and unlink $unlink_file;
|
-e $unlink_file and unlink $unlink_file;
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
# Wait for something to happen on file handle IN
|
# TODO This could probably be done more efficiently using select(2)
|
||||||
select(fileno(IN), undef, undef, undef);
|
# Nothing read: Wait longer before next read
|
||||||
|
# Up to 30 milliseconds
|
||||||
|
$sleep = ($sleep < 30) ? ($sleep * 1.001 + 0.01) : ($sleep);
|
||||||
|
usleep($sleep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub usleep {
|
||||||
|
# Sleep this many milliseconds.
|
||||||
|
my $secs = shift;
|
||||||
|
select(undef, undef, undef, $secs/1000);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
$cattail =~ s/#.*//mg;
|
$cattail =~ s/#.*//mg;
|
||||||
$cattail =~ s/\s+/ /g;
|
$cattail =~ s/\s+/ /g;
|
||||||
|
@ -6684,7 +6695,7 @@ sub print_dryrun_and_verbose {
|
||||||
(undef, $tmuxsocket) = ::tmpfile(SUFFIX => ".tms");
|
(undef, $tmuxsocket) = ::tmpfile(SUFFIX => ".tms");
|
||||||
$Global::unlink{$tmuxsocket} = 1;
|
$Global::unlink{$tmuxsocket} = 1;
|
||||||
unlink $tmuxsocket;
|
unlink $tmuxsocket;
|
||||||
::status("See output with: $ENV{'TMUX'} -S $tmuxsocket attach -t p$$\n");
|
::status("See output with: $ENV{'TMUX'} -S $tmuxsocket attach\n");
|
||||||
}
|
}
|
||||||
$tmux = $ENV{'TMUX'}." -S $tmuxsocket new-session -s p$$ -d 'sleep .2' >&/dev/null;" .
|
$tmux = $ENV{'TMUX'}." -S $tmuxsocket new-session -s p$$ -d 'sleep .2' >&/dev/null;" .
|
||||||
$ENV{'TMUX'}." -S $tmuxsocket new-window -t p$$ -n $title";
|
$ENV{'TMUX'}." -S $tmuxsocket new-window -t p$$ -n $title";
|
||||||
|
@ -6801,7 +6812,6 @@ sub print {
|
||||||
# Skip --joblog, --dryrun, --verbose
|
# Skip --joblog, --dryrun, --verbose
|
||||||
} else {
|
} else {
|
||||||
if($opt::ungroup and $Global::joblog and defined $self->{'exitstatus'}) {
|
if($opt::ungroup and $Global::joblog and defined $self->{'exitstatus'}) {
|
||||||
# if($Global::joblog and defined $self->{'exitstatus'}) {
|
|
||||||
# Add to joblog when finished
|
# Add to joblog when finished
|
||||||
$self->print_joblog();
|
$self->print_joblog();
|
||||||
# Printing is only relevant for grouped/--line-buffer output.
|
# Printing is only relevant for grouped/--line-buffer output.
|
||||||
|
@ -7659,7 +7669,6 @@ sub replaced {
|
||||||
# This is actually a CommandLine-object,
|
# This is actually a CommandLine-object,
|
||||||
# but it looks nice to be able to say {= $job->slot() =}
|
# but it looks nice to be able to say {= $job->slot() =}
|
||||||
my $job = $self;
|
my $job = $self;
|
||||||
|
|
||||||
for my $word (@word) {
|
for my $word (@word) {
|
||||||
# word = AB \257< perlexpr \257> CD \257< perlexpr \257> EF
|
# word = AB \257< perlexpr \257> CD \257< perlexpr \257> EF
|
||||||
::debug("replace", "Replacing in $word\n");
|
::debug("replace", "Replacing in $word\n");
|
||||||
|
@ -7758,7 +7767,10 @@ sub new {
|
||||||
# to deal with: {={==}
|
# to deal with: {={==}
|
||||||
while(s{([^\257]*) \Q$Global::parensleft\E ([^\257]*?) \Q$Global::parensright\E }
|
while(s{([^\257]*) \Q$Global::parensleft\E ([^\257]*?) \Q$Global::parensright\E }
|
||||||
{$1\257<$2\257>}gx) {}
|
{$1\257<$2\257>}gx) {}
|
||||||
for my $rpl (keys %Global::rpl) {
|
for my $rpl (sort { length $b <=> length $a } keys %Global::rpl) {
|
||||||
|
# Replace long --rpl's before short ones, as a short may be a
|
||||||
|
# substring of a long:
|
||||||
|
# --rpl '% s/a/b/' --rpl '%% s/b/a/'
|
||||||
# Replace the short hand string (--rpl)
|
# Replace the short hand string (--rpl)
|
||||||
# with the {= perl expr =}
|
# with the {= perl expr =}
|
||||||
# Avoid replacing inside existing {= perl expr =}
|
# Avoid replacing inside existing {= perl expr =}
|
||||||
|
@ -7930,15 +7942,14 @@ sub get {
|
||||||
my $cmd_line = shift @{$self->{'unget'}};
|
my $cmd_line = shift @{$self->{'unget'}};
|
||||||
return ($cmd_line);
|
return ($cmd_line);
|
||||||
} else {
|
} else {
|
||||||
my $cmd_line;
|
my $cmd_line = CommandLine->new($self->seq(),
|
||||||
$cmd_line = CommandLine->new($self->seq(),
|
$self->{'command'},
|
||||||
$self->{'command'},
|
$self->{'arg_queue'},
|
||||||
$self->{'arg_queue'},
|
$self->{'context_replace'},
|
||||||
$self->{'context_replace'},
|
$self->{'max_number_of_args'},
|
||||||
$self->{'max_number_of_args'},
|
$self->{'return_files'},
|
||||||
$self->{'return_files'},
|
$self->{'replacecount'},
|
||||||
$self->{'replacecount'},
|
$self->{'len'},
|
||||||
$self->{'len'},
|
|
||||||
);
|
);
|
||||||
$cmd_line->populate();
|
$cmd_line->populate();
|
||||||
::debug("init","cmd_line->number_of_args ",
|
::debug("init","cmd_line->number_of_args ",
|
||||||
|
|
|
@ -270,6 +270,43 @@ B<--block-size> gives very poor performance; by exponentially
|
||||||
increasing the block size performance will not suffer.
|
increasing the block size performance will not suffer.
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Convenience options --nice --basefile --transfer --return
|
||||||
|
--cleanup --tmux --group --compress --cat --fifo --workdir
|
||||||
|
|
||||||
|
These are all convenience options that make it easier to do a
|
||||||
|
task. But more importantly: They are tested to work on corner cases,
|
||||||
|
too. Take B<--nice> as an example:
|
||||||
|
|
||||||
|
nice parallel command ...
|
||||||
|
|
||||||
|
will work just fine. But when run remotely, you need to move the nice
|
||||||
|
command so it is being run on the server:
|
||||||
|
|
||||||
|
parallel --S server nice command ...
|
||||||
|
|
||||||
|
And this will again work just fine, as long as you are running a
|
||||||
|
single command. When you are running a composed command you need nice
|
||||||
|
to apply to the whole command, and it gets harder still:
|
||||||
|
|
||||||
|
parallel --S server --q nice bash -c 'command1 ...; command2 | command3'
|
||||||
|
|
||||||
|
It is not impossible, but by using B<--nice> GNU B<parallel> will do
|
||||||
|
the right thing for you. Similarly when transferring files: It starts
|
||||||
|
to get hard when the file names contain space, :, ‘, *, or other
|
||||||
|
special characters.
|
||||||
|
|
||||||
|
To run the commands in a B<tmux> session you basically just need to
|
||||||
|
quote the command. For simple commands that is easy, but when commands
|
||||||
|
contain special characters, it gets much harder to get right.
|
||||||
|
|
||||||
|
B<--cat> and B<--fifo> are easy to do by hand, until you want to clean
|
||||||
|
up the tmpfile and keep the exit code of the command.
|
||||||
|
|
||||||
|
The real killer comes when you try to combine several of these: Doing
|
||||||
|
that correctly for all corner cases is next to impossible to do by
|
||||||
|
hard.
|
||||||
|
|
||||||
|
|
||||||
=head2 Shell shock
|
=head2 Shell shock
|
||||||
|
|
||||||
The shell shock bug in B<bash> did not affect GNU B<parallel>, but the
|
The shell shock bug in B<bash> did not affect GNU B<parallel>, but the
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#Number-of-simultaneous-jobs">Number of simultaneous jobs</a></li>
|
<li><a href="#Number-of-simultaneous-jobs">Number of simultaneous jobs</a></li>
|
||||||
<li><a href="#Interactivity">Interactivity</a></li>
|
<li><a href="#Interactivity">Interactivity</a></li>
|
||||||
|
<li><a href="#A-terminal-for-every-job">A terminal for every job</a></li>
|
||||||
<li><a href="#Timing">Timing</a></li>
|
<li><a href="#Timing">Timing</a></li>
|
||||||
<li><a href="#Progress">Progress</a></li>
|
<li><a href="#Progress">Progress</a></li>
|
||||||
<li><a href="#Termination">Termination</a></li>
|
<li><a href="#Termination">Termination</a></li>
|
||||||
|
@ -1072,6 +1073,18 @@
|
||||||
|
|
||||||
<pre><code> parallel -X --tty vi ::: 1 2 3</code></pre>
|
<pre><code> parallel -X --tty vi ::: 1 2 3</code></pre>
|
||||||
|
|
||||||
|
<h2 id="A-terminal-for-every-job">A terminal for every job</h2>
|
||||||
|
|
||||||
|
<p>Using tmux GNU Parallel can start a terminal for every job run:</p>
|
||||||
|
|
||||||
|
<pre><code> seq 10 40 | parallel --tmux 'echo start {}; sleep {}; echo done {}'</code></pre>
|
||||||
|
|
||||||
|
<p>This will tell you to run something similar to:</p>
|
||||||
|
|
||||||
|
<pre><code> tmux -S /tmp/paroRLCx.tms attach</code></pre>
|
||||||
|
|
||||||
|
<p>Using normal tmux keystrokes (CTRL-b n or CTRL-b p) you can cycle between windows of the running jobs. When a job is finished it will pause for 10 seconds before closing the window.</p>
|
||||||
|
|
||||||
<h2 id="Timing">Timing</h2>
|
<h2 id="Timing">Timing</h2>
|
||||||
|
|
||||||
<p>Some jobs do heavy I/O when they start. To avoid a thundering herd GNU Parallel can delay starting new jobs. --delay X will make sure there is at least X seconds between each start:</p>
|
<p>Some jobs do heavy I/O when they start. To avoid a thundering herd GNU Parallel can delay starting new jobs. --delay X will make sure there is at least X seconds between each start:</p>
|
||||||
|
@ -1133,6 +1146,14 @@
|
||||||
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
||||||
local:0/9/100%/1.1s</code></pre>
|
local:0/9/100%/1.1s</code></pre>
|
||||||
|
|
||||||
|
<p>A progress bar can be shown with --bar:</p>
|
||||||
|
|
||||||
|
<pre><code> parallel --bar sleep ::: 1 3 2 2 1 3 3 2 1</code></pre>
|
||||||
|
|
||||||
|
<p>And a graphic bar can be shown with --bar and zenity:</p>
|
||||||
|
|
||||||
|
<pre><code> seq 1000 | parallel -j10 --bar '(echo -n {};sleep 0.1)' 2> >(zenity --progress --auto-kill)</code></pre>
|
||||||
|
|
||||||
<p>A logfile of the jobs completed so far can be generated with --joblog:</p>
|
<p>A logfile of the jobs completed so far can be generated with --joblog:</p>
|
||||||
|
|
||||||
<pre><code> parallel --joblog /tmp/log exit ::: 1 2 3 0
|
<pre><code> parallel --joblog /tmp/log exit ::: 1 2 3 0
|
||||||
|
|
|
@ -1007,6 +1007,20 @@ Or give multiple argument in one go to open multiple files:
|
||||||
|
|
||||||
parallel -X --tty vi ::: 1 2 3
|
parallel -X --tty vi ::: 1 2 3
|
||||||
|
|
||||||
|
=head2 A terminal for every job
|
||||||
|
|
||||||
|
Using tmux GNU Parallel can start a terminal for every job run:
|
||||||
|
|
||||||
|
seq 10 40 | parallel --tmux 'echo start {}; sleep {}; echo done {}'
|
||||||
|
|
||||||
|
This will tell you to run something similar to:
|
||||||
|
|
||||||
|
tmux -S /tmp/paroRLCx.tms attach
|
||||||
|
|
||||||
|
Using normal tmux keystrokes (CTRL-b n or CTRL-b p) you can cycle
|
||||||
|
between windows of the running jobs. When a job is finished it will
|
||||||
|
pause for 10 seconds before closing the window.
|
||||||
|
|
||||||
=head2 Timing
|
=head2 Timing
|
||||||
|
|
||||||
Some jobs do heavy I/O when they start. To avoid a thundering herd GNU
|
Some jobs do heavy I/O when they start. To avoid a thundering herd GNU
|
||||||
|
@ -1074,6 +1088,14 @@ Output:
|
||||||
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
|
||||||
local:0/9/100%/1.1s
|
local:0/9/100%/1.1s
|
||||||
|
|
||||||
|
A progress bar can be shown with --bar:
|
||||||
|
|
||||||
|
parallel --bar sleep ::: 1 3 2 2 1 3 3 2 1
|
||||||
|
|
||||||
|
And a graphic bar can be shown with --bar and zenity:
|
||||||
|
|
||||||
|
seq 1000 | parallel -j10 --bar '(echo -n {};sleep 0.1)' 2> >(zenity --progress --auto-kill)
|
||||||
|
|
||||||
A logfile of the jobs completed so far can be generated with --joblog:
|
A logfile of the jobs completed so far can be generated with --joblog:
|
||||||
|
|
||||||
parallel --joblog /tmp/log exit ::: 1 2 3 0
|
parallel --joblog /tmp/log exit ::: 1 2 3 0
|
||||||
|
|
|
@ -60,5 +60,12 @@ echo '### bug #43817: Some JP char cause problems in positional replacement stri
|
||||||
parallel -Xj1 echo ::: '<27><<3C>>' '<27><1 $_=2<>>' 'ワ'
|
parallel -Xj1 echo ::: '<27><<3C>>' '<27><1 $_=2<>>' 'ワ'
|
||||||
parallel -Xj1 echo {1} ::: '<27><<3C>>' '<27><1 $_=2<>>' 'ワ'
|
parallel -Xj1 echo {1} ::: '<27><<3C>>' '<27><1 $_=2<>>' 'ワ'
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
|
parallel --plus --rpl '%'
|
||||||
|
--rpl '%D $_=::shell_quote(::dirname($_));' --rpl '%B s:.*/::;s:\.[^/.]+$::;' --rpl '%E s:.*\.::'
|
||||||
|
'echo {}=%;echo %D={//};echo %B={/.};echo %E={+.};echo %D/%B.%E={}' ::: a.b/c.d/e.f
|
||||||
|
|
||||||
|
echo '**'
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
25
testsuite/tests-to-run/parallel-local-mem.sh
Normal file → Executable file
25
testsuite/tests-to-run/parallel-local-mem.sh
Normal file → Executable file
|
@ -1,32 +1,35 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
make stopvm
|
||||||
|
|
||||||
# Jobs that eat more than 2 GB RAM
|
# Jobs that eat more than 2 GB RAM
|
||||||
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj1 -k --joblog /tmp/jl-`basename $0` -L1
|
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj1 -k --joblog /tmp/jl-`basename $0` -L1
|
||||||
echo '### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")'
|
echo '### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")'
|
||||||
echo '### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf'
|
echo '### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf'
|
||||||
'
|
echo 'Eats 4 GB'
|
||||||
|
perl -e '$buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf."\n"'
|
||||||
|
|
||||||
echo 'Eats 2.5 GB'
|
echo 'Eats 2.5 GB'
|
||||||
(yes "`echo {1..100}`" | head -c 2300M; echo ged) |
|
(yes "`seq 3000`" | head -c 2300M; echo ged) |
|
||||||
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged md5sum
|
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged md5sum
|
||||||
echo 'Eats 2.5 GB'
|
echo 'Eats 2.5 GB'
|
||||||
(yes "`echo {1..100}`" | head -c 2300M; echo ged) |
|
(yes "`seq 3000`" | head -c 2300M; echo ged) |
|
||||||
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged cat | wc -c
|
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged cat | wc -c
|
||||||
|
|
||||||
echo '**'
|
echo '**'
|
||||||
|
|
||||||
echo '### bug #44358: 2 GB records cause problems for -N'
|
echo '### bug #44358: 2 GB records cause problems for -N'
|
||||||
echo '5 GB version: Eats 12.5 GB'
|
echo '5 GB version: Eats 12.5 GB'
|
||||||
|
(yes "`seq 3000`" | head -c 5000000000; echo FOO;
|
||||||
(yes "`echo {1..100}`" | head -c 5000000000; echo FOO;
|
yes "`seq 3000`" | head -c 3000000000; echo FOO;
|
||||||
yes "`echo {1..100}`" | head -c 3000000000; echo FOO;
|
yes "`seq 3000`" | head -c 1000000000;) |
|
||||||
yes "`echo {1..100}`" | head -c 1000000000;) |
|
|
||||||
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl
|
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl
|
||||||
`which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
`which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
||||||
|
|
||||||
echo '2 GB version: eats 10 GB'
|
echo '2 GB version: eats 10 GB'
|
||||||
(yes "`echo {1..100}`" | head -c 2300M; echo FOO;
|
(yes "`seq 3000`" | head -c 2300M; echo FOO;
|
||||||
yes "`echo {1..100}`" | head -c 2300M; echo FOO;
|
yes "`seq 3000`" | head -c 2300M; echo FOO;
|
||||||
yes "`echo {1..100}`" | head -c 1000M;) |
|
yes "`seq 3000`" | head -c 1000M;) |
|
||||||
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl
|
PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl
|
||||||
`which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
`which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
||||||
|
|
||||||
|
@ -37,3 +40,5 @@ echo '### -L >4GB'
|
||||||
parallel --pipe -L2 --block 1g -k LANG=c wc -c
|
parallel --pipe -L2 --block 1g -k LANG=c wc -c
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
make startvm
|
|
@ -29,12 +29,12 @@ echo '### Test tmux works on different shells'
|
||||||
parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?
|
parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?
|
||||||
|
|
||||||
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
|
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
|
||||||
ssh zsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status';
|
stdout ssh zsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output';
|
||||||
ssh zsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status';
|
stdout ssh zsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output';
|
||||||
ssh parallel@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $?';
|
stdout ssh parallel@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $?' | grep -v 'See output';
|
||||||
ssh parallel@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $?';
|
stdout ssh parallel@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $?' | grep -v 'See output';
|
||||||
ssh tcsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status';
|
stdout ssh tcsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output';
|
||||||
ssh tcsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status'
|
stdout ssh tcsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output'
|
||||||
|
|
||||||
echo '### This fails - word too long'
|
echo '### This fails - word too long'
|
||||||
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
|
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
|
||||||
|
@ -42,15 +42,15 @@ echo '### This fails - word too long'
|
||||||
stdout ssh csh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output'
|
stdout ssh csh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output'
|
||||||
|
|
||||||
echo '### works'
|
echo '### works'
|
||||||
parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | grep -v 'See output'
|
||||||
|
|
||||||
echo '### These blocked due to length'
|
echo '### These blocked due to length'
|
||||||
parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111
|
stdout parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111 | grep -v 'See output'
|
||||||
|
|
||||||
echo '### bug #43746: --transfer and --return of multiple inputs {1} and {2}'
|
echo '### bug #43746: --transfer and --return of multiple inputs {1} and {2}'
|
||||||
echo '### and:'
|
echo '### and:'
|
||||||
|
|
|
@ -144,7 +144,7 @@ echo '### Negative replacement strings'
|
||||||
parallel --colsep ' ' echo '{-3}orrect' ::: "1 c 3 4"
|
parallel --colsep ' ' echo '{-3}orrect' ::: "1 c 3 4"
|
||||||
|
|
||||||
echo 'bug #38439: "open files" with --files --pipe blocks after a while'
|
echo 'bug #38439: "open files" with --files --pipe blocks after a while'
|
||||||
ulimit -n 20; yes |head -n 10M | parallel --pipe -k echo {#} of 20
|
ulimit -n 20; yes "`seq 3000`" |head -c 20M | parallel --pipe -k echo {#} of 20
|
||||||
|
|
||||||
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
|
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
|
||||||
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files wc >/dev/null;
|
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files wc >/dev/null;
|
||||||
|
|
|
@ -80,3 +80,13 @@ echo '### bug #43817: Some JP char cause problems in positional replacement stri
|
||||||
<EFBFBD><<3C>> <20><1 $_=2<>> ワ
|
<EFBFBD><<3C>> <20><1 $_=2<>> ワ
|
||||||
parallel -Xj1 echo {1} ::: '<27><<3C>>' '<27><1 $_=2<>>' 'ワ'
|
parallel -Xj1 echo {1} ::: '<27><<3C>>' '<27><1 $_=2<>>' 'ワ'
|
||||||
<EFBFBD><<3C>>
|
<EFBFBD><<3C>>
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
parallel --plus --rpl '%' --rpl '%D $_=::shell_quote(::dirname($_));' --rpl '%B s:.*/::;s:\.[^/.]+$::;' --rpl '%E s:.*\.::' 'echo {}=%;echo %D={//};echo %B={/.};echo %E={+.};echo %D/%B.%E={}' ::: a.b/c.d/e.f
|
||||||
|
a.b/c.d/e.f=a.b/c.d/e.f
|
||||||
|
a.b/c.d=a.b/c.d
|
||||||
|
e=e
|
||||||
|
f=f
|
||||||
|
a.b/c.d/e.f=a.b/c.d/e.f
|
||||||
|
echo '**'
|
||||||
|
**
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
|
make[2]: Entering directory `/home/tange/privat/parallel/testsuite'
|
||||||
|
VBoxManage controlvm CentOS3-root:centos3 savestate
|
||||||
|
VBoxManage controlvm RedHat9-root:redhat9 savestate
|
||||||
|
VBoxManage controlvm OracleXE savestate
|
||||||
|
make[2]: Leaving directory `/home/tange/privat/parallel/testsuite'
|
||||||
echo '### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")'
|
echo '### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")'
|
||||||
### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")
|
### Trouble reading a record > 2 GB for certain versions of Perl (substr($a,0,2G+1)="fails")
|
||||||
echo '### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf'
|
echo '### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf'
|
||||||
### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf
|
### perl -e $buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf
|
||||||
'
|
echo 'Eats 4 GB'
|
||||||
/bin/bash: -c: line 0: unexpected EOF while looking for matching `''
|
Eats 4 GB
|
||||||
/bin/bash: -c: line 1: syntax error: unexpected end of file
|
perl -e '$buf=("x"x(2**31))."x"; substr($buf,0,2**31+1)=""; print length $buf."\n"'
|
||||||
echo 'Eats 2.5 GB'
|
1echo 'Eats 2.5 GB'
|
||||||
Eats 2.5 GB
|
Eats 2.5 GB
|
||||||
(yes "`echo {1..100}`" | head -c 2300M; echo ged) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged md5sum
|
(yes "`seq 3000`" | head -c 2300M; echo ged) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged md5sum
|
||||||
131cbd7a7f1d19de3dabb379c716396b -
|
7be046296f6b0cde6049a11c116908ea -
|
||||||
68b329da9893e34099c7d8ad5cb9c940 -
|
68b329da9893e34099c7d8ad5cb9c940 -
|
||||||
parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1
|
parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1
|
||||||
echo 'Eats 2.5 GB'
|
echo 'Eats 2.5 GB'
|
||||||
Eats 2.5 GB
|
Eats 2.5 GB
|
||||||
(yes "`echo {1..100}`" | head -c 2300M; echo ged) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged cat | wc -c
|
(yes "`seq 3000`" | head -c 2300M; echo ged) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` -k --block 2G --pipe --recend ged cat | wc -c
|
||||||
2411724804
|
2411724804
|
||||||
parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1
|
parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1
|
||||||
echo '**'
|
echo '**'
|
||||||
|
@ -22,7 +27,7 @@ echo '### bug #44358: 2 GB records cause problems for -N'
|
||||||
### bug #44358: 2 GB records cause problems for -N
|
### bug #44358: 2 GB records cause problems for -N
|
||||||
echo '5 GB version: Eats 12.5 GB'
|
echo '5 GB version: Eats 12.5 GB'
|
||||||
5 GB version: Eats 12.5 GB
|
5 GB version: Eats 12.5 GB
|
||||||
(yes "`echo {1..100}`" | head -c 5000000000; echo FOO; yes "`echo {1..100}`" | head -c 3000000000; echo FOO; yes "`echo {1..100}`" | head -c 1000000000;) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
(yes "`seq 3000`" | head -c 5000000000; echo FOO; yes "`seq 3000`" | head -c 3000000000; echo FOO; yes "`seq 3000`" | head -c 1000000000;) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
||||||
8000000007
|
8000000007
|
||||||
1000000001
|
1000000001
|
||||||
parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001
|
parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001
|
||||||
|
@ -30,7 +35,7 @@ parallel: Warning: A record was longer than 1300000001. Increasing to --blocksiz
|
||||||
parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647
|
parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647
|
||||||
echo '2 GB version: eats 10 GB'
|
echo '2 GB version: eats 10 GB'
|
||||||
2 GB version: eats 10 GB
|
2 GB version: eats 10 GB
|
||||||
(yes "`echo {1..100}`" | head -c 2300M; echo FOO; yes "`echo {1..100}`" | head -c 2300M; echo FOO; yes "`echo {1..100}`" | head -c 1000M;) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
(yes "`seq 3000`" | head -c 2300M; echo FOO; yes "`seq 3000`" | head -c 2300M; echo FOO; yes "`seq 3000`" | head -c 1000M;) | PERL5LIB=input-files/perl-v5.14.2/lib input-files/perl-v5.14.2/perl `which parallel` --pipe --recend FOO -N2 --block 1g -k LANG=c wc -c
|
||||||
4823449607
|
4823449607
|
||||||
1048576001
|
1048576001
|
||||||
parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001
|
parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001
|
||||||
|
@ -44,3 +49,14 @@ echo '### -L >4GB'
|
||||||
parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001
|
parallel: Warning: A record was longer than 1000000000. Increasing to --blocksize 1300000001
|
||||||
parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003
|
parallel: Warning: A record was longer than 1300000001. Increasing to --blocksize 1690000003
|
||||||
parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647
|
parallel: Warning: A record was longer than 1690000003. Increasing to --blocksize 2147483647
|
||||||
|
make[2]: Entering directory `/home/tange/privat/parallel/testsuite'
|
||||||
|
# Make sure we can reach the virtual machines
|
||||||
|
sudo ifconfig wlan0:0 192.168.1.72
|
||||||
|
# If they are already running: Don't fail
|
||||||
|
VBoxManage startvm CentOS3-root:centos3 || VBoxManage controlvm CentOS3-root:centos3 resume || true
|
||||||
|
Waiting for VM "CentOS3-root:centos3" to power on...
|
||||||
|
VM "CentOS3-root:centos3" has been successfully started.
|
||||||
|
VBoxManage startvm RedHat9-root:redhat9 || VBoxManage controlvm RedHat9-root:redhat9 resume || true
|
||||||
|
Waiting for VM "RedHat9-root:redhat9" to power on...
|
||||||
|
VM "RedHat9-root:redhat9" has been successfully started.
|
||||||
|
make[2]: Leaving directory `/home/tange/privat/parallel/testsuite'
|
||||||
|
|
|
@ -24,7 +24,7 @@ echo '### Test tmux works on different shells'
|
||||||
0
|
0
|
||||||
parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?
|
parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?
|
||||||
4
|
4
|
||||||
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux '; ssh zsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status'; ssh zsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status'; ssh parallel@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $?'; ssh parallel@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $?'; ssh tcsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status'; ssh tcsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status'
|
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux '; stdout ssh zsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output'; stdout ssh zsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output'; stdout ssh parallel@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $?' | grep -v 'See output'; stdout ssh parallel@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $?' | grep -v 'See output'; stdout ssh tcsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output'; stdout ssh tcsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output'
|
||||||
0
|
0
|
||||||
4
|
4
|
||||||
0
|
0
|
||||||
|
@ -46,16 +46,16 @@ Word too long.
|
||||||
4
|
4
|
||||||
echo '### works'
|
echo '### works'
|
||||||
### works
|
### works
|
||||||
parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | grep -v 'See output'
|
||||||
parallel: Error: Command line too long (402 >= 238) at input 0: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
|
parallel: Error: Command line too long (402 >= 238) at input 0: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
|
||||||
echo '### These blocked due to length'
|
echo '### These blocked due to length'
|
||||||
### These blocked due to length
|
### These blocked due to length
|
||||||
parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
|
stdout parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
||||||
parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111
|
stdout parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111 | grep -v 'See output'
|
||||||
echo '### bug #43746: --transfer and --return of multiple inputs {1} and {2}'
|
echo '### bug #43746: --transfer and --return of multiple inputs {1} and {2}'
|
||||||
### bug #43746: --transfer and --return of multiple inputs {1} and {2}
|
### bug #43746: --transfer and --return of multiple inputs {1} and {2}
|
||||||
echo '### and:'
|
echo '### and:'
|
||||||
|
|
|
@ -322,7 +322,7 @@ correct
|
||||||
correct
|
correct
|
||||||
echo 'bug #38439: "open files" with --files --pipe blocks after a while'
|
echo 'bug #38439: "open files" with --files --pipe blocks after a while'
|
||||||
bug #38439: "open files" with --files --pipe blocks after a while
|
bug #38439: "open files" with --files --pipe blocks after a while
|
||||||
ulimit -n 20; yes |head -n 10M | parallel --pipe -k echo {#} of 20
|
ulimit -n 20; yes "`seq 3000`" |head -c 20M | parallel --pipe -k echo {#} of 20
|
||||||
1 of 20
|
1 of 20
|
||||||
2 of 20
|
2 of 20
|
||||||
3 of 20
|
3 of 20
|
||||||
|
|
|
@ -354,4 +354,4 @@ Send Receive Exitval
|
||||||
echo '### --tmux test - check termination'
|
echo '### --tmux test - check termination'
|
||||||
### --tmux test - check termination
|
### --tmux test - check termination
|
||||||
perl -e 'map {printf "$_%o%c\n",$_,$_}1..255' | stdout parallel --tmux echo {} :::: - ::: a b | perl -pe 's:tmp.par.*tms:tmp/parXXXXX.tms:; s/\d+/0/g'
|
perl -e 'map {printf "$_%o%c\n",$_,$_}1..255' | stdout parallel --tmux echo {} :::: - ::: a b | perl -pe 's:tmp.par.*tms:tmp/parXXXXX.tms:; s/\d+/0/g'
|
||||||
See output with: tmux -S /tmp/parXXXXX.tms attach -t p0
|
See output with: tmux -S /tmp/parXXXXX.tms attach
|
||||||
|
|
|
@ -1,67 +1,67 @@
|
||||||
echo '### tmux1.9'
|
echo '### tmux1.9'
|
||||||
### tmux1.9
|
### tmux1.9
|
||||||
seq 000 100 | TMUX=tmux1.9 par_tmux
|
seq 000 100 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 100 200 | TMUX=tmux1.9 par_tmux
|
seq 100 200 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 200 300 | TMUX=tmux1.9 par_tmux
|
seq 200 300 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 300 400 | TMUX=tmux1.9 par_tmux
|
seq 300 400 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 400 500 | TMUX=tmux1.9 par_tmux
|
seq 400 500 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 500 600 | TMUX=tmux1.9 par_tmux
|
seq 500 600 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 600 700 | TMUX=tmux1.9 par_tmux
|
seq 600 700 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 700 800 | TMUX=tmux1.9 par_tmux
|
seq 700 800 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 800 900 | TMUX=tmux1.9 par_tmux
|
seq 800 900 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 900 1000 | TMUX=tmux1.9 par_tmux
|
seq 900 1000 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1000 1100 | TMUX=tmux1.9 par_tmux
|
seq 1000 1100 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1100 1200 | TMUX=tmux1.9 par_tmux
|
seq 1100 1200 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1200 1300 | TMUX=tmux1.9 par_tmux
|
seq 1200 1300 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1300 1400 | TMUX=tmux1.9 par_tmux
|
seq 1300 1400 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1400 1500 | TMUX=tmux1.9 par_tmux
|
seq 1400 1500 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1500 1600 | TMUX=tmux1.9 par_tmux
|
seq 1500 1600 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1600 1700 | TMUX=tmux1.9 par_tmux
|
seq 1600 1700 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1700 1800 | TMUX=tmux1.9 par_tmux
|
seq 1700 1800 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1800 1900 | TMUX=tmux1.9 par_tmux
|
seq 1800 1900 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 1900 2000 | TMUX=tmux1.9 par_tmux
|
seq 1900 2000 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 2000 2021 | TMUX=tmux1.9 par_tmux
|
seq 2000 2021 | TMUX=tmux1.9 par_tmux
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
echo '### tmux1.9 fails'
|
echo '### tmux1.9 fails'
|
||||||
### tmux1.9 fails
|
### tmux1.9 fails
|
||||||
|
@ -71,24 +71,24 @@ parallel: Error: Command line too long (4053 >= 4052) at input 0: 2022
|
||||||
echo '### tmux1.8'
|
echo '### tmux1.8'
|
||||||
### tmux1.8
|
### tmux1.8
|
||||||
seq 1 50 | TMUX=tmux1.8 par_tmux
|
seq 1 50 | TMUX=tmux1.8 par_tmux
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 51 100 | TMUX=tmux1.8 par_tmux
|
seq 51 100 | TMUX=tmux1.8 par_tmux
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 101 150 | TMUX=tmux1.8 par_tmux
|
seq 101 150 | TMUX=tmux1.8 par_tmux
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 151 200 | TMUX=tmux1.8 par_tmux
|
seq 151 200 | TMUX=tmux1.8 par_tmux
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
seq 201 233 | TMUX=tmux1.8 par_tmux
|
seq 201 233 | TMUX=tmux1.8 par_tmux
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
echo '### tmux1.8 fails'
|
echo '### tmux1.8 fails'
|
||||||
### tmux1.8 fails
|
### tmux1.8 fails
|
||||||
echo 234 | TMUX=tmux1.8 par_tmux
|
echo 234 | TMUX=tmux1.8 par_tmux
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
command too long
|
command too long
|
||||||
1
|
1
|
||||||
echo 235 | TMUX=tmux1.8 par_tmux
|
echo 235 | TMUX=tmux1.8 par_tmux
|
||||||
|
@ -100,25 +100,25 @@ parallel: Error: Command line too long (480 >= 477) at input 0: 236
|
||||||
echo '### tmux1.8 0..255 ascii'
|
echo '### tmux1.8 0..255 ascii'
|
||||||
### tmux1.8 0..255 ascii
|
### tmux1.8 0..255 ascii
|
||||||
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.8 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $?
|
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.8 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $?
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
echo '### tmux1.9 0..255 ascii'
|
echo '### tmux1.9 0..255 ascii'
|
||||||
### tmux1.9 0..255 ascii
|
### tmux1.9 0..255 ascii
|
||||||
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.9 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $?
|
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.9 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $?
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
0
|
0
|
||||||
echo '### Test output ascii'
|
echo '### Test output ascii'
|
||||||
### Test output ascii
|
### Test output ascii
|
||||||
rm -f /tmp/paralocal7*; perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_!=10 } 1..$_),"\n" } 1..255' | stdout parallel --tmux echo {}'>>/tmp/paralocal7{%}' | par_tmux_filter; sort /tmp/paralocal7* | md5sum
|
rm -f /tmp/paralocal7*; perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_!=10 } 1..$_),"\n" } 1..255' | stdout parallel --tmux echo {}'>>/tmp/paralocal7{%}' | par_tmux_filter; sort /tmp/paralocal7* | md5sum
|
||||||
See output with: tmux -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux -S /tmp/parXXXXX.tms attach
|
||||||
a7ee232967c8aab2edf227169e8cdce0 -
|
a7ee232967c8aab2edf227169e8cdce0 -
|
||||||
echo '### Test critical lengths. Must not block'
|
echo '### Test critical lengths. Must not block'
|
||||||
### Test critical lengths. Must not block
|
### Test critical lengths. Must not block
|
||||||
seq 70 130 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
seq 70 130 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
seq 70 130 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
seq 70 130 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
seq 280 425 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
seq 280 425 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
||||||
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.8 -S /tmp/parXXXXX.tms attach
|
||||||
seq 280 425 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
seq 280 425 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
||||||
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach -tpID
|
See output with: tmux1.9 -S /tmp/parXXXXX.tms attach
|
||||||
|
|
|
@ -844,7 +844,7 @@ a b
|
||||||
echo '### Test --nice remote'
|
echo '### Test --nice remote'
|
||||||
### Test --nice remote
|
### Test --nice remote
|
||||||
stdout parallel --nice 1 -S .. -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;'
|
stdout parallel --nice 1 -S .. -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;'
|
||||||
ssh one-server exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"1\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"\\\\\\\\nice\\\ -n1\\\ /bin/bash\\\ -c\\\ PAR=a\\\\\\\\\\\ bash\\\\\\\\\\\ -c\\\\\\\\\\\ \\\\\\\\\\\\\\\"echo\\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$PAR\\\\\\\\\\\ b\\\\\\\\\\\\\\\"\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\);
|
ssh one-server exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"1\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"\\\\\\\\nice\\\ -n1\\\ \\\\\\\$SHELL\\\ -c\\\ PAR=a\\\\\\\\\\\ bash\\\\\\\\\\\ -c\\\\\\\\\\\ \\\\\\\\\\\\\\\"echo\\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$PAR\\\\\\\\\\\ b\\\\\\\\\\\\\\\"\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\);
|
||||||
a b
|
a b
|
||||||
echo '### Test distribute arguments at EOF to 2 jobslots'
|
echo '### Test distribute arguments at EOF to 2 jobslots'
|
||||||
### Test distribute arguments at EOF to 2 jobslots
|
### Test distribute arguments at EOF to 2 jobslots
|
||||||
|
|
|
@ -83,11 +83,11 @@ one-server exec perl -e '@GNU_Parallel=("use","IPC::Open3;","use","MIME::Base64"
|
||||||
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.'
|
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.'
|
||||||
'newlineX.out2
|
'newlineX.out2
|
||||||
one-server (rm -f ./tmp/parallel.file.'
|
one-server (rm -f ./tmp/parallel.file.'
|
||||||
'newlineX; rmdir ./tmp/ ./ 2>/dev/null;)
|
'newlineX; rmdir ./tmp/ ./ >&/dev/null;)
|
||||||
one-server (rm -f ./tmp/parallel.file.'
|
one-server (rm -f ./tmp/parallel.file.'
|
||||||
'newlineX.out; rmdir ./tmp/ ./ 2>/dev/null;)
|
'newlineX.out; rmdir ./tmp/ ./ >&/dev/null;)
|
||||||
one-server (rm -f ./tmp/parallel.file.'
|
one-server (rm -f ./tmp/parallel.file.'
|
||||||
'newlineX.out2; rmdir ./tmp/ ./ 2>/dev/null;)
|
'newlineX.out2; rmdir ./tmp/ ./ >&/dev/null;)
|
||||||
one-server mkdir -p ./.
|
one-server mkdir -p ./.
|
||||||
-l parallel one-server rsync --server -lDrRze.iLsfx . ./.
|
-l parallel one-server rsync --server -lDrRze.iLsfx . ./.
|
||||||
one-server exec perl -e '@GNU_Parallel=("use","IPC::Open3;","use","MIME::Base64");eval"@GNU_Parallel";$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";my($in,$out,$eval);open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;eval$eval;' base64
|
one-server exec perl -e '@GNU_Parallel=("use","IPC::Open3;","use","MIME::Base64");eval"@GNU_Parallel";$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";my($in,$out,$eval);open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;eval$eval;' base64
|
||||||
|
@ -96,8 +96,8 @@ one-server exec perl -e '@GNU_Parallel=("use","IPC::Open3;","use","MIME::Base64"
|
||||||
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.'
|
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.'
|
||||||
'newlineX.out2
|
'newlineX.out2
|
||||||
one-server (rm -f ./tmp/parallel.file.'
|
one-server (rm -f ./tmp/parallel.file.'
|
||||||
'newlineX; rmdir ./tmp/ ./ 2>/dev/null;)
|
'newlineX; rmdir ./tmp/ ./ >&/dev/null;)
|
||||||
one-server (rm -f ./tmp/parallel.file.'
|
one-server (rm -f ./tmp/parallel.file.'
|
||||||
'newlineX.out; rmdir ./tmp/ ./ 2>/dev/null;)
|
'newlineX.out; rmdir ./tmp/ ./ >&/dev/null;)
|
||||||
one-server (rm -f ./tmp/parallel.file.'
|
one-server (rm -f ./tmp/parallel.file.'
|
||||||
'newlineX.out2; rmdir ./tmp/ ./ 2>/dev/null;)
|
'newlineX.out2; rmdir ./tmp/ ./ >&/dev/null;)
|
||||||
|
|
Loading…
Reference in a new issue