mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 05:57:54 +00:00
Allow $TMPDIR to contain spaces and newlines.
This commit is contained in:
parent
4307949091
commit
e6fe5fafcd
|
@ -278,6 +278,8 @@ New in this release:
|
||||||
|
|
||||||
News about GNU Parallel:
|
News about GNU Parallel:
|
||||||
|
|
||||||
|
https://www.redhat.com/sysadmin/perl-scripts
|
||||||
|
|
||||||
<<>>
|
<<>>
|
||||||
|
|
||||||
GNU Parallel - For people who live life in the parallel lane.
|
GNU Parallel - For people who live life in the parallel lane.
|
||||||
|
|
79
src/parallel
79
src/parallel
|
@ -252,8 +252,8 @@ sub pipe_tee_setup() {
|
||||||
# (rm fifo2; grep 2) < fifo2
|
# (rm fifo2; grep 2) < fifo2
|
||||||
# (rm fifo3; grep 3) < fifo3
|
# (rm fifo3; grep 3) < fifo3
|
||||||
# Remove the tmpfifo as soon as it is open
|
# Remove the tmpfifo as soon as it is open
|
||||||
@Global::cat_prepends = map { "(rm $_;" } @fifos;
|
@Global::cat_prepends = map { "(rm $_;" } shell_quote(@fifos);
|
||||||
@Global::cat_appends = map { ") < $_" } @fifos;
|
@Global::cat_appends = map { ") < $_" } shell_quote(@fifos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -578,7 +578,7 @@ sub pipe_shard_setup() {
|
||||||
# The PERL_HASH_SEED must be the same for all sharders
|
# The PERL_HASH_SEED must be the same for all sharders
|
||||||
# so B::hash will return the same value for any given input
|
# so B::hash will return the same value for any given input
|
||||||
$ENV{'PERL_HASH_SEED'} = $$;
|
$ENV{'PERL_HASH_SEED'} = $$;
|
||||||
exec qw(parallel --block 100k -q --pipe -j), $njobs,
|
exec qw(parallel -0 --block 100k -q --pipe -j), $njobs,
|
||||||
qw(--roundrobin -u perl -e), $script, ($opt::colsep || ","),
|
qw(--roundrobin -u perl -e), $script, ($opt::colsep || ","),
|
||||||
$col, $perlexpr, '{}', (map { (':::+', @{$_}) } @parcatfifos);
|
$col, $perlexpr, '{}', (map { (':::+', @{$_}) } @parcatfifos);
|
||||||
}
|
}
|
||||||
|
@ -591,7 +591,9 @@ sub pipe_shard_setup() {
|
||||||
::error("'parcat' must be in path.");
|
::error("'parcat' must be in path.");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
@Global::cat_prepends = map { "perl -e $parcat @$_ | " } @parcatfifos;
|
@Global::cat_prepends =
|
||||||
|
map { "perl -e $parcat ".
|
||||||
|
join(" ",shell_quote(@$_))." | "} @parcatfifos;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub pipe_part_files(@) {
|
sub pipe_part_files(@) {
|
||||||
|
@ -3301,7 +3303,7 @@ sub read_options() {
|
||||||
} else {
|
} else {
|
||||||
@options = shift @ARGV;
|
@options = shift @ARGV;
|
||||||
}
|
}
|
||||||
my $script = Q(Q(shift @ARGV));
|
my $script = Q(Q(shift @ARGV)); # TODO - test if script = " "
|
||||||
my @args = map{ Q($_) } @ARGV;
|
my @args = map{ Q($_) } @ARGV;
|
||||||
# exec myself to split $ARGV[0] into separate fields
|
# exec myself to split $ARGV[0] into separate fields
|
||||||
exec "$0 --_pipe-means-argfiles @options @parser $script ".
|
exec "$0 --_pipe-means-argfiles @options @parser $script ".
|
||||||
|
@ -5250,23 +5252,24 @@ sub onall($@) {
|
||||||
my $joblog = tmp_joblog($opt::joblog);
|
my $joblog = tmp_joblog($opt::joblog);
|
||||||
if($joblog) {
|
if($joblog) {
|
||||||
push @joblogs, $joblog;
|
push @joblogs, $joblog;
|
||||||
$joblog = "--joblog $joblog";
|
$joblog = "--joblog ".::Q($joblog);
|
||||||
}
|
}
|
||||||
my $quad = $opt::arg_file_sep || "::::";
|
my $quad = $opt::arg_file_sep || "::::";
|
||||||
# If PARALLEL_ENV is set: Pass it on
|
# If PARALLEL_ENV is set: Pass it on
|
||||||
my $penv=$Global::parallel_env ?
|
my $penv=$Global::parallel_env ?
|
||||||
"PARALLEL_ENV=".Q($Global::parallel_env) :
|
"PARALLEL_ENV=".Q($Global::parallel_env) :
|
||||||
'';
|
'';
|
||||||
|
my $qsshlogin = Q($sshlogin->string());
|
||||||
::debug("init", "$penv $0 $suboptions -j1 $joblog ",
|
::debug("init", "$penv $0 $suboptions -j1 $joblog ",
|
||||||
((defined $opt::tag) ?
|
((defined $opt::tag) ?
|
||||||
"--tagstring ".Q($sshlogin->string()) : ""),
|
"--tagstring ".$qsshlogin : ""),
|
||||||
" -S ", Q($sshlogin->string())," ",
|
" -S $qsshlogin ",
|
||||||
join(" ",shell_quote(@command))," $quad @argfiles\n");
|
join(" ",shell_quote(@command,$quad,@argfiles)),"\n");
|
||||||
print $parallel_fh "$penv $0 $suboptions -j1 $joblog ",
|
print $parallel_fh "$penv $0 $suboptions -j1 $joblog ",
|
||||||
((defined $opt::tag) ?
|
((defined $opt::tag) ?
|
||||||
"--tagstring ".Q($sshlogin->string()) : ""),
|
"--tagstring ".$qsshlogin : ""),
|
||||||
" -S ", Q($sshlogin->string())," ",
|
" -S $qsshlogin ",
|
||||||
join(" ",shell_quote(@command))," $quad @argfiles\0";
|
join(" ",shell_quote(@command,$quad,@argfiles)),"\0";
|
||||||
}
|
}
|
||||||
close $parallel_fh;
|
close $parallel_fh;
|
||||||
$Global::exitstatus = $? >> 8;
|
$Global::exitstatus = $? >> 8;
|
||||||
|
@ -6015,10 +6018,11 @@ sub tmpname($) {
|
||||||
my $name = shift;
|
my $name = shift;
|
||||||
my($tmpname);
|
my($tmpname);
|
||||||
if(not -w $ENV{'TMPDIR'}) {
|
if(not -w $ENV{'TMPDIR'}) {
|
||||||
|
my $qtmp = ::Q($ENV{'TMPDIR'});
|
||||||
if(not -e $ENV{'TMPDIR'}) {
|
if(not -e $ENV{'TMPDIR'}) {
|
||||||
::error("Tmpdir '$ENV{'TMPDIR'}' does not exist.","Try 'mkdir $ENV{'TMPDIR'}'");
|
::error("Tmpdir $qtmp does not exist.","Try: mkdir -p $qtmp");
|
||||||
} else {
|
} else {
|
||||||
::error("Tmpdir '$ENV{'TMPDIR'}' is not writable.","Try 'chmod +w $ENV{'TMPDIR'}'");
|
::error("Tmpdir $qtmp is not writable.","Try: chmod +w $qtmp");
|
||||||
}
|
}
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
}
|
}
|
||||||
|
@ -7078,6 +7082,7 @@ sub sshcmd($) {
|
||||||
# [sshpass -e] ssh -p port -l user
|
# [sshpass -e] ssh -p port -l user
|
||||||
if($self->{'password'}) { push @local, "sshpass -e"; }
|
if($self->{'password'}) { push @local, "sshpass -e"; }
|
||||||
# [ssh] -p port -l user
|
# [ssh] -p port -l user
|
||||||
|
# TODO sshpass + space
|
||||||
push @local, $self->{'sshcommand'};
|
push @local, $self->{'sshcommand'};
|
||||||
# [-p port] -l user
|
# [-p port] -l user
|
||||||
if($self->{'port'}) { push @local, '-p',$self->{'port'}; }
|
if($self->{'port'}) { push @local, '-p',$self->{'port'}; }
|
||||||
|
@ -7086,7 +7091,7 @@ sub sshcmd($) {
|
||||||
if($opt::controlmaster) {
|
if($opt::controlmaster) {
|
||||||
# Use control_path to make ssh faster
|
# Use control_path to make ssh faster
|
||||||
my $control_path = $self->control_path_dir()."/ssh-%r@%h:%p";
|
my $control_path = $self->control_path_dir()."/ssh-%r@%h:%p";
|
||||||
push @local, "-S", $control_path;
|
|
||||||
if(not $self->{'control_path'}{$control_path}++) {
|
if(not $self->{'control_path'}{$control_path}++) {
|
||||||
# Master is not running for this control_path
|
# Master is not running for this control_path
|
||||||
# Start it
|
# Start it
|
||||||
|
@ -7094,6 +7099,7 @@ sub sshcmd($) {
|
||||||
if($pid) {
|
if($pid) {
|
||||||
$Global::sshmaster{$pid} ||= 1;
|
$Global::sshmaster{$pid} ||= 1;
|
||||||
} else {
|
} else {
|
||||||
|
push @local, "-S", $control_path;
|
||||||
$SIG{'TERM'} = undef;
|
$SIG{'TERM'} = undef;
|
||||||
# Run a sleep that outputs data, so it will discover
|
# Run a sleep that outputs data, so it will discover
|
||||||
# if the ssh connection closes.
|
# if the ssh connection closes.
|
||||||
|
@ -7107,6 +7113,7 @@ sub sshcmd($) {
|
||||||
"perl", "-e", $sleep);
|
"perl", "-e", $sleep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
push @local, "-S", ::Q($control_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return "@local";
|
return "@local";
|
||||||
|
@ -7454,7 +7461,9 @@ sub swap_activity($) {
|
||||||
my $file = $self->{'swap_activity_file'};
|
my $file = $self->{'swap_activity_file'};
|
||||||
my ($dummy_fh, $tmpfile) = ::tmpfile(SUFFIX => ".swp");
|
my ($dummy_fh, $tmpfile) = ::tmpfile(SUFFIX => ".swp");
|
||||||
::debug("swap", "\n", $swap_activity, "\n");
|
::debug("swap", "\n", $swap_activity, "\n");
|
||||||
::qqx("($swap_activity > $tmpfile && mv $tmpfile $file || rm $tmpfile &)");
|
my $qtmp = ::Q($tmpfile);
|
||||||
|
my $qfile = ::Q($file);
|
||||||
|
::qqx("($swap_activity > $qtmp && mv $qtmp $qfile || rm $qtmp &)");
|
||||||
}
|
}
|
||||||
return $self->{'swap_activity'};
|
return $self->{'swap_activity'};
|
||||||
}
|
}
|
||||||
|
@ -9376,7 +9385,8 @@ sub filter_through_compress($) {
|
||||||
# it is known that output file is opened,
|
# it is known that output file is opened,
|
||||||
# thus output file can then be removed by the decompressor.
|
# thus output file can then be removed by the decompressor.
|
||||||
# empty_input_wrapper is needed for plzip
|
# empty_input_wrapper is needed for plzip
|
||||||
my $wpid = open(my $fdw,"|-", "(echo > $comfile; ".
|
my $qcom = ::Q($comfile);
|
||||||
|
my $wpid = open(my $fdw,"|-", "(echo > $qcom; ".
|
||||||
empty_input_wrapper($opt::compress_program).") >".
|
empty_input_wrapper($opt::compress_program).") >".
|
||||||
::Q($self->fh($fdno,'name'))) || die $?;
|
::Q($self->fh($fdno,'name'))) || die $?;
|
||||||
$self->set_fh($fdno,'w',$fdw);
|
$self->set_fh($fdno,'w',$fdw);
|
||||||
|
@ -9855,9 +9865,9 @@ sub wrapped($) {
|
||||||
# Prepend 'cat > $PARALLEL_TMP;'
|
# Prepend 'cat > $PARALLEL_TMP;'
|
||||||
# Append 'unlink $PARALLEL_TMP without affecting $?'
|
# Append 'unlink $PARALLEL_TMP without affecting $?'
|
||||||
$command =
|
$command =
|
||||||
'cat > $PARALLEL_TMP;'.
|
'cat > "$PARALLEL_TMP";'.
|
||||||
$command.";". postpone_exit_and_cleanup().
|
$command.";". postpone_exit_and_cleanup().
|
||||||
'$PARALLEL_TMP';
|
'"$PARALLEL_TMP"';
|
||||||
} elsif($opt::fifo) {
|
} elsif($opt::fifo) {
|
||||||
# Prepend fifo-wrapper. In essence:
|
# Prepend fifo-wrapper. In essence:
|
||||||
# mkfifo {}
|
# mkfifo {}
|
||||||
|
@ -9867,7 +9877,7 @@ sub wrapped($) {
|
||||||
# wait; rm {}
|
# wait; rm {}
|
||||||
# without affecting $?
|
# without affecting $?
|
||||||
$command = fifo_wrap(). " ".
|
$command = fifo_wrap(). " ".
|
||||||
$Global::shell. " ". ::Q($command). ' $PARALLEL_TMP'. ';';
|
$Global::shell. " ". ::Q($command). ' "$PARALLEL_TMP"'. ';';
|
||||||
}
|
}
|
||||||
# Wrap with ssh + tranferring of files
|
# Wrap with ssh + tranferring of files
|
||||||
$command = $self->sshlogin_wrap($command);
|
$command = $self->sshlogin_wrap($command);
|
||||||
|
@ -10827,6 +10837,7 @@ sub interactive_start($) {
|
||||||
|
|
||||||
{
|
{
|
||||||
my $tmuxsocket;
|
my $tmuxsocket;
|
||||||
|
my $qsocket;
|
||||||
|
|
||||||
sub tmux_wrap($) {
|
sub tmux_wrap($) {
|
||||||
# Wrap command with tmux for session pPID
|
# Wrap command with tmux for session pPID
|
||||||
|
@ -10837,7 +10848,6 @@ sub interactive_start($) {
|
||||||
# Temporary file name. Used for fifo to communicate exit val
|
# Temporary file name. Used for fifo to communicate exit val
|
||||||
my $tmpfifo = ::tmpname("tmx");
|
my $tmpfifo = ::tmpname("tmx");
|
||||||
$self->add_rm($tmpfifo);
|
$self->add_rm($tmpfifo);
|
||||||
|
|
||||||
if(length($tmpfifo) >=100) {
|
if(length($tmpfifo) >=100) {
|
||||||
::error("tmux does not support sockets with path > 100.");
|
::error("tmux does not support sockets with path > 100.");
|
||||||
::wait_and_exit(255);
|
::wait_and_exit(255);
|
||||||
|
@ -10888,36 +10898,36 @@ sub interactive_start($) {
|
||||||
$ENV{'PARALLEL_TMUX'} ||= "tmux";
|
$ENV{'PARALLEL_TMUX'} ||= "tmux";
|
||||||
if(not $tmuxsocket) {
|
if(not $tmuxsocket) {
|
||||||
$tmuxsocket = ::tmpname("tms");
|
$tmuxsocket = ::tmpname("tms");
|
||||||
::debug("tmux", "Start: $ENV{'PARALLEL_TMUX'} -S $tmuxsocket attach");
|
$qsocket = ::Q($tmuxsocket);
|
||||||
|
::debug("tmux", "Start: $ENV{'PARALLEL_TMUX'} -S $qsocket attach");
|
||||||
if($opt::fg) {
|
if($opt::fg) {
|
||||||
if(not fork) {
|
if(not fork) {
|
||||||
# Run tmux in the foreground
|
# Run tmux in the foreground
|
||||||
# Wait for the socket to appear
|
# Wait for the socket to appear
|
||||||
while (not -e $tmuxsocket) { }
|
while (not -e $tmuxsocket) { }
|
||||||
`$ENV{'PARALLEL_TMUX'} -S $tmuxsocket attach`;
|
`$ENV{'PARALLEL_TMUX'} -S $qsocket attach`;
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::status("See output with: $ENV{'PARALLEL_TMUX'} -S $tmuxsocket attach");
|
::status("See output with: $ENV{'PARALLEL_TMUX'} -S $qsocket attach");
|
||||||
}
|
}
|
||||||
$tmux = "sh -c '".
|
$tmux = "sh -c ".::Q(
|
||||||
$ENV{'PARALLEL_TMUX'}.
|
$ENV{'PARALLEL_TMUX'}.
|
||||||
" -S $tmuxsocket new-session -s p$$ -d \"sleep .2\" >/dev/null 2>&1';" .
|
" -S $qsocket new-session -s p$$ -d \"sleep .2\" >/dev/null 2>&1").";" .
|
||||||
$ENV{'PARALLEL_TMUX'}.
|
$ENV{'PARALLEL_TMUX'}.
|
||||||
" -S $tmuxsocket new-window -t p$$ -n $title";
|
" -S $qsocket new-window -t p$$ -n $title";
|
||||||
|
|
||||||
::debug("tmux", "title len:", $l_tit, " act ", $l_act, " max ",
|
::debug("tmux", "title len:", $l_tit, " act ", $l_act, " max ",
|
||||||
$Limits::Command::line_max_len, " tot ",
|
$Limits::Command::line_max_len, " tot ",
|
||||||
$l_tot, "\n");
|
$l_tot, "\n");
|
||||||
|
return "mkfifo ".::Q($tmpfifo)." && $tmux ".
|
||||||
return "mkfifo $tmpfifo && $tmux ".
|
|
||||||
# Run in tmux
|
# Run in tmux
|
||||||
::Q
|
::Q
|
||||||
(
|
(
|
||||||
"(".$actual_command.');'.
|
"(".$actual_command.');'.
|
||||||
# The triple print is needed - otherwise the testsuite fails
|
# The triple print is needed - otherwise the testsuite fails
|
||||||
q[ perl -e 'while($t++<3){ print $ARGV[0],"\n" }' $?h/$status >> ].
|
q[ perl -e 'while($t++<3){ print $ARGV[0],"\n" }' $?h/$status >> ].
|
||||||
$tmpfifo."&".
|
::Q($tmpfifo)."&".
|
||||||
"echo $title; echo \007Job finished at: `date`;sleep 10"
|
"echo $title; echo \007Job finished at: `date`;sleep 10"
|
||||||
).
|
).
|
||||||
# Run outside tmux
|
# Run outside tmux
|
||||||
|
@ -10925,7 +10935,7 @@ sub interactive_start($) {
|
||||||
# If csh the first will be 0h, so use the second as exit value.
|
# If csh the first will be 0h, so use the second as exit value.
|
||||||
# Otherwise just use the first value as exit value.
|
# Otherwise just use the first value as exit value.
|
||||||
q{; exec perl -e '$/="/";$_=<>;$c=<>;unlink $ARGV; }.
|
q{; exec perl -e '$/="/";$_=<>;$c=<>;unlink $ARGV; }.
|
||||||
q{/(\d+)h/ and exit($1);exit$c' }.$tmpfifo;
|
q{/(\d+)h/ and exit($1);exit$c' }.::Q($tmpfifo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12159,7 +12169,7 @@ sub slot($) {
|
||||||
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->get();
|
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->get();
|
||||||
# $PARALLEL_TMP will point to a tempfile that will be used as {}
|
# $PARALLEL_TMP will point to a tempfile that will be used as {}
|
||||||
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->
|
$Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}->
|
||||||
unget([Arg->new('$PARALLEL_TMP')]);
|
unget([Arg->new('"$PARALLEL_TMP"')]);
|
||||||
}
|
}
|
||||||
while (not $self->{'arg_queue'}->empty()) {
|
while (not $self->{'arg_queue'}->empty()) {
|
||||||
$next_arg = $self->{'arg_queue'}->get();
|
$next_arg = $self->{'arg_queue'}->get();
|
||||||
|
@ -13385,9 +13395,10 @@ sub tmux_length($) {
|
||||||
my @out;
|
my @out;
|
||||||
for my $l (1, 2020, 16320, 30000, $len) {
|
for my $l (1, 2020, 16320, 30000, $len) {
|
||||||
my $tmpfile = ::tmpname("tms");
|
my $tmpfile = ::tmpname("tms");
|
||||||
|
my $qtmp = ::Q($tmpfile);
|
||||||
my $tmuxcmd = $ENV{'PARALLEL_TMUX'}.
|
my $tmuxcmd = $ENV{'PARALLEL_TMUX'}.
|
||||||
" -S $tmpfile new-session -d -n echo $l".
|
" -S $qtmp new-session -d -n echo $l".
|
||||||
("t"x$l). " && echo $l; rm -f $tmpfile";
|
("t"x$l). " && echo $l; rm -f $qtmp";
|
||||||
push @out, ::qqx($tmuxcmd);
|
push @out, ::qqx($tmuxcmd);
|
||||||
::rm($tmpfile);
|
::rm($tmpfile);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3790,6 +3790,72 @@ fails.
|
||||||
https://github.com/aaronriekenberg/rust-parallel
|
https://github.com/aaronriekenberg/rust-parallel
|
||||||
(Last checked: 2023-01)
|
(Last checked: 2023-01)
|
||||||
|
|
||||||
|
|
||||||
|
=head2 DIFFERENCES BETWEEN parallelium AND GNU Parallel
|
||||||
|
|
||||||
|
Summary (see legend above):
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item - I2 - - - - -
|
||||||
|
|
||||||
|
=item M1 - - - - M6
|
||||||
|
|
||||||
|
=item O1 - O3 - - - - N/A - -
|
||||||
|
|
||||||
|
=item E1 - - E4 - - -
|
||||||
|
|
||||||
|
=item - - - - - - - - -
|
||||||
|
|
||||||
|
=item - -
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
B<parallelium> merges standard output (stdout) and standard error
|
||||||
|
(stderr). The maximal output of a command is 8192 bytes. Bigger output
|
||||||
|
makes B<parallelium> go into an infinite loop.
|
||||||
|
|
||||||
|
In the input file for B<parallelium> you can define a tag, so that you
|
||||||
|
can select to run only these commands. A bit like a target in a
|
||||||
|
Makefile.
|
||||||
|
|
||||||
|
Progress is printed on standard output (stdout) prepended with '#'
|
||||||
|
with similar information as GNU B<parallel>'s B<--bar>.
|
||||||
|
|
||||||
|
=head3 EXAMPLES
|
||||||
|
|
||||||
|
$ cat testjobs.txt
|
||||||
|
#tag common sleeps classA
|
||||||
|
(sleep 4.495;echo "job 000")
|
||||||
|
:
|
||||||
|
(sleep 2.587;echo "job 016")
|
||||||
|
|
||||||
|
#tag common sleeps classB
|
||||||
|
(sleep 0.218;echo "job 017")
|
||||||
|
:
|
||||||
|
(sleep 2.269;echo "job 040")
|
||||||
|
|
||||||
|
#tag common sleeps classC
|
||||||
|
(sleep 2.586;echo "job 041")
|
||||||
|
:
|
||||||
|
(sleep 1.626;echo "job 099")
|
||||||
|
|
||||||
|
#tag lasthalf, sleeps, classB
|
||||||
|
(sleep 1.540;echo "job 100")
|
||||||
|
:
|
||||||
|
(sleep 2.001;echo "job 199")
|
||||||
|
|
||||||
|
1$ parallelium -f testjobs.txt -l logdir -t classB,classC
|
||||||
|
|
||||||
|
1$ cat testjobs.txt |
|
||||||
|
parallel --plus --results logdir/testjobs.txt_{0#}.output \
|
||||||
|
'{= if(/^#tag /) { @tag = split/,|\s+/ }
|
||||||
|
(grep /^(classB|classC)$/, @tag) or skip =}'
|
||||||
|
|
||||||
|
https://github.com/beomagi/parallelium
|
||||||
|
(Last checked: 2023-01)
|
||||||
|
|
||||||
|
|
||||||
=head2 Todo
|
=head2 Todo
|
||||||
|
|
||||||
http://code.google.com/p/push/ (cannot compile)
|
http://code.google.com/p/push/ (cannot compile)
|
||||||
|
|
15
src/parsort
15
src/parsort
|
@ -159,12 +159,19 @@ sub sort_files {
|
||||||
# The commands split at \n (or \0)
|
# The commands split at \n (or \0)
|
||||||
# and there will be at least one for each CPU thread
|
# and there will be at least one for each CPU thread
|
||||||
my @subopt = $opt::zero_terminated ? qw(--recend "\0") : ();
|
my @subopt = $opt::zero_terminated ? qw(--recend "\0") : ();
|
||||||
|
# $uniq is needed because @files could contain \n
|
||||||
|
my $uniq = join "", map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..20);
|
||||||
open(my $par,"-|",qw(parallel), @subopt,
|
open(my $par,"-|",qw(parallel), @subopt,
|
||||||
qw(--pipepart --block -1 --dryrun -vv sort),
|
qw(--pipepart --block -1 --dryrun -vv sort),
|
||||||
@Global::sortoptions, '::::', @files) || die;
|
@Global::sortoptions, $uniq, '::::', @files) || die;
|
||||||
my @cmd = merge(<$par>);
|
# Generated commands:
|
||||||
|
# <file perl-catter | (sort ... $uniq )
|
||||||
|
# Use $uniq to split into commands
|
||||||
|
# (We cannot use \n because 'file' may contain newline)
|
||||||
|
my @cmd = map { "$_)\n" } split(/$uniq[)]\n/, join("",<$par>));
|
||||||
|
debug(1,@cmd);
|
||||||
close $par;
|
close $par;
|
||||||
debug(@cmd);
|
@cmd = merge(@cmd);
|
||||||
# The command uses <(...) so it is incompatible with /bin/sh
|
# The command uses <(...) so it is incompatible with /bin/sh
|
||||||
open(my $bash,"|-","bash") || die;
|
open(my $bash,"|-","bash") || die;
|
||||||
print $bash @cmd;
|
print $bash @cmd;
|
||||||
|
@ -186,7 +193,7 @@ sub sort_stdin {
|
||||||
if(fork) {
|
if(fork) {
|
||||||
} else {
|
} else {
|
||||||
my @subopt = $opt::zero_terminated ? qw(--recend "\0") : ();
|
my @subopt = $opt::zero_terminated ? qw(--recend "\0") : ();
|
||||||
exec(qw(parallel -j), $numthreads, @subopt,
|
exec(qw(parallel -0 -j), $numthreads, @subopt,
|
||||||
# 286k is the best mean value after testing 250..350
|
# 286k is the best mean value after testing 250..350
|
||||||
qw(--block 286k --pipe --roundrobin cat > {} :::),@fifos);
|
qw(--block 286k --pipe --roundrobin cat > {} :::),@fifos);
|
||||||
}
|
}
|
||||||
|
|
55
src/sql
55
src/sql
|
@ -523,6 +523,27 @@ use Getopt::Long;
|
||||||
use strict;
|
use strict;
|
||||||
use File::Temp qw/tempfile tempdir/;
|
use File::Temp qw/tempfile tempdir/;
|
||||||
|
|
||||||
|
sub shell_quote($) {
|
||||||
|
# Quote for other shells (Bourne compatibles)
|
||||||
|
# Inputs:
|
||||||
|
# $string = string to be quoted
|
||||||
|
# Returns:
|
||||||
|
# $shell_quoted = string quoted as needed by the shell
|
||||||
|
my $s = $_[0];
|
||||||
|
if($s =~ /[^-_.+a-z0-9\/]/i) {
|
||||||
|
$s =~ s/'/'"'"'/g; # "-quote single quotes
|
||||||
|
$s = "'$s'"; # '-quote entire string
|
||||||
|
$s =~ s/^''//; # Remove unneeded '' at ends
|
||||||
|
$s =~ s/''$//; # (faster than s/^''|''$//g)
|
||||||
|
return $s;
|
||||||
|
} elsif ($s eq "") {
|
||||||
|
return "''";
|
||||||
|
} else {
|
||||||
|
# No quoting needed
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
parse_options();
|
parse_options();
|
||||||
|
|
||||||
my $pass_through_options = (defined $::opt_p) ? join(" ",@{$::opt_p}) : "";
|
my $pass_through_options = (defined $::opt_p) ? join(" ",@{$::opt_p}) : "";
|
||||||
|
@ -587,29 +608,11 @@ if($dburl{'query'}) {
|
||||||
($fh,$queryfile) = tempfile(SUFFIX => ".sql");
|
($fh,$queryfile) = tempfile(SUFFIX => ".sql");
|
||||||
print $fh $dburl{'query'},"\n";
|
print $fh $dburl{'query'},"\n";
|
||||||
close $fh;
|
close $fh;
|
||||||
$batch_command = "(cat $queryfile;rm $queryfile; cat) | $batch_command";
|
my $qfile = shell_quote($queryfile);
|
||||||
|
$batch_command = "(cat $qfile;rm $qfile; cat) | $batch_command";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub shell_quote($) {
|
|
||||||
# Quote for other shells (Bourne compatibles)
|
|
||||||
# Inputs:
|
|
||||||
# $string = string to be quoted
|
|
||||||
# Returns:
|
|
||||||
# $shell_quoted = string quoted as needed by the shell
|
|
||||||
my $s = $_[0];
|
|
||||||
if($s =~ /[^-_.+a-z0-9\/]/i) {
|
|
||||||
$s =~ s/'/'"'"'/g; # "-quote single quotes
|
|
||||||
$s = "'$s'"; # '-quote entire string
|
|
||||||
$s =~ s/^''//; # Remove unneeded '' at ends
|
|
||||||
$s =~ s/''$//; # (faster than s/^''|''$//g)
|
|
||||||
return $s;
|
|
||||||
} elsif ($s eq "") {
|
|
||||||
return "''";
|
|
||||||
} else {
|
|
||||||
# No quoting needed
|
|
||||||
return $s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if(@ARGV) {
|
if(@ARGV) {
|
||||||
|
@ -776,10 +779,10 @@ sub mysql_commands {
|
||||||
close $credential_fh;
|
close $credential_fh;
|
||||||
|
|
||||||
# Prepend with a remover of the credential tempfile
|
# Prepend with a remover of the credential tempfile
|
||||||
# -C: Compression if both ends support it
|
my $qtmp = shell_quote($tmp);
|
||||||
$batch_command =
|
$batch_command =
|
||||||
"((sleep 1; rm $tmp) & ".
|
"((sleep 1; rm $qtmp) & ".
|
||||||
"mysql --defaults-extra-file=$tmp -C $pass_through_options ".
|
"mysql --defaults-extra-file=$qtmp $pass_through_options ".
|
||||||
"$no_headers $html $ssl $host $user $port $database)";
|
"$no_headers $html $ssl $host $user $port $database)";
|
||||||
$interactive_command = $batch_command;
|
$interactive_command = $batch_command;
|
||||||
return($batch_command,$interactive_command);
|
return($batch_command,$interactive_command);
|
||||||
|
@ -1109,7 +1112,9 @@ sub get_alias {
|
||||||
"$path/dburl.aliases", "$path/dburl.aliases.dist");
|
"$path/dburl.aliases", "$path/dburl.aliases.dist");
|
||||||
for my $alias_file (@search) {
|
for my $alias_file (@search) {
|
||||||
if(-r $alias_file) {
|
if(-r $alias_file) {
|
||||||
push @urlalias, `cat "$alias_file"`;
|
open(my $fh, "<", $alias_file) || die;
|
||||||
|
push @urlalias, <$fh>;
|
||||||
|
close $fh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my ($alias_part,$rest) = $alias=~/(:\w*)(.*)/;
|
my ($alias_part,$rest) = $alias=~/(:\w*)(.*)/;
|
||||||
|
|
|
@ -16,15 +16,27 @@ export TIMEOUT=$MAX_SEC_PER_TEST
|
||||||
run_once() {
|
run_once() {
|
||||||
script=$1
|
script=$1
|
||||||
base=`basename "$script" .sh`
|
base=`basename "$script" .sh`
|
||||||
diff -Naur wanted-results/"$base" actual-results/"$base" >/dev/null ||
|
if diff -Naur wanted-results/"$base" actual-results/"$base" >/dev/null; then
|
||||||
bash "$script" | perl -pe 's:'$HOME':~:g' > actual-results/"$base"
|
true skip
|
||||||
|
else
|
||||||
|
(
|
||||||
|
testsuitedir=$(pwd)
|
||||||
|
export testsuitedir
|
||||||
|
cd "$TMPDIR"
|
||||||
|
bash "$testsuitedir/$script" |
|
||||||
|
perl -pe 's:'$HOME':~:g' > "$testsuitedir"/actual-results/"$base"
|
||||||
|
)
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
export -f run_once
|
export -f run_once
|
||||||
|
|
||||||
run_test() {
|
run_test() {
|
||||||
script="$1"
|
script="$1"
|
||||||
base=`basename "$script" .sh`
|
base=`basename "$script" .sh`
|
||||||
export TMPDIR=/tmp/"$base"-tmpdir
|
# Force spaces and < into TMPDIR - this will expose bugs
|
||||||
|
export TMPDIR=/tmp/"$base-tmp"/'
|
||||||
|
<'/tmp
|
||||||
|
rm -rf "$TMPDIR"
|
||||||
mkdir -p "$TMPDIR"
|
mkdir -p "$TMPDIR"
|
||||||
# Clean before. May be owned by other users
|
# Clean before. May be owned by other users
|
||||||
sudo rm -f /tmp/*.{tmx,pac,arg,all,log,swp,loa,ssh,df,pip,tmb,chr,tms,par} ||
|
sudo rm -f /tmp/*.{tmx,pac,arg,all,log,swp,loa,ssh,df,pip,tmb,chr,tms,par} ||
|
||||||
|
|
|
@ -49,6 +49,10 @@ start_centos3() {
|
||||||
start_centos3
|
start_centos3
|
||||||
|
|
||||||
(
|
(
|
||||||
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
cd $testsuitedir
|
||||||
# Copy binaries to server
|
# Copy binaries to server
|
||||||
cd testsuite/vagrant/tange/centos3/ 2>/dev/null
|
cd testsuite/vagrant/tange/centos3/ 2>/dev/null
|
||||||
cd vagrant/tange/centos3/ 2>/dev/null
|
cd vagrant/tange/centos3/ 2>/dev/null
|
||||||
|
|
|
@ -11,8 +11,13 @@ SSHLOGIN1=$SSHUSER1@$SERVER1
|
||||||
echo $SSHUSER1@$SERVER1
|
echo $SSHUSER1@$SERVER1
|
||||||
|
|
||||||
ssh $SSHLOGIN1 touch .parallel/will-cite
|
ssh $SSHLOGIN1 touch .parallel/will-cite
|
||||||
scp -q .*/src/{parallel,sem,sql,niceload,env_parallel*} $SSHLOGIN1:bin/
|
(
|
||||||
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
cd $testsuitedir
|
||||||
|
scp -q "$testsuitedir"/../src/{parallel,sem,sql,niceload,env_parallel*} $SSHLOGIN1:bin/
|
||||||
|
)
|
||||||
. `which env_parallel.bash`
|
. `which env_parallel.bash`
|
||||||
env_parallel --session
|
env_parallel --session
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,10 @@ par_ll_long_followed_by_short() {
|
||||||
|
|
||||||
par_PARALLEL_HOME_not_exist() {
|
par_PARALLEL_HOME_not_exist() {
|
||||||
echo '### bug #62311: --pipepart + ::: fail'
|
echo '### bug #62311: --pipepart + ::: fail'
|
||||||
tmp1=$(mktemp)
|
tmp1="$(mktemp)"
|
||||||
rm $tmp1
|
rm "$tmp1"
|
||||||
PARALLEL_HOME=$tmp1 parallel echo ::: OK
|
PARALLEL_HOME="$tmp1" parallel echo ::: OK
|
||||||
rm -r $tmp1
|
rm -r "$tmp1"
|
||||||
echo Should warn:
|
echo Should warn:
|
||||||
PARALLEL_HOME=/does-not-exist parallel -k echo ::: should warn
|
PARALLEL_HOME=/does-not-exist parallel -k echo ::: should warn
|
||||||
}
|
}
|
||||||
|
@ -38,10 +38,10 @@ par_colour_failed() {
|
||||||
|
|
||||||
par_pipepart_triple_colon() {
|
par_pipepart_triple_colon() {
|
||||||
echo '### bug #62311: --pipepart + ::: fail'
|
echo '### bug #62311: --pipepart + ::: fail'
|
||||||
tmp1=$(mktemp)
|
tmp1="$(mktemp)"
|
||||||
seq 3 >$tmp1
|
seq 3 >"$tmp1"
|
||||||
parallel --pipepart -a $tmp1 wc ::: a
|
parallel --pipepart -a "$tmp1" wc ::: a
|
||||||
rm $tmp1
|
rm "$tmp1"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_open-tty() {
|
par_open-tty() {
|
||||||
|
@ -137,11 +137,11 @@ EOF
|
||||||
cat <<'EOF' > "$tmp2"
|
cat <<'EOF' > "$tmp2"
|
||||||
2: Job:{#} Slot:{%} All:{} Arg[1]:{1} Arg[-1]:{-1} Perl({}+4):{=$_+=4=}
|
2: Job:{#} Slot:{%} All:{} Arg[1]:{1} Arg[-1]:{-1} Perl({}+4):{=$_+=4=}
|
||||||
EOF
|
EOF
|
||||||
parallel --colsep , -j2 --cleanup --tmpl $tmp1=t1.{#} --tmpl $tmp2=t2.{%} \
|
parallel --colsep , -j2 --cleanup --tmpl "$tmp1"=t1.{#} --tmpl "$tmp2"=t2.{%} \
|
||||||
'sleep 0.{#}; cat t1.{#} t2.{%}' ::: 1,a 1,b 2,a 2,b
|
'sleep 0.{#}; cat t1.{#} t2.{%}' ::: 1,a 1,b 2,a 2,b
|
||||||
echo should give no files
|
echo should give no files
|
||||||
ls t[12].*
|
ls t[12].*
|
||||||
parallel -j2 --cleanup --tmpl $tmp1=t1.{#} --tmpl $tmp2=t2.{%} \
|
parallel -j2 --cleanup --tmpl "$tmp1"=t1.{#} --tmpl "$tmp2"=t2.{%} \
|
||||||
'sleep 0.{#}; cat t1.{#} t2.{%}' ::: 1 2 ::: a b
|
'sleep 0.{#}; cat t1.{#} t2.{%}' ::: 1 2 ::: a b
|
||||||
echo should give no files
|
echo should give no files
|
||||||
ls t[12].*
|
ls t[12].*
|
||||||
|
@ -150,12 +150,12 @@ EOF
|
||||||
par_resume_k() {
|
par_resume_k() {
|
||||||
echo '### --resume -k'
|
echo '### --resume -k'
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel -k --resume --joblog $tmp echo job{}id\;exit {} ::: 0 1 2 3 0 5
|
parallel -k --resume --joblog "$tmp" echo job{}id\;exit {} ::: 0 1 2 3 0 5
|
||||||
echo try 2 = nothing
|
echo try 2 = nothing
|
||||||
parallel -k --resume --joblog $tmp echo job{}id\;exit {} ::: 0 1 2 3 0 5
|
parallel -k --resume --joblog "$tmp" echo job{}id\;exit {} ::: 0 1 2 3 0 5
|
||||||
echo two extra
|
echo two extra
|
||||||
parallel -k --resume --joblog $tmp echo job{}id\;exit 0 ::: 0 1 2 3 0 5 6 7
|
parallel -k --resume --joblog "$tmp" echo job{}id\;exit 0 ::: 0 1 2 3 0 5 6 7
|
||||||
rm -f $tmp
|
rm -f "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_empty_string_quote() {
|
par_empty_string_quote() {
|
||||||
|
@ -415,10 +415,10 @@ par_argfile() {
|
||||||
echo '### Test -a and --arg-file: Read input from file instead of stdin'
|
echo '### Test -a and --arg-file: Read input from file instead of stdin'
|
||||||
|
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
seq 1 10 >$tmp
|
seq 1 10 >"$tmp"
|
||||||
parallel -k -a $tmp echo
|
parallel -k -a "$tmp" echo
|
||||||
parallel -k --arg-file $tmp echo
|
parallel -k --arg-file "$tmp" echo
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipe_unneeded_procs() {
|
par_pipe_unneeded_procs() {
|
||||||
|
@ -453,19 +453,19 @@ par_pipepart_roundrobin() {
|
||||||
echo '### bug #45769: --round-robin --pipepart gives wrong results'
|
echo '### bug #45769: --round-robin --pipepart gives wrong results'
|
||||||
|
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
seq 10000 >$tmp
|
seq 10000 >"$tmp"
|
||||||
parallel -j2 --pipepart -a $tmp --block 14 --round-robin wc | wc -l
|
parallel -j2 --pipepart -a "$tmp" --block 14 --round-robin wc | wc -l
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipepart_header() {
|
par_pipepart_header() {
|
||||||
echo '### bug #44614: --pipepart --header off by one'
|
echo '### bug #44614: --pipepart --header off by one'
|
||||||
|
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
seq 10 >$tmp
|
seq 10 >"$tmp"
|
||||||
parallel --pipepart -a $tmp -k --block 5 'echo foo; cat'
|
parallel --pipepart -a "$tmp" -k --block 5 'echo foo; cat'
|
||||||
parallel --pipepart -a $tmp -k --block 2 --regexp --recend 3'\n' 'echo foo; cat'
|
parallel --pipepart -a "$tmp" -k --block 2 --regexp --recend 3'\n' 'echo foo; cat'
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_quote() {
|
par_quote() {
|
||||||
|
@ -492,9 +492,9 @@ par_read_from_stdin() {
|
||||||
par_total_from_joblog() {
|
par_total_from_joblog() {
|
||||||
echo 'bug #47086: [PATCH] Initialize total_completed from joblog'
|
echo 'bug #47086: [PATCH] Initialize total_completed from joblog'
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel -j1 --joblog $tmp --halt now,fail=1 echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0
|
parallel -j1 --joblog "$tmp" --halt now,fail=1 echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0
|
||||||
parallel -j1 --joblog $tmp --halt now,fail=1 --resume echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0
|
parallel -j1 --joblog "$tmp" --halt now,fail=1 --resume echo '{= $_=$Global::total_completed =};exit {}' ::: 0 0 0 1 0 0
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_xapply() {
|
par_xapply() {
|
||||||
|
@ -626,10 +626,10 @@ par_empty_line() {
|
||||||
par_append_joblog() {
|
par_append_joblog() {
|
||||||
echo '### can you append to a joblog using +'
|
echo '### can you append to a joblog using +'
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel --joblog $tmp echo ::: 1
|
parallel --joblog "$tmp" echo ::: 1
|
||||||
parallel --joblog +$tmp echo ::: 1
|
parallel --joblog +"$tmp" echo ::: 1
|
||||||
wc -l < $tmp
|
wc -l < "$tmp"
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_file_ending_in_newline() {
|
par_file_ending_in_newline() {
|
||||||
|
@ -653,16 +653,16 @@ par_python_children() {
|
||||||
par_pipepart_block_bigger_2G() {
|
par_pipepart_block_bigger_2G() {
|
||||||
echo '### Test that --pipepart can have blocks > 2GB'
|
echo '### Test that --pipepart can have blocks > 2GB'
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
echo foo >$tmp
|
echo foo >"$tmp"
|
||||||
parallel --pipepart -a $tmp --block 3G wc
|
parallel --pipepart -a "$tmp" --block 3G wc
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_retries_replacement_string() {
|
par_retries_replacement_string() {
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel --retries {//} "echo {/} >>$tmp;exit {/}" ::: 1/11 2/22 3/33
|
parallel --retries {//} "echo {/} >>'$tmp';exit {/}" ::: 1/11 2/22 3/33
|
||||||
sort $tmp
|
sort "$tmp"
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_tee() {
|
par_tee() {
|
||||||
|
@ -693,17 +693,17 @@ par_basic_halt() {
|
||||||
cpuburn=$(mktemp)
|
cpuburn=$(mktemp)
|
||||||
cpuburn2=$(mktemp)
|
cpuburn2=$(mktemp)
|
||||||
(echo '#!/usr/bin/perl'
|
(echo '#!/usr/bin/perl'
|
||||||
echo "eval{setpriority(0,0,9)}; while(1){}") > $cpuburn
|
echo "eval{setpriority(0,0,9)}; while(1){}") > "$cpuburn"
|
||||||
chmod 700 $cpuburn
|
chmod 700 "$cpuburn"
|
||||||
cp -a $cpuburn $cpuburn2
|
cp -a "$cpuburn" "$cpuburn2"
|
||||||
|
|
||||||
parallel -j4 --halt 2 ::: 'sleep 1' $cpuburn false;
|
parallel -0 -j4 --halt 2 ::: 'sleep 1' "'$cpuburn'" false;
|
||||||
killall $(basename $cpuburn) 2>/dev/null &&
|
killall $(basename "$cpuburn") 2>/dev/null &&
|
||||||
echo ERROR: cpuburn should already have been killed
|
echo ERROR: cpuburn should already have been killed
|
||||||
parallel -j4 --halt -2 ::: 'sleep 1' $cpuburn2 true;
|
parallel -0 -j4 --halt -2 ::: 'sleep 1' "'$cpuburn2'" true;
|
||||||
killall $(basename $cpuburn2) 2>/dev/null &&
|
killall $(basename "$cpuburn2") 2>/dev/null &&
|
||||||
echo ERROR: cpuburn2 should already have been killed
|
echo ERROR: cpuburn2 should already have been killed
|
||||||
rm $cpuburn $cpuburn2
|
rm "$cpuburn" "$cpuburn2"
|
||||||
|
|
||||||
parallel --halt error echo ::: should not print
|
parallel --halt error echo ::: should not print
|
||||||
parallel --halt soon echo ::: should not print
|
parallel --halt soon echo ::: should not print
|
||||||
|
@ -722,12 +722,12 @@ par_wd_3dot_local() {
|
||||||
echo 'bug #45993: --wd ... should also work when run locally'
|
echo 'bug #45993: --wd ... should also work when run locally'
|
||||||
|
|
||||||
(
|
(
|
||||||
parallel --wd /bi 'pwd; echo $OLDPWD; echo' ::: fail
|
parallel --wd /bi 'pwd; echo "$OLDPWD"; echo' ::: fail
|
||||||
parallel --wd /bin 'pwd; echo $OLDPWD; echo' ::: OK
|
parallel --wd /bin 'pwd; echo "$OLDPWD"; echo' ::: OK
|
||||||
parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK
|
parallel --wd / 'pwd; echo "$OLDPWD"; echo' ::: OK
|
||||||
parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK
|
parallel --wd /tmp 'pwd; echo "$OLDPWD"; echo' ::: OK
|
||||||
parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK
|
parallel --wd ... 'pwd; echo "$OLDPWD"; echo' ::: OK
|
||||||
parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK
|
parallel --wd . 'pwd; echo "$OLDPWD"; echo' ::: OK
|
||||||
) |
|
) |
|
||||||
perl -pe 's:/mnt/4tb::; s:/home/tange:~:;' |
|
perl -pe 's:/mnt/4tb::; s:/home/tange:~:;' |
|
||||||
perl -pe 's:parallel./:parallel/:;' |
|
perl -pe 's:parallel./:parallel/:;' |
|
||||||
|
@ -747,21 +747,24 @@ par_X_eta_div_zero() {
|
||||||
|
|
||||||
par_parcat_args_stdin() {
|
par_parcat_args_stdin() {
|
||||||
echo 'bug #51690: parcat: read args from stdin'
|
echo 'bug #51690: parcat: read args from stdin'
|
||||||
|
# parcat reads files line by line
|
||||||
|
# so this does not work if TMPDIR contains \n
|
||||||
|
TMPDIR='/tmp/Y/ </i'
|
||||||
|
mkdir -p "$TMPDIR"
|
||||||
tmp1=$(mktemp)
|
tmp1=$(mktemp)
|
||||||
tmp2=$(mktemp)
|
tmp2=$(mktemp)
|
||||||
echo OK1 > $tmp1
|
echo OK1 > "$tmp1"
|
||||||
echo OK2 > $tmp2
|
echo OK2 > "$tmp2"
|
||||||
(echo $tmp1
|
(echo "$tmp1"; echo "$tmp2") | parcat | sort
|
||||||
echo $tmp2) | parcat | sort
|
rm "$tmp1" "$tmp2"
|
||||||
rm $tmp1 $tmp2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
par_parcat_rm() {
|
par_parcat_rm() {
|
||||||
echo 'bug #51691: parcat --rm remove fifo when opened'
|
echo 'bug #51691: parcat --rm remove fifo when opened'
|
||||||
tmp1=$(mktemp)
|
tmp1=$(mktemp)
|
||||||
echo OK1 > $tmp1
|
echo OK1 > "$tmp1"
|
||||||
parcat --rm $tmp1
|
parcat --rm "$tmp1"
|
||||||
rm $tmp1 2>/dev/null || echo OK file removed
|
rm "$tmp1" 2>/dev/null || echo OK file removed
|
||||||
}
|
}
|
||||||
|
|
||||||
par_linebuffer_files() {
|
par_linebuffer_files() {
|
||||||
|
@ -795,10 +798,10 @@ par_blocking_redir() {
|
||||||
par_pipepart_recend_recstart() {
|
par_pipepart_recend_recstart() {
|
||||||
echo 'bug #52343: --recend/--recstart does wrong thing with --pipepart'
|
echo 'bug #52343: --recend/--recstart does wrong thing with --pipepart'
|
||||||
tmp1=$(mktemp)
|
tmp1=$(mktemp)
|
||||||
seq 10 > $tmp1
|
seq 10 > "$tmp1"
|
||||||
parallel -k --pipepart -a $tmp1 --recend '\n' --recstart '6' --block 1 'echo a; cat'
|
parallel -k --pipepart -a "$tmp1" --recend '\n' --recstart '6' --block 1 'echo a; cat'
|
||||||
parallel -k --pipe < $tmp1 --recend '\n' --recstart '6' --block 1 'echo a; cat'
|
parallel -k --pipe < "$tmp1" --recend '\n' --recstart '6' --block 1 'echo a; cat'
|
||||||
rm $tmp1 2>/dev/null
|
rm "$tmp1" 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipe_tag_v() {
|
par_pipe_tag_v() {
|
||||||
|
@ -812,11 +815,11 @@ par_pipe_tag_v() {
|
||||||
par_dryrun_append_joblog() {
|
par_dryrun_append_joblog() {
|
||||||
echo '--dry-run should not append to joblog'
|
echo '--dry-run should not append to joblog'
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel -k --jl $tmp echo ::: 1 2 3
|
parallel -k --jl "$tmp" echo ::: 1 2 3
|
||||||
parallel --dryrun -k --jl +$tmp echo ::: 1 2 3 4
|
parallel --dryrun -k --jl +"$tmp" echo ::: 1 2 3 4
|
||||||
# Job 4 should not show up: 3 lines + header = 4
|
# Job 4 should not show up: 3 lines + header = 4
|
||||||
wc -l < $tmp
|
wc -l < "$tmp"
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_0_no_newline() {
|
par_0_no_newline() {
|
||||||
|
@ -869,7 +872,7 @@ par_results() {
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel -k --results "$tmp"-dir echo ::: a b c
|
parallel -k --results "$tmp"-dir echo ::: a b c
|
||||||
cat "$tmp"-dir/*/*/stdout
|
cat "$tmp"-dir/*/*/stdout
|
||||||
rm -r $tmp "$tmp"-dir
|
rm -r "$tmp" "$tmp"-dir
|
||||||
}
|
}
|
||||||
|
|
||||||
par_results_json() {
|
par_results_json() {
|
||||||
|
@ -877,7 +880,7 @@ par_results_json() {
|
||||||
tmp=$(mktemp -d)
|
tmp=$(mktemp -d)
|
||||||
parallel -k --results "$tmp"/foo.json seq ::: 2 3 ::: 4 5
|
parallel -k --results "$tmp"/foo.json seq ::: 2 3 ::: 4 5
|
||||||
cat "$tmp"/foo.json | perl -pe 's/\d+\.\d{3}/9.999/g'
|
cat "$tmp"/foo.json | perl -pe 's/\d+\.\d{3}/9.999/g'
|
||||||
rm -r $tmp
|
rm -r "$tmp"
|
||||||
parallel -k --results -.json seq ::: 2 3 ::: 4 5 |
|
parallel -k --results -.json seq ::: 2 3 ::: 4 5 |
|
||||||
perl -pe 's/\d+\.\d{3}/9.999/g'
|
perl -pe 's/\d+\.\d{3}/9.999/g'
|
||||||
}
|
}
|
||||||
|
@ -908,15 +911,15 @@ par_PARALLEL_ENV() {
|
||||||
PARALLEL_ENV="v='OK as variable'" parallel {} '$v' ::: echo
|
PARALLEL_ENV="v='OK as variable'" parallel {} '$v' ::: echo
|
||||||
PARALLEL_ENV=$(mktemp)
|
PARALLEL_ENV=$(mktemp)
|
||||||
echo '### PARALLEL_ENV as file'
|
echo '### PARALLEL_ENV as file'
|
||||||
echo "v='OK as file'" > $PARALLEL_ENV
|
echo "v='OK as file'" > "$PARALLEL_ENV"
|
||||||
PARALLEL_ENV="$PARALLEL_ENV" parallel {} '$v' ::: echo
|
PARALLEL_ENV="$PARALLEL_ENV" parallel {} '$v' ::: echo
|
||||||
echo '### PARALLEL_ENV as fifo'
|
echo '### PARALLEL_ENV as fifo'
|
||||||
rm $PARALLEL_ENV
|
rm "$PARALLEL_ENV"
|
||||||
mkfifo $PARALLEL_ENV
|
mkfifo "$PARALLEL_ENV"
|
||||||
# () needed to avoid [1]+ Done
|
# () needed to avoid [1]+ Done
|
||||||
(echo "v='OK as fifo'" > $PARALLEL_ENV &) 2>/dev/null
|
(echo "v='OK as fifo'" > "$PARALLEL_ENV" &) 2>/dev/null
|
||||||
PARALLEL_ENV="$PARALLEL_ENV" parallel {} '$v' ::: echo
|
PARALLEL_ENV="$PARALLEL_ENV" parallel {} '$v' ::: echo
|
||||||
rm $PARALLEL_ENV
|
rm "$PARALLEL_ENV"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipe_recend() {
|
par_pipe_recend() {
|
||||||
|
@ -1050,7 +1053,7 @@ par_profile() {
|
||||||
parallel -J ./testprofile_local echo ::: local
|
parallel -J ./testprofile_local echo ::: local
|
||||||
rm testprofile_local
|
rm testprofile_local
|
||||||
echo --tag > testprofile_abs
|
echo --tag > testprofile_abs
|
||||||
parallel -J `pwd`/testprofile_abs echo ::: abs
|
parallel -J "`pwd`"/testprofile_abs echo ::: abs
|
||||||
rm testprofile_abs
|
rm testprofile_abs
|
||||||
echo --tag > ~/.parallel/testprofile_config
|
echo --tag > ~/.parallel/testprofile_config
|
||||||
parallel -J testprofile_config echo ::: config
|
parallel -J testprofile_config echo ::: config
|
||||||
|
|
|
@ -51,31 +51,32 @@ par_load_from_PARALLEL() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_quote_special_results() {
|
par_quote_special_results() {
|
||||||
|
echo "### Test --results on file systems with limited UTF8 support"
|
||||||
doit() {
|
doit() {
|
||||||
mkfs=$1
|
mkfs=$1
|
||||||
img=$(mktemp /dev/shm/par-test-loop-XXXX.img)
|
img=$(mktemp /dev/shm/par-test-loop-XXXX.img)
|
||||||
dir=$(mktemp -d /tmp/par-test-loop-XXXX)
|
dir=$(mktemp -d /tmp/par-test-loop-XXXX)
|
||||||
dd if=/dev/zero bs=1000k count=150 > $img
|
dd if=/dev/zero bs=1000k count=150 > "$img"
|
||||||
# Use the mkfs.$filesystem
|
# Use the mkfs.$filesystem
|
||||||
$mkfs $img
|
$mkfs "$img"
|
||||||
sudo mount $img $dir -oloop,uid=`id -u` 2>/dev/null ||
|
sudo mount "$img" "$dir" -oloop,uid=`id -u` 2>/dev/null ||
|
||||||
sudo mount $img $dir -oloop
|
sudo mount "$img" "$dir" -oloop
|
||||||
cd $dir
|
cd "$dir"
|
||||||
sudo chown `id -u` .
|
sudo chown `id -u` .
|
||||||
df $dir
|
df "$dir"
|
||||||
printf "%s\0" '' +m . +_ .. +__ ,. ,.. + ++ / +z |
|
printf "%s\0" '' +m . +_ .. +__ ,. ,.. + ++ / +z |
|
||||||
parallel -0 --results a echo
|
parallel -0 --results a echo
|
||||||
find a | sort
|
(cd a/1 && find . -type d | sort | fmt -2000)
|
||||||
seq 128 | perl -ne 'printf "%c\0",$_' |
|
seq 128 | perl -ne 'printf "%c\0",$_' |
|
||||||
parallel -0 --results b128 echo
|
parallel -0 --results b128 echo
|
||||||
find b128 | sort
|
(cd b128/1 && find . -type d | sort | fmt -2000)
|
||||||
seq 128 255 | perl -ne 'printf "%c\0",$_' |
|
seq 128 255 | perl -ne 'printf "%c\0",$_' |
|
||||||
parallel -0 --results b255 echo
|
parallel -0 --results b255 echo
|
||||||
find b255 | sort
|
(cd b255/1 && find . -type d | sort | fmt -2000)
|
||||||
cd
|
cd
|
||||||
sudo umount $dir
|
sudo umount "$dir"
|
||||||
rm -r $dir/
|
rmdir "$dir"/
|
||||||
rm $img
|
rm "$img"
|
||||||
}
|
}
|
||||||
export -f doit
|
export -f doit
|
||||||
stdout parallel -k --tag --plus doit ::: \
|
stdout parallel -k --tag --plus doit ::: \
|
||||||
|
@ -83,7 +84,7 @@ par_quote_special_results() {
|
||||||
"mkfs.reiserfs -fq" "mkfs.ntfs -F" "mkfs.xfs -f" mkfs.minix \
|
"mkfs.reiserfs -fq" "mkfs.ntfs -F" "mkfs.xfs -f" mkfs.minix \
|
||||||
mkfs.fat mkfs.vfat mkfs.msdos mkfs.f2fs |
|
mkfs.fat mkfs.vfat mkfs.msdos mkfs.f2fs |
|
||||||
perl -pe 's:(/dev/loop|par-test-loop)\S+:$1:g;s/ +/ /g' |
|
perl -pe 's:(/dev/loop|par-test-loop)\S+:$1:g;s/ +/ /g' |
|
||||||
G -v MB/s -v UUID -v Binutils
|
G --v MB/s GB/s UUID Binutils
|
||||||
# Skip:
|
# Skip:
|
||||||
# mkfs.bfs - ro
|
# mkfs.bfs - ro
|
||||||
# mkfs.cramfs - ro
|
# mkfs.cramfs - ro
|
||||||
|
@ -297,12 +298,13 @@ par_failing_compressor() {
|
||||||
,,, files --files -k \
|
,,, files --files -k \
|
||||||
,,, comp 'cat;true' 'cat;false' \
|
,,, comp 'cat;true' 'cat;false' \
|
||||||
,,, decomp 'cat;true' 'cat;false' |
|
,,, decomp 'cat;true' 'cat;false' |
|
||||||
perl -pe 's:/par......par:/tmpfile:'
|
perl -pe 's:/.*par......par:/tmpfile:'
|
||||||
}
|
}
|
||||||
|
|
||||||
par_fifo_under_csh() {
|
par_fifo_under_csh() {
|
||||||
echo '### Test --fifo under csh'
|
echo '### Test --fifo under csh'
|
||||||
|
# csh does not seem to work with TMPDIR containing \n
|
||||||
|
TMPDIR=/tmp
|
||||||
csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'"
|
csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'"
|
||||||
echo exit $?
|
echo exit $?
|
||||||
}
|
}
|
||||||
|
@ -531,28 +533,17 @@ par_sem_2jobs() {
|
||||||
echo done
|
echo done
|
||||||
}
|
}
|
||||||
|
|
||||||
par_semaphore() {
|
|
||||||
echo '### Test if parallel invoked as sem will run parallel --semaphore'
|
|
||||||
sem --id as_sem -u -j2 'echo job1a 1; sleep 3; echo job1b 3'
|
|
||||||
sleep 0.5
|
|
||||||
sem --id as_sem -u -j2 'echo job2a 2; sleep 3; echo job2b 5'
|
|
||||||
sleep 0.5
|
|
||||||
sem --id as_sem -u -j2 'echo job3a 4; sleep 3; echo job3b 6'
|
|
||||||
sem --id as_sem --wait
|
|
||||||
echo done
|
|
||||||
}
|
|
||||||
|
|
||||||
par_line_buffer() {
|
par_line_buffer() {
|
||||||
echo "### --line-buffer"
|
echo "### --line-buffer"
|
||||||
tmp1=$(mktemp)
|
tmp1=$(mktemp)
|
||||||
tmp2=$(mktemp)
|
tmp2=$(mktemp)
|
||||||
|
|
||||||
seq 10 | parallel -j20 --line-buffer 'seq {} 10 | pv -qL 10' > $tmp1
|
seq 10 | parallel -j20 --line-buffer 'seq {} 10 | pv -qL 10' > "$tmp1"
|
||||||
seq 10 | parallel -j20 'seq {} 10 | pv -qL 10' > $tmp2
|
seq 10 | parallel -j20 'seq {} 10 | pv -qL 10' > "$tmp2"
|
||||||
cat $tmp1 | wc
|
cat "$tmp1" | wc
|
||||||
diff $tmp1 $tmp2 >/dev/null
|
diff "$tmp1" "$tmp2" >/dev/null
|
||||||
echo These must diff: $?
|
echo These must diff: $?
|
||||||
rm $tmp1 $tmp2
|
rm "$tmp1" "$tmp2"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipe_line_buffer() {
|
par_pipe_line_buffer() {
|
||||||
|
@ -568,17 +559,19 @@ par_pipe_line_buffer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export PARALLEL="-N10 -L1 --pipe -j20 --tagstring {#}"
|
export PARALLEL="-N10 -L1 --pipe -j20 --tagstring {#}"
|
||||||
seq 200| parallel --line-buffer pv -qL 10 > $tmp1 2> >(nowarn)
|
seq 200| parallel --line-buffer pv -qL 10 > "$tmp1" 2> >(nowarn)
|
||||||
seq 200| parallel pv -qL 10 > $tmp2 2> >(nowarn)
|
seq 200| parallel pv -qL 10 > "$tmp2" 2> >(nowarn)
|
||||||
cat $tmp1 | wc
|
cat "$tmp1" | wc
|
||||||
diff $tmp1 $tmp2 >/dev/null
|
diff "$tmp1" "$tmp2" >/dev/null
|
||||||
echo These must diff: $?
|
echo These must diff: $?
|
||||||
rm $tmp1 $tmp2
|
rm "$tmp1" "$tmp2"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipe_line_buffer_compress() {
|
par_pipe_line_buffer_compress() {
|
||||||
echo "### --pipe --line-buffer --compress"
|
echo "### --pipe --line-buffer --compress"
|
||||||
seq 200| parallel -N10 -L1 --pipe -j20 --line-buffer --compress --tagstring {#} pv -qL 10 | wc
|
seq 200 |
|
||||||
|
parallel -N10 -L1 --pipe -j20 --line-buffer --compress --tagstring {#} pv -qL 10 |
|
||||||
|
wc
|
||||||
}
|
}
|
||||||
|
|
||||||
par__pipepart_spawn() {
|
par__pipepart_spawn() {
|
||||||
|
@ -610,9 +603,9 @@ par__pipepart_tee() {
|
||||||
head -c 100M;
|
head -c 100M;
|
||||||
}
|
}
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
random100M >$tmp
|
random100M >"$tmp"
|
||||||
parallel --pipepart --tee -a $tmp cat ::: {1..3} | LC_ALL=C wc -c
|
parallel --pipepart --tee -a $tmp cat ::: {1..3} | LC_ALL=C wc -c
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_k() {
|
par_k() {
|
||||||
|
@ -671,7 +664,7 @@ par_results_csv() {
|
||||||
export -f doit
|
export -f doit
|
||||||
parallel -k --tag doit ::: '--header :' '' \
|
parallel -k --tag doit ::: '--header :' '' \
|
||||||
::: --tag '' ::: --files '' ::: --compress '' |
|
::: --tag '' ::: --files '' ::: --compress '' |
|
||||||
perl -pe 's:/par......par:/tmpfile:g;s/\d+\.\d+/999.999/g'
|
perl -pe 's:/.*par......par:/tmpfile:g;s/\d+\.\d+/999.999/g'
|
||||||
}
|
}
|
||||||
|
|
||||||
par_kill_children_timeout() {
|
par_kill_children_timeout() {
|
||||||
|
@ -694,7 +687,7 @@ par_kill_children_timeout() {
|
||||||
|
|
||||||
par_tmux_fg() {
|
par_tmux_fg() {
|
||||||
echo 'bug #50107: --tmux --fg should also write how to access it'
|
echo 'bug #50107: --tmux --fg should also write how to access it'
|
||||||
stdout parallel --tmux --fg sleep ::: 3 | perl -pe 's/.tmp\S+/tmp/'
|
stdout parallel --tmux --fg sleep ::: 3 | perl -pe 's:/tmp.*tms.....:tmpfile:'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -769,6 +762,6 @@ compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
parallel --timeout 1000% -j10 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
|
parallel --timeout 1000% -j10 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1' |
|
||||||
perl -pe 's/,31,0/,15,0/' |
|
perl -pe 's/,31,0/,15,0/' |
|
||||||
# Replace $PWD with . even if given as ~/...
|
# Replace $PWD with . even if given as ~/...
|
||||||
perl -pe 's:~:'$HOME':g' |
|
perl -pe 's:~:'"$HOME"':g' |
|
||||||
perl -pe 's:'$PWD':.:g' |
|
perl -pe 's:'"$PWD"':.:g' |
|
||||||
perl -pe 's:'$HOME':~:g'
|
perl -pe 's:'"$HOME"':~:g'
|
||||||
|
|
|
@ -102,7 +102,7 @@ par_compute_command_len() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_skip_first_line() {
|
par_skip_first_line() {
|
||||||
tmp=$(mktemp)
|
tmp="$(mktemp)"
|
||||||
(echo `seq 10000`;echo MyHeader; seq 10) |
|
(echo `seq 10000`;echo MyHeader; seq 10) |
|
||||||
parallel -k --skip-first-line --pipe --block 10 --header '1' cat
|
parallel -k --skip-first-line --pipe --block 10 --header '1' cat
|
||||||
(echo `seq 10000`;echo MyHeader; seq 10) > "$tmp"
|
(echo `seq 10000`;echo MyHeader; seq 10) > "$tmp"
|
||||||
|
@ -152,21 +152,21 @@ par_uninstalled_sshpass() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_results_compress() {
|
par_results_compress() {
|
||||||
tmpdir=$(mktemp)
|
tmpdir="$(mktemp)"
|
||||||
rm -r "$tmpdir"
|
rm -r "$tmpdir"
|
||||||
parallel --results $tmpdir --compress echo ::: 1
|
parallel --results "$tmpdir" --compress echo ::: 1
|
||||||
cat "$tmpdir"/*/*/stdout | pzstd -qdc
|
cat "$tmpdir"/*/*/stdout | pzstd -qdc
|
||||||
|
|
||||||
rm -r "$tmpdir"
|
rm -r "$tmpdir"
|
||||||
parallel --results $tmpdir echo ::: 1
|
parallel --results "$tmpdir" echo ::: 1
|
||||||
cat "$tmpdir"/*/*/stdout
|
cat "$tmpdir"/*/*/stdout
|
||||||
|
|
||||||
rm -r "$tmpdir"
|
rm -r "$tmpdir"
|
||||||
parallel --results $tmpdir --compress echo ::: ' ' /
|
parallel --results "$tmpdir" --compress echo ::: ' ' /
|
||||||
cat "$tmpdir"/*/*/stdout | pzstd -qdc
|
cat "$tmpdir"/*/*/stdout | pzstd -qdc
|
||||||
|
|
||||||
rm -r "$tmpdir"
|
rm -r "$tmpdir"
|
||||||
parallel --results $tmpdir echo ::: ' ' /
|
parallel --results "$tmpdir" echo ::: ' ' /
|
||||||
cat "$tmpdir"/*/*/stdout
|
cat "$tmpdir"/*/*/stdout
|
||||||
|
|
||||||
rm -r "$tmpdir"
|
rm -r "$tmpdir"
|
||||||
|
@ -197,11 +197,15 @@ par_open_files_blocks() {
|
||||||
|
|
||||||
par_pipe_unneeded_procs() {
|
par_pipe_unneeded_procs() {
|
||||||
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
|
echo 'bug #34241: --pipe should not spawn unneeded processes - part 2'
|
||||||
|
tmp="$(mktemp -d)"
|
||||||
|
cd "$tmp"
|
||||||
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files wc >/dev/null
|
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files wc >/dev/null
|
||||||
ls *.par | wc -l; rm *.par
|
ls *.par | wc -l; rm *.par
|
||||||
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files --dry-run wc >/dev/null
|
seq 500 | parallel --tmpdir . -j10 --pipe --block 1k --files --dry-run wc >/dev/null
|
||||||
echo No .par should exist
|
echo No .par should exist
|
||||||
stdout ls *.par
|
stdout ls *.par
|
||||||
|
cd ..
|
||||||
|
rm -r "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_interactive() {
|
par_interactive() {
|
||||||
|
@ -1065,11 +1069,11 @@ par_pipepart_block() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_block_negative_prefix() {
|
par_block_negative_prefix() {
|
||||||
tmp=`mktemp`
|
tmp="$(mktemp)"
|
||||||
seq 100000 > $tmp
|
seq 100000 > "$tmp"
|
||||||
echo '### This should generate 10*2 jobs'
|
echo '### This should generate 10*2 jobs'
|
||||||
parallel -j2 -a $tmp --pipepart --block -0.01k -k md5sum | wc
|
parallel -j2 -a "$tmp" --pipepart --block -0.01k -k md5sum | wc
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_sql_colsep() {
|
par_sql_colsep() {
|
||||||
|
|
|
@ -307,12 +307,12 @@ par_groupby_pipepart() {
|
||||||
generator="$1"
|
generator="$1"
|
||||||
colsep="$2"
|
colsep="$2"
|
||||||
groupby="$3"
|
groupby="$3"
|
||||||
tmp=`mktemp`
|
tmp=$(mktemp)
|
||||||
|
|
||||||
echo "### test $generator | --colsep $colsep --groupby $groupby"
|
echo "### test $generator | --colsep $colsep --groupby $groupby"
|
||||||
$generator > $tmp
|
$generator > "$tmp"
|
||||||
parallel --header 1 --pipepart -k \
|
parallel --header 1 --pipepart -k \
|
||||||
-a $tmp --colsep "$colsep" --groupby "$groupby" 'echo NewRec; wc'
|
-a "$tmp" --colsep "$colsep" --groupby "$groupby" 'echo NewRec; wc'
|
||||||
}
|
}
|
||||||
export -f tester
|
export -f tester
|
||||||
parallel --tag -k tester \
|
parallel --tag -k tester \
|
||||||
|
@ -348,7 +348,7 @@ par_memory_leak() {
|
||||||
export -f a_run
|
export -f a_run
|
||||||
echo "### Test for memory leaks"
|
echo "### Test for memory leaks"
|
||||||
echo "Of 300 runs of 1 job at least one should be bigger than a 3000 job run"
|
echo "Of 300 runs of 1 job at least one should be bigger than a 3000 job run"
|
||||||
. `which env_parallel.bash`
|
. $(which env_parallel.bash)
|
||||||
parset small_max,big ::: 'seq 300 | parallel a_run 1 | jq -s max' 'a_run 3000'
|
parset small_max,big ::: 'seq 300 | parallel a_run 1 | jq -s max' 'a_run 3000'
|
||||||
if [ $small_max -lt $big ] ; then
|
if [ $small_max -lt $big ] ; then
|
||||||
echo "Bad: Memleak likely."
|
echo "Bad: Memleak likely."
|
||||||
|
@ -571,4 +571,4 @@ par_test_ipv6_format() {
|
||||||
export -f $(compgen -A function | grep par_)
|
export -f $(compgen -A function | grep par_)
|
||||||
compgen -A function | grep par_ | sort |
|
compgen -A function | grep par_ | sort |
|
||||||
# parallel --delay 0.3 --timeout 1000% -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
# parallel --delay 0.3 --timeout 1000% -j6 --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
||||||
parallel --delay 0.3 --timeout 1000% -j6 --lb --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
parallel --delay 0.3 --timeout 3000% -j6 --lb --tag -k --joblog /tmp/jl-`basename $0` '{} 2>&1'
|
||||||
|
|
|
@ -22,9 +22,9 @@ par_retries_0() {
|
||||||
echo '--retries 0 = inf'
|
echo '--retries 0 = inf'
|
||||||
echo this wraps at 256 and should retry until it wraps
|
echo this wraps at 256 and should retry until it wraps
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel --retries 0 -u 'printf {} >> '$tmp';a=`stat -c %s '$tmp'`; echo -n " $a"; exit $a' ::: a
|
parallel --retries 0 -u 'printf {} >> '"'$tmp'"';a=`stat -c %s '"'$tmp'"'`; echo -n " $a"; exit $a' ::: a
|
||||||
echo
|
echo
|
||||||
rm -f $tmp
|
rm -f "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_prefix_for_L_n_N_s() {
|
par_prefix_for_L_n_N_s() {
|
||||||
|
@ -135,7 +135,10 @@ EOF
|
||||||
}
|
}
|
||||||
export -f run gp oct pl py r rb sh
|
export -f run gp oct pl py r rb sh
|
||||||
|
|
||||||
parallel --tag -k run ::: gp oct pl py r rb sh
|
parallel --tag -k run ::: gp oct pl py rb sh
|
||||||
|
# R fails if TMPDIR contains space
|
||||||
|
TMPDIR=/tmp
|
||||||
|
parallel --tag -k run ::: r
|
||||||
}
|
}
|
||||||
|
|
||||||
par_pipe_regexp() {
|
par_pipe_regexp() {
|
||||||
|
@ -300,8 +303,8 @@ par_tee_with_premature_close() {
|
||||||
correct="$(seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1')"
|
correct="$(seq 1000000 | parallel -k --tee --pipe ::: wc head tail 'sleep 1')"
|
||||||
echo "$correct"
|
echo "$correct"
|
||||||
echo 'tee without --output-error=warn-nopipe support'
|
echo 'tee without --output-error=warn-nopipe support'
|
||||||
tmpdir=$(mktemp)
|
tmpdir=$(mktemp -d)
|
||||||
cat > tmp/tee <<-EOF
|
cat > "$tmpdir"/tee <<-EOF
|
||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
|
||||||
if(grep /output-error=warn-nopipe/, @ARGV) {
|
if(grep /output-error=warn-nopipe/, @ARGV) {
|
||||||
|
@ -309,8 +312,8 @@ par_tee_with_premature_close() {
|
||||||
}
|
}
|
||||||
exec "/usr/bin/tee", @ARGV;
|
exec "/usr/bin/tee", @ARGV;
|
||||||
EOF
|
EOF
|
||||||
chmod +x tmp/tee
|
chmod +x "$tmpdir"/tee
|
||||||
PATH=tmp:$PATH
|
PATH="$tmpdir":$PATH
|
||||||
# This gives incomplete output due to:
|
# This gives incomplete output due to:
|
||||||
# * tee not supporting --output-error=warn-nopipe
|
# * tee not supporting --output-error=warn-nopipe
|
||||||
# * sleep closes stdin before EOF
|
# * sleep closes stdin before EOF
|
||||||
|
@ -321,6 +324,8 @@ par_tee_with_premature_close() {
|
||||||
else
|
else
|
||||||
echo OK
|
echo OK
|
||||||
fi
|
fi
|
||||||
|
rm "$tmpdir"/tee
|
||||||
|
rmdir "$tmpdir"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_tee_too_many_args() {
|
par_tee_too_many_args() {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
perl -pe 's/\n/\n\0/' >$tmp <<EOF
|
perl -pe 's/\n/\n\0/' >"$tmp" <<EOF
|
||||||
chr1 1 Sample 1
|
chr1 1 Sample 1
|
||||||
chr1 11 Sample 1
|
chr1 11 Sample 1
|
||||||
chr1 111 Sample 1
|
chr1 111 Sample 1
|
||||||
|
@ -67,10 +67,10 @@ EOF
|
||||||
|
|
||||||
parsort_test() {
|
parsort_test() {
|
||||||
echo "### parsort $@"
|
echo "### parsort $@"
|
||||||
parsort "$@" $tmp | md5sum
|
parsort "$@" "$tmp" | md5sum
|
||||||
sort "$@" $tmp | md5sum
|
sort "$@" "$tmp" | md5sum
|
||||||
parsort "$@" < $tmp | md5sum
|
parsort "$@" < "$tmp" | md5sum
|
||||||
sort "$@" < $tmp | md5sum
|
sort "$@" < "$tmp" | md5sum
|
||||||
}
|
}
|
||||||
export -f parsort_test
|
export -f parsort_test
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,9 @@ par_parcat_mixing() {
|
||||||
echo 'parcat output should mix: a b a b'
|
echo 'parcat output should mix: a b a b'
|
||||||
mktempfifo() {
|
mktempfifo() {
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
mkfifo $tmp
|
mkfifo "$tmp"
|
||||||
echo $tmp
|
echo "$tmp"
|
||||||
}
|
}
|
||||||
slow_output() {
|
slow_output() {
|
||||||
string=$1
|
string=$1
|
||||||
|
@ -34,10 +34,10 @@ par_parcat_mixing() {
|
||||||
}
|
}
|
||||||
tmp1=$(mktempfifo)
|
tmp1=$(mktempfifo)
|
||||||
tmp2=$(mktempfifo)
|
tmp2=$(mktempfifo)
|
||||||
slow_output a > $tmp1 &
|
slow_output a > "$tmp1" &
|
||||||
sleep 1
|
sleep 1
|
||||||
slow_output b > $tmp2 &
|
slow_output b > "$tmp2" &
|
||||||
parcat $tmp1 $tmp2 | tr -s ab
|
parcat "$tmp1" "$tmp2" | tr -s ab
|
||||||
}
|
}
|
||||||
|
|
||||||
par_tmux_termination() {
|
par_tmux_termination() {
|
||||||
|
|
|
@ -6,6 +6,17 @@
|
||||||
|
|
||||||
# These fail regularly
|
# These fail regularly
|
||||||
|
|
||||||
|
par_semaphore() {
|
||||||
|
echo '### Test if parallel invoked as sem will run parallel --semaphore'
|
||||||
|
sem --id as_sem -u -j2 'echo job1a 1; sleep 3; echo job1b 3'
|
||||||
|
sleep 0.5
|
||||||
|
sem --id as_sem -u -j2 'echo job2a 2; sleep 3; echo job2b 5'
|
||||||
|
sleep 0.5
|
||||||
|
sem --id as_sem -u -j2 'echo job3a 4; sleep 3; echo job3b 6'
|
||||||
|
sem --id as_sem --wait
|
||||||
|
echo done
|
||||||
|
}
|
||||||
|
|
||||||
ctrlz_should_suspend_children() {
|
ctrlz_should_suspend_children() {
|
||||||
echo 'bug #46120: Suspend should suspend (at least local) children'
|
echo 'bug #46120: Suspend should suspend (at least local) children'
|
||||||
echo 'it should burn 1.9 CPU seconds, but no more than that'
|
echo 'it should burn 1.9 CPU seconds, but no more than that'
|
||||||
|
@ -52,7 +63,7 @@ par_sql_CSV() {
|
||||||
|
|
||||||
par_hostgroup() {
|
par_hostgroup() {
|
||||||
echo '### --hostgroup force ncpu'
|
echo '### --hostgroup force ncpu'
|
||||||
parallel --delay 0.1 --hgrp -S @g1/1/parallel@lo -S @g2/3/lo whoami\;sleep 0.4{} ::: {1..8} | sort
|
parallel --delay 0.1 --hgrp -S @g1/1/parallel@lo -S @g2/3/lo whoami\;sleep 0.4{} ::: {1..8} | sort -u
|
||||||
|
|
||||||
echo '### --hostgroup two group arg'
|
echo '### --hostgroup two group arg'
|
||||||
parallel -k --sshdelay 0.1 --hgrp -S @g1/1/parallel@lo -S @g2/3/lo whoami\;sleep 0.3{} ::: {1..8}@g1+g2 | sort
|
parallel -k --sshdelay 0.1 --hgrp -S @g1/1/parallel@lo -S @g2/3/lo whoami\;sleep 0.3{} ::: {1..8}@g1+g2 | sort
|
||||||
|
@ -61,7 +72,7 @@ par_hostgroup() {
|
||||||
parallel --delay 0.2 --hgrp -S @g1/1/parallel@lo -S @g2/3/lo whoami\;sleep 0.4{} ::: {1..8}@g2
|
parallel --delay 0.2 --hgrp -S @g1/1/parallel@lo -S @g2/3/lo whoami\;sleep 0.4{} ::: {1..8}@g2
|
||||||
|
|
||||||
echo '### --hostgroup multiple group arg + unused group'
|
echo '### --hostgroup multiple group arg + unused group'
|
||||||
parallel --delay 0.2 --hgrp -S @g1/1/parallel@lo -S @g1/3/lo -S @g3/100/tcsh@lo whoami\;sleep 0.8{} ::: {1..8}@g1+g2 | sort
|
parallel --delay 0.2 --hgrp -S @g1/1/parallel@lo -S @g1/3/lo -S @g3/100/tcsh@lo whoami\;sleep 0.8{} ::: {1..8}@g1+g2 | sort -u
|
||||||
|
|
||||||
echo '### --hostgroup two groups @'
|
echo '### --hostgroup two groups @'
|
||||||
parallel -k --hgrp -S @g1/parallel@lo -S @g2/lo --tag whoami\;echo ::: parallel@g1 tange@g2
|
parallel -k --hgrp -S @g1/parallel@lo -S @g2/lo --tag whoami\;echo ::: parallel@g1 tange@g2
|
||||||
|
@ -73,7 +84,7 @@ par_hostgroup() {
|
||||||
parallel -k --hostgroups -S parallel@lo echo ::: no_group implicit_group@parallel@lo
|
parallel -k --hostgroups -S parallel@lo echo ::: no_group implicit_group@parallel@lo
|
||||||
|
|
||||||
echo '### --hostgroup -S @group'
|
echo '### --hostgroup -S @group'
|
||||||
parallel -S @g1/ -S @g1/1/tcsh@lo -S @g1/1/localhost -S @g2/1/parallel@lo whoami\;true ::: {1..6} | sort
|
parallel -S @g1/ -S @g1/1/tcsh@lo -S @g1/1/localhost -S @g2/1/parallel@lo whoami\;true ::: {1..6} | sort -u
|
||||||
|
|
||||||
echo '### --hostgroup -S @group1 -Sgrp2'
|
echo '### --hostgroup -S @group1 -Sgrp2'
|
||||||
parallel -S @g1/ -S @g2 -S @g1/1/tcsh@lo -S @g1/1/localhost -S @g2/1/parallel@lo whoami\;true ::: {1..6} | sort
|
parallel -S @g1/ -S @g2 -S @g1/1/tcsh@lo -S @g1/1/localhost -S @g2/1/parallel@lo whoami\;true ::: {1..6} | sort
|
||||||
|
@ -155,15 +166,15 @@ par_kill_hup() {
|
||||||
par_resume_failed_k() {
|
par_resume_failed_k() {
|
||||||
echo '### bug #38299: --resume-failed -k'
|
echo '### bug #38299: --resume-failed -k'
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
parallel -k --resume-failed --joblog "$tmp" echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
||||||
echo try 2. Gives failing - not 0
|
echo try 2. Gives failing - not 0
|
||||||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
parallel -k --resume-failed --joblog "$tmp" echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
||||||
echo with exit 0
|
echo with exit 0
|
||||||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit 0 ::: 0 1 2 3 0 1
|
parallel -k --resume-failed --joblog "$tmp" echo job{#} val {}\;exit 0 ::: 0 1 2 3 0 1
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
echo try 2 again. Gives empty
|
echo try 2 again. Gives empty
|
||||||
parallel -k --resume-failed --joblog $tmp echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
parallel -k --resume-failed --joblog "$tmp" echo job{#} val {}\;exit {} ::: 0 1 2 3 0 1
|
||||||
rm $tmp
|
rm "$tmp"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_testhalt() {
|
par_testhalt() {
|
||||||
|
|
|
@ -28,8 +28,8 @@ p_wrapper() {
|
||||||
echo Exit=$?
|
echo Exit=$?
|
||||||
wait
|
wait
|
||||||
echo Exit=$?
|
echo Exit=$?
|
||||||
$DEBUG && sort -u $T1 $T2;
|
$DEBUG && sort -u "$T1" "$T2";
|
||||||
rm $T1 $T2
|
rm "$T1" "$T2"
|
||||||
p_showsqlresult $SERVERURL $TABLE
|
p_showsqlresult $SERVERURL $TABLE
|
||||||
$DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null 2>/dev/null
|
$DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null 2>/dev/null
|
||||||
}
|
}
|
||||||
|
@ -38,9 +38,9 @@ p_template() {
|
||||||
(
|
(
|
||||||
# Make sure all jobs are inserted before starting a worker
|
# Make sure all jobs are inserted before starting a worker
|
||||||
sleep 10;
|
sleep 10;
|
||||||
parallel --sqlworker $DBURL "$@" sleep .3\;echo >$T1
|
parallel --sqlworker $DBURL "$@" sleep .3\;echo >"$T1"
|
||||||
) &
|
) &
|
||||||
parallel --sqlandworker $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
|
parallel --sqlandworker $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >"$T2";
|
||||||
}
|
}
|
||||||
|
|
||||||
par_sqlandworker() {
|
par_sqlandworker() {
|
||||||
|
@ -68,35 +68,35 @@ par_sqlandworker_total_jobs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_append_different_cmd() {
|
par_append_different_cmd() {
|
||||||
parallel --sqlmaster $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
|
parallel --sqlmaster "$DBURL" sleep .3\;echo ::: {1..5} ::: {a..e} >"$T2";
|
||||||
parallel --sqlmaster +$DBURL sleep .3\;echo {2}-{1} ::: {11..15} ::: {A..E} >>$T2;
|
parallel --sqlmaster +"$DBURL" sleep .3\;echo {2}-{1} ::: {11..15} ::: {A..E} >>"$T2";
|
||||||
parallel --sqlworker $DBURL >$T1
|
parallel --sqlworker "$DBURL" >"$T1"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_shuf() {
|
par_shuf() {
|
||||||
MD5=$(echo $SERVERURL | md5sum | perl -pe 's/(...).*/$1/')
|
MD5=$(echo "$SERVERURL" | md5sum | perl -pe 's/(...).*/$1/')
|
||||||
T=/tmp/parallel-bug49791-$MD5
|
T=/tmp/parallel-bug49791-" <$MD5"
|
||||||
[ -e $T ] && rm -rf $T
|
[ -e "$T" ] && rm -rf "$T"
|
||||||
export PARALLEL="--shuf --result $T"
|
export PARALLEL="--shuf --result '$T'"
|
||||||
parallel --sqlandworker $DBURL sleep .3\;echo \
|
parallel --sqlandworker $DBURL sleep .3\;echo \
|
||||||
::: {1..5} ::: {a..e} >$T2;
|
::: {1..5} ::: {a..e} >"$T2";
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker $DBURL >"$T2" &
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker $DBURL >"$T2" &
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker $DBURL >"$T2" &
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker $DBURL >"$T2" &
|
||||||
unset PARALLEL
|
unset PARALLEL
|
||||||
wait;
|
wait;
|
||||||
# Did it compute correctly?
|
# Did it compute correctly?
|
||||||
cat $T/1/*/*/*/stdout
|
cat "$T"/1/*/*/*/stdout
|
||||||
# Did it shuffle
|
# Did it shuffle
|
||||||
SHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
SHUF=$(sql "$SERVERURL" "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
||||||
export PARALLEL="--result $T"
|
export PARALLEL="--result '$T'"
|
||||||
parallel --sqlandworker $DBURL sleep .3\;echo \
|
parallel --sqlandworker "$DBURL" sleep .3\;echo \
|
||||||
::: {1..5} ::: {a..e} >$T2;
|
::: {1..5} ::: {a..e} >"$T2";
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker "$DBURL" >"$T2" &
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker "$DBURL" >"$T2" &
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker "$DBURL" >"$T2" &
|
||||||
parallel --sqlworker $DBURL >$T2 &
|
parallel --sqlworker "$DBURL" >"$T2" &
|
||||||
unset PARALLEL
|
unset PARALLEL
|
||||||
wait;
|
wait;
|
||||||
NOSHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
NOSHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
||||||
|
@ -104,8 +104,8 @@ par_shuf() {
|
||||||
if [ $DIFFSIZE -gt 2500 ]; then
|
if [ $DIFFSIZE -gt 2500 ]; then
|
||||||
echo OK: Diff bigger than 2500 char
|
echo OK: Diff bigger than 2500 char
|
||||||
fi
|
fi
|
||||||
[ -e $T ] && rm -rf $T
|
[ -e "$T" ] && rm -rf "$T"
|
||||||
touch $T1
|
touch "$T1"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_sql_joblog() {
|
par_sql_joblog() {
|
||||||
|
@ -115,10 +115,10 @@ par_sql_joblog() {
|
||||||
perl -pe 's/\d+\.\d+/999.999/g' | sort -n &
|
perl -pe 's/\d+\.\d+/999.999/g' | sort -n &
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
T=$(mktemp)
|
T=$(mktemp)
|
||||||
parallel -k --joblog - --sqlworker $DBURL > $T
|
parallel -k --joblog - --sqlworker $DBURL > "$T"
|
||||||
wait
|
wait
|
||||||
# Needed because of race condition
|
# Needed because of race condition
|
||||||
cat $T; rm $T
|
cat "$T"; rm "$T"
|
||||||
echo '### --sqlandworker'
|
echo '### --sqlandworker'
|
||||||
parallel -k --joblog - --sqlandworker $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} |
|
parallel -k --joblog - --sqlandworker $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} |
|
||||||
perl -pe 's/\d+\.\d+/999.999/g' | sort -n
|
perl -pe 's/\d+\.\d+/999.999/g' | sort -n
|
||||||
|
|
|
@ -38,8 +38,8 @@ p_wrapper() {
|
||||||
wait
|
wait
|
||||||
echo Exit=$?
|
echo Exit=$?
|
||||||
# For debugging show the tempfiles
|
# For debugging show the tempfiles
|
||||||
$DEBUG && sort -u $T1 $T2;
|
$DEBUG && sort -u "$T1" "$T2";
|
||||||
rm $T1 $T2
|
rm "$T1" "$T2"
|
||||||
p_showsqlresult $SERVERURL $TABLE
|
p_showsqlresult $SERVERURL $TABLE
|
||||||
# Drop the table if not debugging
|
# Drop the table if not debugging
|
||||||
$DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null 2>/dev/null
|
$DEBUG || sql $SERVERURL "drop table $TABLE;" >/dev/null 2>/dev/null
|
||||||
|
@ -50,9 +50,9 @@ p_template() {
|
||||||
(
|
(
|
||||||
# Make sure there is work to be done
|
# Make sure there is work to be done
|
||||||
sleep 6;
|
sleep 6;
|
||||||
parallel --sqlworker $DBURL "$@" sleep .3\;echo >$T1
|
parallel --sqlworker $DBURL "$@" sleep .3\;echo >"$T1"
|
||||||
) &
|
) &
|
||||||
parallel --sqlandworker $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
|
parallel --sqlandworker $DBURL "$@" sleep .3\;echo ::: {1..5} ::: {a..e} >"$T2";
|
||||||
}
|
}
|
||||||
|
|
||||||
par_sqlandworker() {
|
par_sqlandworker() {
|
||||||
|
@ -92,9 +92,9 @@ par_sqlandworker_total_jobs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
par_append() {
|
par_append() {
|
||||||
parallel --sqlmaster $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} >$T2;
|
parallel --sqlmaster $DBURL sleep .3\;echo ::: {1..5} ::: {a..e} >"$T2";
|
||||||
parallel --sqlmaster +$DBURL sleep .3\;echo ::: {11..15} ::: {A..E} >>$T2;
|
parallel --sqlmaster +$DBURL sleep .3\;echo ::: {11..15} ::: {A..E} >>"$T2";
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T1
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T1"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_shuf() {
|
par_shuf() {
|
||||||
|
@ -103,11 +103,11 @@ par_shuf() {
|
||||||
[ -e $T ] && rm -rf $T
|
[ -e $T ] && rm -rf $T
|
||||||
export PARALLEL="--shuf --result $T"
|
export PARALLEL="--shuf --result $T"
|
||||||
parallel --sqlandworker $DBURL sleep .3\;echo \
|
parallel --sqlandworker $DBURL sleep .3\;echo \
|
||||||
::: {1..5} ::: {a..e} >$T2;
|
::: {1..5} ::: {a..e} >"$T2";
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
unset PARALLEL
|
unset PARALLEL
|
||||||
wait;
|
wait;
|
||||||
# Did it compute correctly?
|
# Did it compute correctly?
|
||||||
|
@ -116,11 +116,11 @@ par_shuf() {
|
||||||
SHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
SHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
||||||
export PARALLEL="--result $T"
|
export PARALLEL="--result $T"
|
||||||
parallel --sqlandworker $DBURL sleep .3\;echo \
|
parallel --sqlandworker $DBURL sleep .3\;echo \
|
||||||
::: {1..5} ::: {a..e} >$T2;
|
::: {1..5} ::: {a..e} >"$T2";
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
parallel --sqlworker $DBURL sleep .3\;echo >$T2 &
|
parallel --sqlworker $DBURL sleep .3\;echo >"$T2" &
|
||||||
unset PARALLEL
|
unset PARALLEL
|
||||||
wait;
|
wait;
|
||||||
NOSHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
NOSHUF=$(sql $SERVERURL "select Host,Command,V1,V2,Stdout,Stderr from $TABLE order by seq;")
|
||||||
|
@ -129,7 +129,7 @@ par_shuf() {
|
||||||
echo OK: Diff bigger than 2500 char
|
echo OK: Diff bigger than 2500 char
|
||||||
fi
|
fi
|
||||||
[ -e $T ] && rm -rf $T
|
[ -e $T ] && rm -rf $T
|
||||||
touch $T1
|
touch "$T1"
|
||||||
}
|
}
|
||||||
|
|
||||||
par_empty() {
|
par_empty() {
|
||||||
|
|
|
@ -28,8 +28,8 @@ par_few_duplicate_run() {
|
||||||
wait
|
wait
|
||||||
) | wc -l)
|
) | wc -l)
|
||||||
sql "$1" "drop table $TABLE;"
|
sql "$1" "drop table $TABLE;"
|
||||||
if [ $lines -gt 105 ] ; then
|
if [ $lines -gt 110 ] ; then
|
||||||
echo Error: $lines are more than 5% duplicates
|
echo Error: $lines are more than 10% duplicates
|
||||||
else
|
else
|
||||||
echo OK
|
echo OK
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -60,6 +60,8 @@ par_pipe_unneeded_spawn() {
|
||||||
|
|
||||||
par_files_nonall() {
|
par_files_nonall() {
|
||||||
echo '### bug #40002: --files and --nonall seem not to work together:'
|
echo '### bug #40002: --files and --nonall seem not to work together:'
|
||||||
|
# --files does not work with TMPDIR containing \n
|
||||||
|
TMPDIR=/tmp
|
||||||
parallel --files --nonall -S localhost true | tee >(parallel rm) | wc -l
|
parallel --files --nonall -S localhost true | tee >(parallel rm) | wc -l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,9 +109,9 @@ par_bigvar_rc() {
|
||||||
par_tmux_different_shells() {
|
par_tmux_different_shells() {
|
||||||
echo '### Test tmux works on different shells'
|
echo '### Test tmux works on different shells'
|
||||||
(stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux echo ::: 1 2 3 4; echo $?) |
|
(stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux echo ::: 1 2 3 4; echo $?) |
|
||||||
grep -v 'See output';
|
grep -v 'attach';
|
||||||
(stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?) |
|
(stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?) |
|
||||||
grep -v 'See output';
|
grep -v 'attach';
|
||||||
|
|
||||||
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
|
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" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output';
|
||||||
|
@ -128,16 +128,16 @@ par_tmux_different_shells() {
|
||||||
par_tmux_length() {
|
par_tmux_length() {
|
||||||
echo '### works'
|
echo '### works'
|
||||||
stdout parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ |
|
stdout parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ |
|
||||||
perl -pe 's:/tmp/\S+::'
|
perl -pe 's:/tmp/.*tms.....::'
|
||||||
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
|
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
|
||||||
perl -pe 's:/tmp/\S+::'
|
perl -pe 's:/tmp/.*tms.....::'
|
||||||
|
|
||||||
echo '### These blocked due to length'
|
echo '### These blocked due to length'
|
||||||
stdout parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
stdout parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
|
||||||
stdout parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
stdout parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
|
||||||
stdout parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
stdout parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
|
||||||
stdout parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'See output'
|
stdout parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
|
||||||
stdout parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111 | grep -v 'See output'
|
stdout parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111 | grep -v 'attach'
|
||||||
}
|
}
|
||||||
|
|
||||||
par_transfer_return_multiple_inputs() {
|
par_transfer_return_multiple_inputs() {
|
||||||
|
|
|
@ -1,11 +1,29 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2021-2022 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
|
# SPDX-FileCopyrightText: 2021-2023 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SSH only allowed to localhost/lo
|
# SSH only allowed to localhost/lo
|
||||||
|
|
||||||
|
|
||||||
|
par_ssh_cmd_with_newline() {
|
||||||
|
echo '### Check --ssh with \n works'
|
||||||
|
ssh=$(mktemp)
|
||||||
|
cp -a /usr/bin/ssh "$ssh"
|
||||||
|
parallel --ssh "'$ssh'" -S sh@lo ::: id
|
||||||
|
}
|
||||||
|
|
||||||
|
par_controlmaster() {
|
||||||
|
echo '### Check -M works if TMPDIR contains space'
|
||||||
|
(
|
||||||
|
seq 1 3 | parallel -j10 --retries 3 -k -M -S sh@lo echo
|
||||||
|
seq 1 3 | parallel -j10 --retries 3 -k -M -S sh@lo echo
|
||||||
|
)
|
||||||
|
echo Part2
|
||||||
|
parallel -j1 -k -M -S sh@lo echo ::: OK
|
||||||
|
}
|
||||||
|
|
||||||
par_autossh() {
|
par_autossh() {
|
||||||
echo '### --ssh autossh'
|
echo '### --ssh autossh'
|
||||||
(
|
(
|
||||||
|
|
|
@ -5,6 +5,12 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
echo '### Test with old perl libs'
|
echo '### Test with old perl libs'
|
||||||
|
|
||||||
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
cd "$testsuitedir"
|
||||||
|
|
||||||
# Old libraries are put into input-files/perllib
|
# Old libraries are put into input-files/perllib
|
||||||
PERL5LIB=input-files/perllib:../input-files/perllib; export PERL5LIB
|
PERL5LIB=input-files/perllib:../input-files/perllib; export PERL5LIB
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,15 @@
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
rm -rf tmp 2>/dev/null
|
rm -rf tmp 2>/dev/null
|
||||||
cd input-files
|
(
|
||||||
|
cd "$testsuitedir"/input-files
|
||||||
tar xjf random_dirs_no_newline.tar.bz2
|
tar xjf random_dirs_no_newline.tar.bz2
|
||||||
cd ..
|
)
|
||||||
cp -a input-files/random_dirs_no_newline tmp
|
cp -a "$testsuitedir"/input-files/random_dirs_no_newline tmp
|
||||||
cd tmp
|
cd tmp
|
||||||
|
|
||||||
echo '### Tests if special dir names causes problems'
|
echo '### Tests if special dir names causes problems'
|
||||||
|
|
|
@ -7,8 +7,10 @@
|
||||||
TMP=/run/shm/parallel_local105
|
TMP=/run/shm/parallel_local105
|
||||||
rm -rf $TMP 2>/dev/null
|
rm -rf $TMP 2>/dev/null
|
||||||
mkdir -p $TMP
|
mkdir -p $TMP
|
||||||
tar -C $TMP -xf input-files/random_dirs_with_newline.tar.bz2
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
tar -C $TMP -xf "$testsuitedir"/input-files/random_dirs_with_newline.tar.bz2
|
||||||
cd $TMP/random_dirs_with_newline
|
cd $TMP/random_dirs_with_newline
|
||||||
|
|
||||||
# tests if special dir names causes problems
|
# tests if special dir names causes problems
|
||||||
|
|
|
@ -6,7 +6,11 @@
|
||||||
|
|
||||||
echo '### Tests from xargs'
|
echo '### Tests from xargs'
|
||||||
|
|
||||||
rsync -Ha --delete input-files/xargs-inputs/ tmp/
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
|
||||||
|
rsync -Ha --delete "$testsuitedir"/input-files/xargs-inputs/ tmp/
|
||||||
cd tmp
|
cd tmp
|
||||||
|
|
||||||
PARALLEL=-j8
|
PARALLEL=-j8
|
||||||
|
|
|
@ -6,10 +6,12 @@
|
||||||
|
|
||||||
TMP=/run/shm/parallel_$$
|
TMP=/run/shm/parallel_$$
|
||||||
|
|
||||||
pwd=`pwd`
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
mkdir -p $TMP
|
mkdir -p $TMP
|
||||||
cd $TMP/
|
cd $TMP/
|
||||||
tar xjf "$pwd"/input-files/testdir.tar.bz2
|
tar xjf "$testsuitedir"/input-files/testdir.tar.bz2
|
||||||
|
|
||||||
echo echo test of cat pipe sh | parallel -j 50 2>&1
|
echo echo test of cat pipe sh | parallel -j 50 2>&1
|
||||||
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/}
|
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {//}/thumb_{/}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
mkdir -p tmp
|
||||||
cd tmp
|
cd tmp
|
||||||
|
|
||||||
median() { perl -e '@a=sort {$a<=>$b} <>;print $a[$#a/2]';}
|
median() { perl -e '@a=sort {$a<=>$b} <>;print $a[$#a/2]';}
|
||||||
|
|
|
@ -6,14 +6,15 @@
|
||||||
|
|
||||||
cpuburn=$(mktemp)
|
cpuburn=$(mktemp)
|
||||||
(echo '#!/usr/bin/perl'
|
(echo '#!/usr/bin/perl'
|
||||||
echo "eval{setpriority(0,0,9)}; while(1){}") > $cpuburn
|
echo "eval{setpriority(0,0,9)}; while(1){}") > "$cpuburn"
|
||||||
chmod 700 $cpuburn
|
chmod 700 "$cpuburn"
|
||||||
|
basename=$(basename "$cpuburn")
|
||||||
|
|
||||||
forceload () {
|
forceload () {
|
||||||
# Force load
|
# Force load
|
||||||
LOAD=$1
|
LOAD=$1
|
||||||
# Start 10 times as many cpuburn
|
# Start 10 times as many cpuburn
|
||||||
seq 0 0.1 $1 | parallel -j0 timeout 20 $cpuburn 2>/dev/null &
|
seq 0 0.1 $1 | parallel -j0 timeout 20 "'$cpuburn'" 2>/dev/null &
|
||||||
PID=$!
|
PID=$!
|
||||||
# Give GNU Parallel 1 second to startup
|
# Give GNU Parallel 1 second to startup
|
||||||
sleep 1
|
sleep 1
|
||||||
|
@ -37,15 +38,15 @@ echo '### Test slow arguments generation - https://savannah.gnu.org/bugs/?32834'
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Make sure we got all the cpuburn killed
|
# Make sure we got all the cpuburn killed
|
||||||
killall $(basename $cpuburn) 2>/dev/null
|
killall "$basename" 2>/dev/null
|
||||||
|
|
||||||
echo '### Test too slow spawning'
|
echo '### Test too slow spawning'
|
||||||
# Let the commands below run during high load
|
# Let the commands below run during high load
|
||||||
seq 1000 | timeout 20 parallel -j400% -N0 $cpuburn 2>/dev/null &
|
seq 1000 | timeout 20 parallel -j400% -N0 "'$cpuburn'" 2>/dev/null &
|
||||||
PID=$!
|
PID=$!
|
||||||
seq 1 1000 | stdout nice nice parallel --halt 1 -uj0 -N0 kill $PID |
|
seq 1 1000 | stdout nice nice parallel --halt 1 -uj0 -N0 kill $PID |
|
||||||
perl -pe '/parallel: Warning: Starting \d+ processes took/ and do {close STDIN; `kill '$PID';killall '$(basename $cpuburn)'`; print "OK\n"; exit }';
|
perl -pe '/parallel: Warning: Starting \d+ processes took/ and do {close STDIN; `kill '$PID';killall "$basename"`; print "OK\n"; exit }';
|
||||||
|
|
||||||
# Make sure we got all the cpuburn killed
|
# Make sure we got all the cpuburn killed
|
||||||
killall $(basename $cpuburn) 2>/dev/null
|
killall "$basename" 2>/dev/null
|
||||||
rm $cpuburn
|
rm "$cpuburn"
|
||||||
|
|
|
@ -52,8 +52,8 @@ echo '### bug #42041: Implement $PARALLEL_JOBSLOT'
|
||||||
|
|
||||||
echo '### bug #42363: --pipepart and --fifo/--cat does not work'
|
echo '### bug #42363: --pipepart and --fifo/--cat does not work'
|
||||||
seq 100 > /tmp/bug42363;
|
seq 100 > /tmp/bug42363;
|
||||||
parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp\S+par).....:${1}XXXXX:';
|
parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:';
|
||||||
parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp\S+par).....:${1}XXXXX:';
|
parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:';
|
||||||
rm /tmp/bug42363
|
rm /tmp/bug42363
|
||||||
|
|
||||||
echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile'
|
echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile'
|
||||||
|
|
|
@ -103,17 +103,17 @@ echo '### Race condition bug - 2 - would block';
|
||||||
seq 1 100 | nice parallel -j100 --block 1 --recend "" --pipe cat >/dev/null
|
seq 1 100 | nice parallel -j100 --block 1 --recend "" --pipe cat >/dev/null
|
||||||
|
|
||||||
echo '### Test --block size=1';
|
echo '### Test --block size=1';
|
||||||
seq 1 10| parallel --block 1 --files --recend "" --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {}
|
seq 1 10| TMPDIR=/tmp parallel --block 1 --files --recend "" --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {}
|
||||||
|
|
||||||
echo '### Test --block size=1M -j10 --files - more jobs than data';
|
echo '### Test --block size=1M -j10 --files - more jobs than data';
|
||||||
sort -n < /tmp/blocktest | md5sum;
|
sort -n < /tmp/blocktest | md5sum;
|
||||||
cat /tmp/blocktest | parallel --files --recend "\n" -j10 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
cat /tmp/blocktest | TMPDIR=/tmp parallel --files --recend "\n" -j10 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
|
|
||||||
echo '### Test --block size=1M -j1 - more data than cpu';
|
echo '### Test --block size=1M -j1 - more data than cpu';
|
||||||
cat /tmp/blocktest | parallel --files --recend "\n" -j1 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
cat /tmp/blocktest | TMPDIR=/tmp parallel --files --recend "\n" -j1 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
|
|
||||||
echo '### Test --block size=1M -j1 - more data than cpu';
|
echo '### Test --block size=1M -j1 - more data than cpu';
|
||||||
cat /tmp/blocktest | parallel --files --recend "\n" -j2 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
cat /tmp/blocktest | TMPDIR=/tmp parallel --files --recend "\n" -j2 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
|
|
||||||
echo '### Test --pipe default settings';
|
echo '### Test --pipe default settings';
|
||||||
cat /tmp/blocktest | parallel --pipe sort | sort -n | md5sum
|
cat /tmp/blocktest | parallel --pipe sort | sort -n | md5sum
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
par_tmux_filter() {
|
par_tmux_filter() {
|
||||||
# /tmp/parallel-local7/tmsOU2Ig
|
# /tmp/parallel-local7/tmsOU2Ig
|
||||||
perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;s/ p\d+/pID/;'
|
perl -pe 's:(/tmp.*/tms).....:$1XXXXX:;s/ p\d+/pID/;'
|
||||||
}
|
}
|
||||||
export -f par_tmux_filter
|
export -f par_tmux_filter
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,9 @@ echo '### Test --spreadstdin - this failed during devel';
|
||||||
echo '### Test --spreadstdin -k';
|
echo '### Test --spreadstdin -k';
|
||||||
nice seq 1 1000000 | $NICEPAR -k --recend "\n" -j10 --spreadstdin gzip -9 | zcat | md5sum
|
nice seq 1 1000000 | $NICEPAR -k --recend "\n" -j10 --spreadstdin gzip -9 | zcat | md5sum
|
||||||
|
|
||||||
|
# --files requires TMPDIR does not contain \n
|
||||||
echo '### Test --spreadstdin --files';
|
echo '### Test --spreadstdin --files';
|
||||||
nice seq 1 1000000 | shuf | $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
nice seq 1 1000000 | shuf | TMPDIR=/tmp $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
|
|
||||||
echo '### Test --tag ::: a ::: b';
|
echo '### Test --tag ::: a ::: b';
|
||||||
stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b
|
stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b
|
||||||
|
|
|
@ -51,6 +51,7 @@ par_filter_hosts_no_ssh_nxserver() {
|
||||||
par_controlmaster_is_faster() {
|
par_controlmaster_is_faster() {
|
||||||
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
|
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
|
||||||
echo '-M should finish first - eventhough there are 2x jobs'
|
echo '-M should finish first - eventhough there are 2x jobs'
|
||||||
|
export SSHLOGIN1=sh@lo
|
||||||
(parallel -S $SSHLOGIN1 true ::: {1..20};
|
(parallel -S $SSHLOGIN1 true ::: {1..20};
|
||||||
echo No --controlmaster - finish last) &
|
echo No --controlmaster - finish last) &
|
||||||
(parallel -M -S $SSHLOGIN1 true ::: {1..40};
|
(parallel -M -S $SSHLOGIN1 true ::: {1..40};
|
||||||
|
|
|
@ -3,21 +3,24 @@
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | parallel rm
|
cleanup() {
|
||||||
cd testsuite 2>/dev/null
|
find {"$TMPDIR",/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 -print0 2>/dev/null |
|
||||||
rm -rf tmp
|
parallel -0 rm 2>/dev/null
|
||||||
mkdir tmp
|
}
|
||||||
cd tmp
|
|
||||||
|
cleanup
|
||||||
touch ~/.parallel/will-cite
|
touch ~/.parallel/will-cite
|
||||||
echo '### test parallel_tutorial'
|
echo '### test parallel_tutorial'
|
||||||
rm -f /tmp/runs
|
|
||||||
|
|
||||||
srcdir=$(pwd | perl -pe 's=$ENV{HOME}==')
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
srcdir=$(echo "$testsuitedir" | perl -pe 's=$ENV{HOME}==')
|
||||||
|
|
||||||
export SERVER1=parallel@lo
|
export SERVER1=parallel@lo
|
||||||
export SERVER2=csh@lo
|
export SERVER2=csh@lo
|
||||||
export PARALLEL=-k
|
export PARALLEL=-k
|
||||||
perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/parallel_tutorial.pod |
|
perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' "$testsuitedir"/../src/parallel_tutorial.pod |
|
||||||
egrep -v 'curl|tty|parallel_tutorial|interactive|example.(com|net)|shellquote|works' |
|
egrep -v 'curl|tty|parallel_tutorial|interactive|example.(com|net)|shellquote|works' |
|
||||||
perl -pe 's/username@//;s/user@//;
|
perl -pe 's/username@//;s/user@//;
|
||||||
s/zenity/zenity --timeout=15/;
|
s/zenity/zenity --timeout=15/;
|
||||||
|
@ -101,9 +104,14 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/
|
||||||
s/doi.*=.*//;
|
s/doi.*=.*//;
|
||||||
s/url.*= .*doi.org.*//;
|
s/url.*= .*doi.org.*//;
|
||||||
s/.Feel free to use .nocite.*//;
|
s/.Feel free to use .nocite.*//;
|
||||||
|
# tmpdir and files
|
||||||
s:/tmp/parallel-tutorial-tmpdir/par-job-\S+:script:g;
|
s:/tmp/parallel-tutorial-tmpdir/par-job-\S+:script:g;
|
||||||
s:/tmp/par-job-\S+:script:g;
|
s:/tmp/par-job-\S+:script:g;
|
||||||
|
s:par......par:tempfile:g;
|
||||||
|
s:^tempfile\n::g;
|
||||||
' | uniq
|
' | uniq
|
||||||
# 3+3 .par files (from --files), 1 .tms-file from tmux attach
|
|
||||||
find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | wc -l
|
echo "### 3+3 .par files (from --files), 1 .tms-file from tmux attach"
|
||||||
find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | parallel rm
|
find {"$TMPDIR",/var/tmp}/{fif,tms,par[^a]}* -mmin -10 -type f -print0 2>/dev/null |
|
||||||
|
parallel -0 grep . | sort
|
||||||
|
cleanup
|
||||||
|
|
|
@ -7,6 +7,10 @@
|
||||||
start_centos3() {
|
start_centos3() {
|
||||||
stdout ping -w 1 -c 1 centos3 >/dev/null || (
|
stdout ping -w 1 -c 1 centos3 >/dev/null || (
|
||||||
# Vagrant does not set the IP addr
|
# Vagrant does not set the IP addr
|
||||||
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
cd "$testsuitedir"
|
||||||
cd testsuite/vagrant/tange/centos3/ 2>/dev/null
|
cd testsuite/vagrant/tange/centos3/ 2>/dev/null
|
||||||
cd vagrant/tange/centos3/ 2>/dev/null
|
cd vagrant/tange/centos3/ 2>/dev/null
|
||||||
cd ../vagrant/tange/centos3/ 2>/dev/null
|
cd ../vagrant/tange/centos3/ 2>/dev/null
|
||||||
|
@ -55,6 +59,10 @@ compgen -A function | grep par_ | LC_ALL=C sort |
|
||||||
perl -pe 's:/usr/bin:/bin:g;'
|
perl -pe 's:/usr/bin:/bin:g;'
|
||||||
|
|
||||||
(
|
(
|
||||||
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
cd "$testsuitedir"
|
||||||
cd vagrant/tange/centos3/
|
cd vagrant/tange/centos3/
|
||||||
stdout vagrant suspend |
|
stdout vagrant suspend |
|
||||||
grep -v '==> default: Saving VM state' |
|
grep -v '==> default: Saving VM state' |
|
||||||
|
|
|
@ -9,12 +9,12 @@ par_stdin() {
|
||||||
seq 10 | parallel --semaphore --id stdin wc
|
seq 10 | parallel --semaphore --id stdin wc
|
||||||
seq 10 | parallel --semaphore --id stdin --fg wc
|
seq 10 | parallel --semaphore --id stdin --fg wc
|
||||||
tmp=$(mktemp)
|
tmp=$(mktemp)
|
||||||
seq 10 > $tmp
|
seq 10 > "$tmp"
|
||||||
parallel -a $tmp --semaphore --id stdin wc
|
parallel -a "$tmp" --semaphore --id stdin wc
|
||||||
parallel -a $tmp --semaphore --id stdin --fg wc
|
parallel -a "$tmp" --semaphore --id stdin --fg wc
|
||||||
parallel --semaphore --id stdin --wait
|
parallel --semaphore --id stdin --wait
|
||||||
# Should fail: More files are not supported
|
# Should fail: More files are not supported
|
||||||
parallel -a $tmp -a $tmp --semaphore --id stdin --fg wc
|
parallel -a "$tmp" -a "$tmp" --semaphore --id stdin --fg wc
|
||||||
}
|
}
|
||||||
|
|
||||||
par_mutex() {
|
par_mutex() {
|
||||||
|
|
|
@ -64,16 +64,18 @@ echo "### Test sql:sql::alias"
|
||||||
sql sql:sql::sqlunittest "SELECT 'Yes it works' as 'Test sql:sql::alias';"
|
sql sql:sql::sqlunittest "SELECT 'Yes it works' as 'Test sql:sql::alias';"
|
||||||
|
|
||||||
echo "### Test --noheaders --no-headers -n"
|
echo "### Test --noheaders --no-headers -n"
|
||||||
sql -n :sqlunittest 'select * from unittest order by id' \
|
sql -n :sqlunittest 'select * from unittest order by id' |
|
||||||
| parallel -k --colsep '\t' echo {2} {1}
|
parallel -k --colsep '\t' echo {2} {1}
|
||||||
sql --noheaders :sqlunittest 'select * from unittest order by id' \
|
sql --noheaders :sqlunittest 'select * from unittest order by id' |
|
||||||
| parallel -k --colsep '\t' echo {2} {1}
|
parallel -k --colsep '\t' echo {2} {1}
|
||||||
sql --no-headers :sqlunittest 'select * from unittest order by id' \
|
sql --no-headers :sqlunittest 'select * from unittest order by id' |
|
||||||
| parallel -k --colsep '\t' echo {2} {1}
|
parallel -k --colsep '\t' echo {2} {1}
|
||||||
|
|
||||||
echo "### Test --sep -s";
|
echo "### Test --sep -s";
|
||||||
sql --no-headers -s : pg:/// 'select 1,2' | parallel --colsep ':' echo {2} {1}
|
sql --no-headers -s : pg:/// 'select 1,2' |
|
||||||
sql --no-headers --sep : pg:/// 'select 1,2' | parallel --colsep ':' echo {2} {1}
|
parallel --colsep ':' echo {2} {1}
|
||||||
|
sql --no-headers --sep : pg:/// 'select 1,2' |
|
||||||
|
parallel --colsep ':' echo {2} {1}
|
||||||
|
|
||||||
echo "### Test --passthrough -p";
|
echo "### Test --passthrough -p";
|
||||||
sql -p -H :sqlunittest 'select * from unittest'
|
sql -p -H :sqlunittest 'select * from unittest'
|
||||||
|
@ -101,7 +103,7 @@ sql --table-size :sqlunittest | wc -l
|
||||||
|
|
||||||
echo "### Test --debug"
|
echo "### Test --debug"
|
||||||
sql --debug :sqlunittest "SELECT 'Yes it does' as 'Test if --debug works';" |
|
sql --debug :sqlunittest "SELECT 'Yes it does' as 'Test if --debug works';" |
|
||||||
perl -pe 's:/tmp/sql01-tmpdir/...........sql:tmpfile:g'
|
perl -pe 's:/tmp/...........sql:tmpfile:g'
|
||||||
|
|
||||||
echo "### Test --version -V"
|
echo "### Test --version -V"
|
||||||
sql --version | wc
|
sql --version | wc
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
par_sqlite() {
|
par_sqlite() {
|
||||||
tmp=$(mktemp -d)
|
tmp=$(mktemp -d)
|
||||||
cd $tmp
|
cd "$tmp"
|
||||||
echo '### Test of sqlite'
|
echo '### Test of sqlite'
|
||||||
for CMDSQL in sqlite sqlite3 ; do
|
for CMDSQL in sqlite sqlite3 ; do
|
||||||
echo "Current command: $CMDSQL"
|
echo "Current command: $CMDSQL"
|
||||||
|
|
|
@ -10,7 +10,11 @@ SSHLOGIN1=$SSHUSER1@$SERVER1
|
||||||
|
|
||||||
mkdir -p tmp
|
mkdir -p tmp
|
||||||
cd tmp
|
cd tmp
|
||||||
tar xjf ../input-files/testdir.tar.bz2
|
pwd=$(pwd)
|
||||||
|
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
|
||||||
|
testsuitedir=${testsuitedir:-$pwd}
|
||||||
|
|
||||||
|
tar xjf "$testsuitedir"/input-files/testdir.tar.bz2
|
||||||
#rsync -Ha --delete input-files/testdir/ tmp/
|
#rsync -Ha --delete input-files/testdir/ tmp/
|
||||||
#cd tmp
|
#cd tmp
|
||||||
|
|
||||||
|
|
|
@ -319,7 +319,7 @@ par_l0_is_l1 ### Because of --tollef -l, then -l0 == -l1, sorry
|
||||||
par_l0_is_l1 l0 1
|
par_l0_is_l1 l0 1
|
||||||
par_l0_is_l1 l0 2
|
par_l0_is_l1 l0 2
|
||||||
par_linebuffer_files ### bug #48658: --linebuffer --files
|
par_linebuffer_files ### bug #48658: --linebuffer --files
|
||||||
par_linebuffer_files 10
|
par_linebuffer_files 20
|
||||||
par_link_files_as_only_arg bug #50685: single ::::+ does not work
|
par_link_files_as_only_arg bug #50685: single ::::+ does not work
|
||||||
par_link_files_as_only_arg 1 1 1
|
par_link_files_as_only_arg 1 1 1
|
||||||
par_link_files_as_only_arg 2 2 2
|
par_link_files_as_only_arg 2 2 2
|
||||||
|
@ -692,7 +692,8 @@ par_pipe_tag_v foo cat
|
||||||
par_pipe_tag_v foo 1
|
par_pipe_tag_v foo 1
|
||||||
par_pipe_tag_v foo 2
|
par_pipe_tag_v foo 2
|
||||||
par_pipe_tag_v foo 3
|
par_pipe_tag_v foo 3
|
||||||
par_pipe_tag_v foo /tmp/tmpfile.par
|
par_pipe_tag_v foo /tmp/parallel-local-0.3s-tmp/
|
||||||
|
par_pipe_tag_v </tmp/tmpfile.par
|
||||||
par_pipe_to_func ### bug #45998: --pipe to function broken
|
par_pipe_to_func ### bug #45998: --pipe to function broken
|
||||||
par_pipe_to_func 1
|
par_pipe_to_func 1
|
||||||
par_pipe_to_func pipefunc OK
|
par_pipe_to_func pipefunc OK
|
||||||
|
@ -1355,19 +1356,25 @@ par_version 11
|
||||||
par_wd_3dot_local bug #45993: --wd ... should also work when run locally
|
par_wd_3dot_local bug #45993: --wd ... should also work when run locally
|
||||||
par_wd_3dot_local parallel: Error: Cannot change into non-executable dir /bi: No such file or directory
|
par_wd_3dot_local parallel: Error: Cannot change into non-executable dir /bi: No such file or directory
|
||||||
par_wd_3dot_local /bin
|
par_wd_3dot_local /bin
|
||||||
par_wd_3dot_local ~/privat/parallel/testsuite
|
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
|
||||||
|
par_wd_3dot_local </tmp
|
||||||
par_wd_3dot_local OK
|
par_wd_3dot_local OK
|
||||||
par_wd_3dot_local /
|
par_wd_3dot_local /
|
||||||
par_wd_3dot_local ~/privat/parallel/testsuite
|
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
|
||||||
|
par_wd_3dot_local </tmp
|
||||||
par_wd_3dot_local OK
|
par_wd_3dot_local OK
|
||||||
par_wd_3dot_local /tmp
|
par_wd_3dot_local /tmp
|
||||||
par_wd_3dot_local ~/privat/parallel/testsuite
|
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
|
||||||
|
par_wd_3dot_local </tmp
|
||||||
par_wd_3dot_local OK
|
par_wd_3dot_local OK
|
||||||
par_wd_3dot_local ~/.parallel/tmp/hostname-0-0
|
par_wd_3dot_local ~/.parallel/tmp/hostname-0-0
|
||||||
par_wd_3dot_local ~/privat/parallel/testsuite
|
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
|
||||||
|
par_wd_3dot_local </tmp
|
||||||
par_wd_3dot_local OK
|
par_wd_3dot_local OK
|
||||||
par_wd_3dot_local ~/privat/parallel/testsuite
|
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
|
||||||
par_wd_3dot_local ~/privat/parallel/testsuite
|
par_wd_3dot_local </tmp
|
||||||
|
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
|
||||||
|
par_wd_3dot_local </tmp
|
||||||
par_wd_3dot_local OK
|
par_wd_3dot_local OK
|
||||||
par_wd_dotdotdot ### parallel --wd ... should clean up
|
par_wd_dotdotdot ### parallel --wd ... should clean up
|
||||||
par_wd_dotdotdot 1 == 1
|
par_wd_dotdotdot 1 == 1
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -126,13 +126,18 @@ par_eof_on_command_line_input_source foo
|
||||||
par_file_rpl ### file as replacement string
|
par_file_rpl ### file as replacement string
|
||||||
par_file_rpl contest1
|
par_file_rpl contest1
|
||||||
par_file_rpl contest2
|
par_file_rpl contest2
|
||||||
par_file_rpl File name /tmp/parallel-local-1s-tmpdir/tmp.XXXXXX
|
par_file_rpl File name /tmp/parallel-local-1s-tmp/
|
||||||
|
par_file_rpl </tmp/tmp.XXXXXX
|
||||||
par_file_rpl contest1
|
par_file_rpl contest1
|
||||||
par_file_rpl contest2
|
par_file_rpl contest2
|
||||||
par_file_rpl File name /parallel-local-1s-tmpdir/tmp.XXXXXX/parallel-local-1s-tmpdir/tmp.XXXXXX
|
par_file_rpl File name /parallel-local-1s-tmp/
|
||||||
|
par_file_rpl </tmp/tmp.XXXXXX/parallel-local-1s-tmp/
|
||||||
|
par_file_rpl </parallel-local-1s-tmp/
|
||||||
|
par_file_rpl </tmp/tmp.XXXXXX/tmp.XXXXXX
|
||||||
par_file_rpl contest1
|
par_file_rpl contest1
|
||||||
par_file_rpl contest2
|
par_file_rpl contest2
|
||||||
par_file_rpl File name /tmp/parallel-local-1s-tmpdir/tmp.XXXXXX
|
par_file_rpl File name /tmp/parallel-local-1s-tmp/
|
||||||
|
par_file_rpl </tmp/tmp.XXXXXX
|
||||||
par_file_rpl 1
|
par_file_rpl 1
|
||||||
par_file_rpl 1
|
par_file_rpl 1
|
||||||
par_file_rpl 2
|
par_file_rpl 2
|
||||||
|
@ -487,7 +492,8 @@ par_profiles_with_space ### bug #42902: profiles containing arguments with space
|
||||||
par_profiles_with_space /bin/bash=/bin/bash
|
par_profiles_with_space /bin/bash=/bin/bash
|
||||||
par_profiles_with_space echo '/bin/bash=/bin/bash'
|
par_profiles_with_space echo '/bin/bash=/bin/bash'
|
||||||
par_profiles_with_space /bin/bash=/bin/bash
|
par_profiles_with_space /bin/bash=/bin/bash
|
||||||
par_profiles_with_space With script in $PARALLEL /bin/bash=~/privat/parallel/testsuite
|
par_profiles_with_space With script in $PARALLEL /bin/bash=/tmp/parallel-local-1s-tmp/
|
||||||
|
par_profiles_with_space </tmp
|
||||||
par_pxz_complains bug #44250: pxz complains File format not recognized but decompresses anyway
|
par_pxz_complains bug #44250: pxz complains File format not recognized but decompresses anyway
|
||||||
par_pxz_complains ls: cannot access '/OK-if-missing-file': No such file or directory
|
par_pxz_complains ls: cannot access '/OK-if-missing-file': No such file or directory
|
||||||
par_pxz_complains can not seek in input: Illegal seek
|
par_pxz_complains can not seek in input: Illegal seek
|
||||||
|
|
|
@ -646,15 +646,15 @@ par_shebang pl C
|
||||||
par_shebang py A
|
par_shebang py A
|
||||||
par_shebang py B
|
par_shebang py B
|
||||||
par_shebang py C
|
par_shebang py C
|
||||||
par_shebang r [1] "A"
|
|
||||||
par_shebang r [1] "B"
|
|
||||||
par_shebang r [1] "C"
|
|
||||||
par_shebang rb ["A"]
|
par_shebang rb ["A"]
|
||||||
par_shebang rb ["B"]
|
par_shebang rb ["B"]
|
||||||
par_shebang rb ["C"]
|
par_shebang rb ["C"]
|
||||||
par_shebang sh A
|
par_shebang sh A
|
||||||
par_shebang sh B
|
par_shebang sh B
|
||||||
par_shebang sh C
|
par_shebang sh C
|
||||||
|
par_shebang r [1] "A"
|
||||||
|
par_shebang r [1] "B"
|
||||||
|
par_shebang r [1] "C"
|
||||||
par_show_limits ### Test --show-limits
|
par_show_limits ### Test --show-limits
|
||||||
par_show_limits Maximal size of command: 130xxx
|
par_show_limits Maximal size of command: 130xxx
|
||||||
par_show_limits Maximal usable size of command: 63xxx
|
par_show_limits Maximal usable size of command: 63xxx
|
||||||
|
|
|
@ -96,4 +96,5 @@ par_print_before_halt_on_error 2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR
|
||||||
par_sem_dir ### bug #58985: sem stall if .parallel/semaphores is chmod 0
|
par_sem_dir ### bug #58985: sem stall if .parallel/semaphores is chmod 0
|
||||||
par_sem_dir parallel: Error: Semaphoredir must be writable: '~/.parallel/semaphores'
|
par_sem_dir parallel: Error: Semaphoredir must be writable: '~/.parallel/semaphores'
|
||||||
par_tmux_termination ### --tmux test - check termination
|
par_tmux_termination ### --tmux test - check termination
|
||||||
par_tmux_termination See output with: tmux -S /tmp/parallel-local-race01-tmpdir/tmsXXXXX attach
|
par_tmux_termination See output with: tmux -S '/tmp/parallel-local-race01-tmp/
|
||||||
|
par_tmux_termination </tmp/tmsXXXXX' attach
|
||||||
|
|
|
@ -43,12 +43,6 @@ par_continuous_output 1
|
||||||
par_continuous_output 1
|
par_continuous_output 1
|
||||||
par_hostgroup ### --hostgroup force ncpu
|
par_hostgroup ### --hostgroup force ncpu
|
||||||
par_hostgroup parallel
|
par_hostgroup parallel
|
||||||
par_hostgroup parallel
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
par_hostgroup tange
|
||||||
par_hostgroup ### --hostgroup two group arg
|
par_hostgroup ### --hostgroup two group arg
|
||||||
par_hostgroup parallel
|
par_hostgroup parallel
|
||||||
|
@ -70,12 +64,6 @@ par_hostgroup tange
|
||||||
par_hostgroup tange
|
par_hostgroup tange
|
||||||
par_hostgroup ### --hostgroup multiple group arg + unused group
|
par_hostgroup ### --hostgroup multiple group arg + unused group
|
||||||
par_hostgroup parallel
|
par_hostgroup parallel
|
||||||
par_hostgroup parallel
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
par_hostgroup tange
|
||||||
par_hostgroup ### --hostgroup two groups @
|
par_hostgroup ### --hostgroup two groups @
|
||||||
par_hostgroup parallel parallel
|
par_hostgroup parallel parallel
|
||||||
|
@ -91,10 +79,6 @@ par_hostgroup no_group
|
||||||
par_hostgroup implicit_group
|
par_hostgroup implicit_group
|
||||||
par_hostgroup ### --hostgroup -S @group
|
par_hostgroup ### --hostgroup -S @group
|
||||||
par_hostgroup tange
|
par_hostgroup tange
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tange
|
|
||||||
par_hostgroup tcsh
|
|
||||||
par_hostgroup tcsh
|
|
||||||
par_hostgroup tcsh
|
par_hostgroup tcsh
|
||||||
par_hostgroup ### --hostgroup -S @group1 -Sgrp2
|
par_hostgroup ### --hostgroup -S @group1 -Sgrp2
|
||||||
par_hostgroup parallel
|
par_hostgroup parallel
|
||||||
|
@ -163,6 +147,14 @@ par_retries_bug_from_2010 4
|
||||||
par_retries_bug_from_2010 4
|
par_retries_bug_from_2010 4
|
||||||
par_retries_bug_from_2010 4
|
par_retries_bug_from_2010 4
|
||||||
par_retries_bug_from_2010 2
|
par_retries_bug_from_2010 2
|
||||||
|
par_semaphore ### Test if parallel invoked as sem will run parallel --semaphore
|
||||||
|
par_semaphore job1a 1
|
||||||
|
par_semaphore job2a 2
|
||||||
|
par_semaphore job1b 3
|
||||||
|
par_semaphore job3a 4
|
||||||
|
par_semaphore job2b 5
|
||||||
|
par_semaphore job3b 6
|
||||||
|
par_semaphore done
|
||||||
par_sql_CSV ### CSV write to the right place
|
par_sql_CSV ### CSV write to the right place
|
||||||
par_sql_CSV ran OK
|
par_sql_CSV ran OK
|
||||||
par_sql_CSV ok
|
par_sql_CSV ok
|
||||||
|
|
|
@ -332,31 +332,31 @@ par_shuf $MYSQL OK: Diff bigger than 2500 char
|
||||||
par_shuf $MYSQL Exit=0
|
par_shuf $MYSQL Exit=0
|
||||||
par_shuf $MYSQL Exit=0
|
par_shuf $MYSQL Exit=0
|
||||||
par_shuf $MYSQL Command V1 V2 Stdout Stderr
|
par_shuf $MYSQL Command V1 V2 Stdout Stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 1 a 1 a /tmp/parallel-bug49791-c20/1/1/2/a/stdout /tmp/parallel-bug49791-c20/1/1/2/a/stderr
|
par_shuf $MYSQL sleep .3;echo 1 a 1 a /tmp/parallel-bug49791- <c20/1/1/2/a/stdout /tmp/parallel-bug49791- <c20/1/1/2/a/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 1 b 1 b /tmp/parallel-bug49791-c20/1/1/2/b/stdout /tmp/parallel-bug49791-c20/1/1/2/b/stderr
|
par_shuf $MYSQL sleep .3;echo 1 b 1 b /tmp/parallel-bug49791- <c20/1/1/2/b/stdout /tmp/parallel-bug49791- <c20/1/1/2/b/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 1 c 1 c /tmp/parallel-bug49791-c20/1/1/2/c/stdout /tmp/parallel-bug49791-c20/1/1/2/c/stderr
|
par_shuf $MYSQL sleep .3;echo 1 c 1 c /tmp/parallel-bug49791- <c20/1/1/2/c/stdout /tmp/parallel-bug49791- <c20/1/1/2/c/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 1 d 1 d /tmp/parallel-bug49791-c20/1/1/2/d/stdout /tmp/parallel-bug49791-c20/1/1/2/d/stderr
|
par_shuf $MYSQL sleep .3;echo 1 d 1 d /tmp/parallel-bug49791- <c20/1/1/2/d/stdout /tmp/parallel-bug49791- <c20/1/1/2/d/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 1 e 1 e /tmp/parallel-bug49791-c20/1/1/2/e/stdout /tmp/parallel-bug49791-c20/1/1/2/e/stderr
|
par_shuf $MYSQL sleep .3;echo 1 e 1 e /tmp/parallel-bug49791- <c20/1/1/2/e/stdout /tmp/parallel-bug49791- <c20/1/1/2/e/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 2 a 2 a /tmp/parallel-bug49791-c20/1/2/2/a/stdout /tmp/parallel-bug49791-c20/1/2/2/a/stderr
|
par_shuf $MYSQL sleep .3;echo 2 a 2 a /tmp/parallel-bug49791- <c20/1/2/2/a/stdout /tmp/parallel-bug49791- <c20/1/2/2/a/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 2 b 2 b /tmp/parallel-bug49791-c20/1/2/2/b/stdout /tmp/parallel-bug49791-c20/1/2/2/b/stderr
|
par_shuf $MYSQL sleep .3;echo 2 b 2 b /tmp/parallel-bug49791- <c20/1/2/2/b/stdout /tmp/parallel-bug49791- <c20/1/2/2/b/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 2 c 2 c /tmp/parallel-bug49791-c20/1/2/2/c/stdout /tmp/parallel-bug49791-c20/1/2/2/c/stderr
|
par_shuf $MYSQL sleep .3;echo 2 c 2 c /tmp/parallel-bug49791- <c20/1/2/2/c/stdout /tmp/parallel-bug49791- <c20/1/2/2/c/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 2 d 2 d /tmp/parallel-bug49791-c20/1/2/2/d/stdout /tmp/parallel-bug49791-c20/1/2/2/d/stderr
|
par_shuf $MYSQL sleep .3;echo 2 d 2 d /tmp/parallel-bug49791- <c20/1/2/2/d/stdout /tmp/parallel-bug49791- <c20/1/2/2/d/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 2 e 2 e /tmp/parallel-bug49791-c20/1/2/2/e/stdout /tmp/parallel-bug49791-c20/1/2/2/e/stderr
|
par_shuf $MYSQL sleep .3;echo 2 e 2 e /tmp/parallel-bug49791- <c20/1/2/2/e/stdout /tmp/parallel-bug49791- <c20/1/2/2/e/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 3 a 3 a /tmp/parallel-bug49791-c20/1/3/2/a/stdout /tmp/parallel-bug49791-c20/1/3/2/a/stderr
|
par_shuf $MYSQL sleep .3;echo 3 a 3 a /tmp/parallel-bug49791- <c20/1/3/2/a/stdout /tmp/parallel-bug49791- <c20/1/3/2/a/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 3 b 3 b /tmp/parallel-bug49791-c20/1/3/2/b/stdout /tmp/parallel-bug49791-c20/1/3/2/b/stderr
|
par_shuf $MYSQL sleep .3;echo 3 b 3 b /tmp/parallel-bug49791- <c20/1/3/2/b/stdout /tmp/parallel-bug49791- <c20/1/3/2/b/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 3 c 3 c /tmp/parallel-bug49791-c20/1/3/2/c/stdout /tmp/parallel-bug49791-c20/1/3/2/c/stderr
|
par_shuf $MYSQL sleep .3;echo 3 c 3 c /tmp/parallel-bug49791- <c20/1/3/2/c/stdout /tmp/parallel-bug49791- <c20/1/3/2/c/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 3 d 3 d /tmp/parallel-bug49791-c20/1/3/2/d/stdout /tmp/parallel-bug49791-c20/1/3/2/d/stderr
|
par_shuf $MYSQL sleep .3;echo 3 d 3 d /tmp/parallel-bug49791- <c20/1/3/2/d/stdout /tmp/parallel-bug49791- <c20/1/3/2/d/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 3 e 3 e /tmp/parallel-bug49791-c20/1/3/2/e/stdout /tmp/parallel-bug49791-c20/1/3/2/e/stderr
|
par_shuf $MYSQL sleep .3;echo 3 e 3 e /tmp/parallel-bug49791- <c20/1/3/2/e/stdout /tmp/parallel-bug49791- <c20/1/3/2/e/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 4 a 4 a /tmp/parallel-bug49791-c20/1/4/2/a/stdout /tmp/parallel-bug49791-c20/1/4/2/a/stderr
|
par_shuf $MYSQL sleep .3;echo 4 a 4 a /tmp/parallel-bug49791- <c20/1/4/2/a/stdout /tmp/parallel-bug49791- <c20/1/4/2/a/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 4 b 4 b /tmp/parallel-bug49791-c20/1/4/2/b/stdout /tmp/parallel-bug49791-c20/1/4/2/b/stderr
|
par_shuf $MYSQL sleep .3;echo 4 b 4 b /tmp/parallel-bug49791- <c20/1/4/2/b/stdout /tmp/parallel-bug49791- <c20/1/4/2/b/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 4 c 4 c /tmp/parallel-bug49791-c20/1/4/2/c/stdout /tmp/parallel-bug49791-c20/1/4/2/c/stderr
|
par_shuf $MYSQL sleep .3;echo 4 c 4 c /tmp/parallel-bug49791- <c20/1/4/2/c/stdout /tmp/parallel-bug49791- <c20/1/4/2/c/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 4 d 4 d /tmp/parallel-bug49791-c20/1/4/2/d/stdout /tmp/parallel-bug49791-c20/1/4/2/d/stderr
|
par_shuf $MYSQL sleep .3;echo 4 d 4 d /tmp/parallel-bug49791- <c20/1/4/2/d/stdout /tmp/parallel-bug49791- <c20/1/4/2/d/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 4 e 4 e /tmp/parallel-bug49791-c20/1/4/2/e/stdout /tmp/parallel-bug49791-c20/1/4/2/e/stderr
|
par_shuf $MYSQL sleep .3;echo 4 e 4 e /tmp/parallel-bug49791- <c20/1/4/2/e/stdout /tmp/parallel-bug49791- <c20/1/4/2/e/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 5 a 5 a /tmp/parallel-bug49791-c20/1/5/2/a/stdout /tmp/parallel-bug49791-c20/1/5/2/a/stderr
|
par_shuf $MYSQL sleep .3;echo 5 a 5 a /tmp/parallel-bug49791- <c20/1/5/2/a/stdout /tmp/parallel-bug49791- <c20/1/5/2/a/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 5 b 5 b /tmp/parallel-bug49791-c20/1/5/2/b/stdout /tmp/parallel-bug49791-c20/1/5/2/b/stderr
|
par_shuf $MYSQL sleep .3;echo 5 b 5 b /tmp/parallel-bug49791- <c20/1/5/2/b/stdout /tmp/parallel-bug49791- <c20/1/5/2/b/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 5 c 5 c /tmp/parallel-bug49791-c20/1/5/2/c/stdout /tmp/parallel-bug49791-c20/1/5/2/c/stderr
|
par_shuf $MYSQL sleep .3;echo 5 c 5 c /tmp/parallel-bug49791- <c20/1/5/2/c/stdout /tmp/parallel-bug49791- <c20/1/5/2/c/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 5 d 5 d /tmp/parallel-bug49791-c20/1/5/2/d/stdout /tmp/parallel-bug49791-c20/1/5/2/d/stderr
|
par_shuf $MYSQL sleep .3;echo 5 d 5 d /tmp/parallel-bug49791- <c20/1/5/2/d/stdout /tmp/parallel-bug49791- <c20/1/5/2/d/stderr
|
||||||
par_shuf $MYSQL sleep .3;echo 5 e 5 e /tmp/parallel-bug49791-c20/1/5/2/e/stdout /tmp/parallel-bug49791-c20/1/5/2/e/stderr
|
par_shuf $MYSQL sleep .3;echo 5 e 5 e /tmp/parallel-bug49791- <c20/1/5/2/e/stdout /tmp/parallel-bug49791- <c20/1/5/2/e/stderr
|
||||||
par_shuf $PG p_wrapper par_shuf '$PG'
|
par_shuf $PG p_wrapper par_shuf '$PG'
|
||||||
par_shuf $PG 1 a
|
par_shuf $PG 1 a
|
||||||
par_shuf $PG 1 b
|
par_shuf $PG 1 b
|
||||||
|
@ -387,32 +387,32 @@ par_shuf $PG OK: Diff bigger than 2500 char
|
||||||
par_shuf $PG Exit=0
|
par_shuf $PG Exit=0
|
||||||
par_shuf $PG Exit=0
|
par_shuf $PG Exit=0
|
||||||
par_shuf $PG command | v1 | v2 | stdout | stderr
|
par_shuf $PG command | v1 | v2 | stdout | stderr
|
||||||
par_shuf $PG -------------------+----+----+-------------------------------------------+-------------------------------------------
|
par_shuf $PG -------------------+----+----+----------------------------------------------+----------------------------------------------
|
||||||
par_shuf $PG sleep .3;echo 1 a | 1 | a | /tmp/parallel-bug49791-792/1/1/2/a/stdout | /tmp/parallel-bug49791-792/1/1/2/a/stderr
|
par_shuf $PG sleep .3;echo 1 a | 1 | a | /tmp/parallel-bug49791- <792/1/1/2/a/stdout | /tmp/parallel-bug49791- <792/1/1/2/a/stderr
|
||||||
par_shuf $PG sleep .3;echo 1 b | 1 | b | /tmp/parallel-bug49791-792/1/1/2/b/stdout | /tmp/parallel-bug49791-792/1/1/2/b/stderr
|
par_shuf $PG sleep .3;echo 1 b | 1 | b | /tmp/parallel-bug49791- <792/1/1/2/b/stdout | /tmp/parallel-bug49791- <792/1/1/2/b/stderr
|
||||||
par_shuf $PG sleep .3;echo 1 c | 1 | c | /tmp/parallel-bug49791-792/1/1/2/c/stdout | /tmp/parallel-bug49791-792/1/1/2/c/stderr
|
par_shuf $PG sleep .3;echo 1 c | 1 | c | /tmp/parallel-bug49791- <792/1/1/2/c/stdout | /tmp/parallel-bug49791- <792/1/1/2/c/stderr
|
||||||
par_shuf $PG sleep .3;echo 1 d | 1 | d | /tmp/parallel-bug49791-792/1/1/2/d/stdout | /tmp/parallel-bug49791-792/1/1/2/d/stderr
|
par_shuf $PG sleep .3;echo 1 d | 1 | d | /tmp/parallel-bug49791- <792/1/1/2/d/stdout | /tmp/parallel-bug49791- <792/1/1/2/d/stderr
|
||||||
par_shuf $PG sleep .3;echo 1 e | 1 | e | /tmp/parallel-bug49791-792/1/1/2/e/stdout | /tmp/parallel-bug49791-792/1/1/2/e/stderr
|
par_shuf $PG sleep .3;echo 1 e | 1 | e | /tmp/parallel-bug49791- <792/1/1/2/e/stdout | /tmp/parallel-bug49791- <792/1/1/2/e/stderr
|
||||||
par_shuf $PG sleep .3;echo 2 a | 2 | a | /tmp/parallel-bug49791-792/1/2/2/a/stdout | /tmp/parallel-bug49791-792/1/2/2/a/stderr
|
par_shuf $PG sleep .3;echo 2 a | 2 | a | /tmp/parallel-bug49791- <792/1/2/2/a/stdout | /tmp/parallel-bug49791- <792/1/2/2/a/stderr
|
||||||
par_shuf $PG sleep .3;echo 2 b | 2 | b | /tmp/parallel-bug49791-792/1/2/2/b/stdout | /tmp/parallel-bug49791-792/1/2/2/b/stderr
|
par_shuf $PG sleep .3;echo 2 b | 2 | b | /tmp/parallel-bug49791- <792/1/2/2/b/stdout | /tmp/parallel-bug49791- <792/1/2/2/b/stderr
|
||||||
par_shuf $PG sleep .3;echo 2 c | 2 | c | /tmp/parallel-bug49791-792/1/2/2/c/stdout | /tmp/parallel-bug49791-792/1/2/2/c/stderr
|
par_shuf $PG sleep .3;echo 2 c | 2 | c | /tmp/parallel-bug49791- <792/1/2/2/c/stdout | /tmp/parallel-bug49791- <792/1/2/2/c/stderr
|
||||||
par_shuf $PG sleep .3;echo 2 d | 2 | d | /tmp/parallel-bug49791-792/1/2/2/d/stdout | /tmp/parallel-bug49791-792/1/2/2/d/stderr
|
par_shuf $PG sleep .3;echo 2 d | 2 | d | /tmp/parallel-bug49791- <792/1/2/2/d/stdout | /tmp/parallel-bug49791- <792/1/2/2/d/stderr
|
||||||
par_shuf $PG sleep .3;echo 2 e | 2 | e | /tmp/parallel-bug49791-792/1/2/2/e/stdout | /tmp/parallel-bug49791-792/1/2/2/e/stderr
|
par_shuf $PG sleep .3;echo 2 e | 2 | e | /tmp/parallel-bug49791- <792/1/2/2/e/stdout | /tmp/parallel-bug49791- <792/1/2/2/e/stderr
|
||||||
par_shuf $PG sleep .3;echo 3 a | 3 | a | /tmp/parallel-bug49791-792/1/3/2/a/stdout | /tmp/parallel-bug49791-792/1/3/2/a/stderr
|
par_shuf $PG sleep .3;echo 3 a | 3 | a | /tmp/parallel-bug49791- <792/1/3/2/a/stdout | /tmp/parallel-bug49791- <792/1/3/2/a/stderr
|
||||||
par_shuf $PG sleep .3;echo 3 b | 3 | b | /tmp/parallel-bug49791-792/1/3/2/b/stdout | /tmp/parallel-bug49791-792/1/3/2/b/stderr
|
par_shuf $PG sleep .3;echo 3 b | 3 | b | /tmp/parallel-bug49791- <792/1/3/2/b/stdout | /tmp/parallel-bug49791- <792/1/3/2/b/stderr
|
||||||
par_shuf $PG sleep .3;echo 3 c | 3 | c | /tmp/parallel-bug49791-792/1/3/2/c/stdout | /tmp/parallel-bug49791-792/1/3/2/c/stderr
|
par_shuf $PG sleep .3;echo 3 c | 3 | c | /tmp/parallel-bug49791- <792/1/3/2/c/stdout | /tmp/parallel-bug49791- <792/1/3/2/c/stderr
|
||||||
par_shuf $PG sleep .3;echo 3 d | 3 | d | /tmp/parallel-bug49791-792/1/3/2/d/stdout | /tmp/parallel-bug49791-792/1/3/2/d/stderr
|
par_shuf $PG sleep .3;echo 3 d | 3 | d | /tmp/parallel-bug49791- <792/1/3/2/d/stdout | /tmp/parallel-bug49791- <792/1/3/2/d/stderr
|
||||||
par_shuf $PG sleep .3;echo 3 e | 3 | e | /tmp/parallel-bug49791-792/1/3/2/e/stdout | /tmp/parallel-bug49791-792/1/3/2/e/stderr
|
par_shuf $PG sleep .3;echo 3 e | 3 | e | /tmp/parallel-bug49791- <792/1/3/2/e/stdout | /tmp/parallel-bug49791- <792/1/3/2/e/stderr
|
||||||
par_shuf $PG sleep .3;echo 4 a | 4 | a | /tmp/parallel-bug49791-792/1/4/2/a/stdout | /tmp/parallel-bug49791-792/1/4/2/a/stderr
|
par_shuf $PG sleep .3;echo 4 a | 4 | a | /tmp/parallel-bug49791- <792/1/4/2/a/stdout | /tmp/parallel-bug49791- <792/1/4/2/a/stderr
|
||||||
par_shuf $PG sleep .3;echo 4 b | 4 | b | /tmp/parallel-bug49791-792/1/4/2/b/stdout | /tmp/parallel-bug49791-792/1/4/2/b/stderr
|
par_shuf $PG sleep .3;echo 4 b | 4 | b | /tmp/parallel-bug49791- <792/1/4/2/b/stdout | /tmp/parallel-bug49791- <792/1/4/2/b/stderr
|
||||||
par_shuf $PG sleep .3;echo 4 c | 4 | c | /tmp/parallel-bug49791-792/1/4/2/c/stdout | /tmp/parallel-bug49791-792/1/4/2/c/stderr
|
par_shuf $PG sleep .3;echo 4 c | 4 | c | /tmp/parallel-bug49791- <792/1/4/2/c/stdout | /tmp/parallel-bug49791- <792/1/4/2/c/stderr
|
||||||
par_shuf $PG sleep .3;echo 4 d | 4 | d | /tmp/parallel-bug49791-792/1/4/2/d/stdout | /tmp/parallel-bug49791-792/1/4/2/d/stderr
|
par_shuf $PG sleep .3;echo 4 d | 4 | d | /tmp/parallel-bug49791- <792/1/4/2/d/stdout | /tmp/parallel-bug49791- <792/1/4/2/d/stderr
|
||||||
par_shuf $PG sleep .3;echo 4 e | 4 | e | /tmp/parallel-bug49791-792/1/4/2/e/stdout | /tmp/parallel-bug49791-792/1/4/2/e/stderr
|
par_shuf $PG sleep .3;echo 4 e | 4 | e | /tmp/parallel-bug49791- <792/1/4/2/e/stdout | /tmp/parallel-bug49791- <792/1/4/2/e/stderr
|
||||||
par_shuf $PG sleep .3;echo 5 a | 5 | a | /tmp/parallel-bug49791-792/1/5/2/a/stdout | /tmp/parallel-bug49791-792/1/5/2/a/stderr
|
par_shuf $PG sleep .3;echo 5 a | 5 | a | /tmp/parallel-bug49791- <792/1/5/2/a/stdout | /tmp/parallel-bug49791- <792/1/5/2/a/stderr
|
||||||
par_shuf $PG sleep .3;echo 5 b | 5 | b | /tmp/parallel-bug49791-792/1/5/2/b/stdout | /tmp/parallel-bug49791-792/1/5/2/b/stderr
|
par_shuf $PG sleep .3;echo 5 b | 5 | b | /tmp/parallel-bug49791- <792/1/5/2/b/stdout | /tmp/parallel-bug49791- <792/1/5/2/b/stderr
|
||||||
par_shuf $PG sleep .3;echo 5 c | 5 | c | /tmp/parallel-bug49791-792/1/5/2/c/stdout | /tmp/parallel-bug49791-792/1/5/2/c/stderr
|
par_shuf $PG sleep .3;echo 5 c | 5 | c | /tmp/parallel-bug49791- <792/1/5/2/c/stdout | /tmp/parallel-bug49791- <792/1/5/2/c/stderr
|
||||||
par_shuf $PG sleep .3;echo 5 d | 5 | d | /tmp/parallel-bug49791-792/1/5/2/d/stdout | /tmp/parallel-bug49791-792/1/5/2/d/stderr
|
par_shuf $PG sleep .3;echo 5 d | 5 | d | /tmp/parallel-bug49791- <792/1/5/2/d/stdout | /tmp/parallel-bug49791- <792/1/5/2/d/stderr
|
||||||
par_shuf $PG sleep .3;echo 5 e | 5 | e | /tmp/parallel-bug49791-792/1/5/2/e/stdout | /tmp/parallel-bug49791-792/1/5/2/e/stderr
|
par_shuf $PG sleep .3;echo 5 e | 5 | e | /tmp/parallel-bug49791- <792/1/5/2/e/stdout | /tmp/parallel-bug49791- <792/1/5/2/e/stderr
|
||||||
par_shuf $PG (25 rows)
|
par_shuf $PG (25 rows)
|
||||||
par_shuf $PG
|
par_shuf $PG
|
||||||
par_shuf $SQLITE p_wrapper par_shuf '$SQLITE'
|
par_shuf $SQLITE p_wrapper par_shuf '$SQLITE'
|
||||||
|
@ -445,31 +445,31 @@ par_shuf $SQLITE OK: Diff bigger than 2500 char
|
||||||
par_shuf $SQLITE Exit=0
|
par_shuf $SQLITE Exit=0
|
||||||
par_shuf $SQLITE Exit=0
|
par_shuf $SQLITE Exit=0
|
||||||
par_shuf $SQLITE Command|V1|V2|Stdout|Stderr
|
par_shuf $SQLITE Command|V1|V2|Stdout|Stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 1 a|1|a|/tmp/parallel-bug49791-932/1/1/2/a/stdout|/tmp/parallel-bug49791-932/1/1/2/a/stderr
|
par_shuf $SQLITE sleep .3;echo 1 a|1|a|/tmp/parallel-bug49791- <932/1/1/2/a/stdout|/tmp/parallel-bug49791- <932/1/1/2/a/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 1 b|1|b|/tmp/parallel-bug49791-932/1/1/2/b/stdout|/tmp/parallel-bug49791-932/1/1/2/b/stderr
|
par_shuf $SQLITE sleep .3;echo 1 b|1|b|/tmp/parallel-bug49791- <932/1/1/2/b/stdout|/tmp/parallel-bug49791- <932/1/1/2/b/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 1 c|1|c|/tmp/parallel-bug49791-932/1/1/2/c/stdout|/tmp/parallel-bug49791-932/1/1/2/c/stderr
|
par_shuf $SQLITE sleep .3;echo 1 c|1|c|/tmp/parallel-bug49791- <932/1/1/2/c/stdout|/tmp/parallel-bug49791- <932/1/1/2/c/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 1 d|1|d|/tmp/parallel-bug49791-932/1/1/2/d/stdout|/tmp/parallel-bug49791-932/1/1/2/d/stderr
|
par_shuf $SQLITE sleep .3;echo 1 d|1|d|/tmp/parallel-bug49791- <932/1/1/2/d/stdout|/tmp/parallel-bug49791- <932/1/1/2/d/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 1 e|1|e|/tmp/parallel-bug49791-932/1/1/2/e/stdout|/tmp/parallel-bug49791-932/1/1/2/e/stderr
|
par_shuf $SQLITE sleep .3;echo 1 e|1|e|/tmp/parallel-bug49791- <932/1/1/2/e/stdout|/tmp/parallel-bug49791- <932/1/1/2/e/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 2 a|2|a|/tmp/parallel-bug49791-932/1/2/2/a/stdout|/tmp/parallel-bug49791-932/1/2/2/a/stderr
|
par_shuf $SQLITE sleep .3;echo 2 a|2|a|/tmp/parallel-bug49791- <932/1/2/2/a/stdout|/tmp/parallel-bug49791- <932/1/2/2/a/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 2 b|2|b|/tmp/parallel-bug49791-932/1/2/2/b/stdout|/tmp/parallel-bug49791-932/1/2/2/b/stderr
|
par_shuf $SQLITE sleep .3;echo 2 b|2|b|/tmp/parallel-bug49791- <932/1/2/2/b/stdout|/tmp/parallel-bug49791- <932/1/2/2/b/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 2 c|2|c|/tmp/parallel-bug49791-932/1/2/2/c/stdout|/tmp/parallel-bug49791-932/1/2/2/c/stderr
|
par_shuf $SQLITE sleep .3;echo 2 c|2|c|/tmp/parallel-bug49791- <932/1/2/2/c/stdout|/tmp/parallel-bug49791- <932/1/2/2/c/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 2 d|2|d|/tmp/parallel-bug49791-932/1/2/2/d/stdout|/tmp/parallel-bug49791-932/1/2/2/d/stderr
|
par_shuf $SQLITE sleep .3;echo 2 d|2|d|/tmp/parallel-bug49791- <932/1/2/2/d/stdout|/tmp/parallel-bug49791- <932/1/2/2/d/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 2 e|2|e|/tmp/parallel-bug49791-932/1/2/2/e/stdout|/tmp/parallel-bug49791-932/1/2/2/e/stderr
|
par_shuf $SQLITE sleep .3;echo 2 e|2|e|/tmp/parallel-bug49791- <932/1/2/2/e/stdout|/tmp/parallel-bug49791- <932/1/2/2/e/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 3 a|3|a|/tmp/parallel-bug49791-932/1/3/2/a/stdout|/tmp/parallel-bug49791-932/1/3/2/a/stderr
|
par_shuf $SQLITE sleep .3;echo 3 a|3|a|/tmp/parallel-bug49791- <932/1/3/2/a/stdout|/tmp/parallel-bug49791- <932/1/3/2/a/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 3 b|3|b|/tmp/parallel-bug49791-932/1/3/2/b/stdout|/tmp/parallel-bug49791-932/1/3/2/b/stderr
|
par_shuf $SQLITE sleep .3;echo 3 b|3|b|/tmp/parallel-bug49791- <932/1/3/2/b/stdout|/tmp/parallel-bug49791- <932/1/3/2/b/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 3 c|3|c|/tmp/parallel-bug49791-932/1/3/2/c/stdout|/tmp/parallel-bug49791-932/1/3/2/c/stderr
|
par_shuf $SQLITE sleep .3;echo 3 c|3|c|/tmp/parallel-bug49791- <932/1/3/2/c/stdout|/tmp/parallel-bug49791- <932/1/3/2/c/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 3 d|3|d|/tmp/parallel-bug49791-932/1/3/2/d/stdout|/tmp/parallel-bug49791-932/1/3/2/d/stderr
|
par_shuf $SQLITE sleep .3;echo 3 d|3|d|/tmp/parallel-bug49791- <932/1/3/2/d/stdout|/tmp/parallel-bug49791- <932/1/3/2/d/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 3 e|3|e|/tmp/parallel-bug49791-932/1/3/2/e/stdout|/tmp/parallel-bug49791-932/1/3/2/e/stderr
|
par_shuf $SQLITE sleep .3;echo 3 e|3|e|/tmp/parallel-bug49791- <932/1/3/2/e/stdout|/tmp/parallel-bug49791- <932/1/3/2/e/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 4 a|4|a|/tmp/parallel-bug49791-932/1/4/2/a/stdout|/tmp/parallel-bug49791-932/1/4/2/a/stderr
|
par_shuf $SQLITE sleep .3;echo 4 a|4|a|/tmp/parallel-bug49791- <932/1/4/2/a/stdout|/tmp/parallel-bug49791- <932/1/4/2/a/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 4 b|4|b|/tmp/parallel-bug49791-932/1/4/2/b/stdout|/tmp/parallel-bug49791-932/1/4/2/b/stderr
|
par_shuf $SQLITE sleep .3;echo 4 b|4|b|/tmp/parallel-bug49791- <932/1/4/2/b/stdout|/tmp/parallel-bug49791- <932/1/4/2/b/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 4 c|4|c|/tmp/parallel-bug49791-932/1/4/2/c/stdout|/tmp/parallel-bug49791-932/1/4/2/c/stderr
|
par_shuf $SQLITE sleep .3;echo 4 c|4|c|/tmp/parallel-bug49791- <932/1/4/2/c/stdout|/tmp/parallel-bug49791- <932/1/4/2/c/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 4 d|4|d|/tmp/parallel-bug49791-932/1/4/2/d/stdout|/tmp/parallel-bug49791-932/1/4/2/d/stderr
|
par_shuf $SQLITE sleep .3;echo 4 d|4|d|/tmp/parallel-bug49791- <932/1/4/2/d/stdout|/tmp/parallel-bug49791- <932/1/4/2/d/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 4 e|4|e|/tmp/parallel-bug49791-932/1/4/2/e/stdout|/tmp/parallel-bug49791-932/1/4/2/e/stderr
|
par_shuf $SQLITE sleep .3;echo 4 e|4|e|/tmp/parallel-bug49791- <932/1/4/2/e/stdout|/tmp/parallel-bug49791- <932/1/4/2/e/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 5 a|5|a|/tmp/parallel-bug49791-932/1/5/2/a/stdout|/tmp/parallel-bug49791-932/1/5/2/a/stderr
|
par_shuf $SQLITE sleep .3;echo 5 a|5|a|/tmp/parallel-bug49791- <932/1/5/2/a/stdout|/tmp/parallel-bug49791- <932/1/5/2/a/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 5 b|5|b|/tmp/parallel-bug49791-932/1/5/2/b/stdout|/tmp/parallel-bug49791-932/1/5/2/b/stderr
|
par_shuf $SQLITE sleep .3;echo 5 b|5|b|/tmp/parallel-bug49791- <932/1/5/2/b/stdout|/tmp/parallel-bug49791- <932/1/5/2/b/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 5 c|5|c|/tmp/parallel-bug49791-932/1/5/2/c/stdout|/tmp/parallel-bug49791-932/1/5/2/c/stderr
|
par_shuf $SQLITE sleep .3;echo 5 c|5|c|/tmp/parallel-bug49791- <932/1/5/2/c/stdout|/tmp/parallel-bug49791- <932/1/5/2/c/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 5 d|5|d|/tmp/parallel-bug49791-932/1/5/2/d/stdout|/tmp/parallel-bug49791-932/1/5/2/d/stderr
|
par_shuf $SQLITE sleep .3;echo 5 d|5|d|/tmp/parallel-bug49791- <932/1/5/2/d/stdout|/tmp/parallel-bug49791- <932/1/5/2/d/stderr
|
||||||
par_shuf $SQLITE sleep .3;echo 5 e|5|e|/tmp/parallel-bug49791-932/1/5/2/e/stdout|/tmp/parallel-bug49791-932/1/5/2/e/stderr
|
par_shuf $SQLITE sleep .3;echo 5 e|5|e|/tmp/parallel-bug49791- <932/1/5/2/e/stdout|/tmp/parallel-bug49791- <932/1/5/2/e/stderr
|
||||||
par_sql_joblog $MYSQL p_wrapper par_sql_joblog '$MYSQL'
|
par_sql_joblog $MYSQL p_wrapper par_sql_joblog '$MYSQL'
|
||||||
par_sql_joblog $MYSQL ### should only give a single --joblog heading
|
par_sql_joblog $MYSQL ### should only give a single --joblog heading
|
||||||
par_sql_joblog $MYSQL ### --sqlmaster/--sqlworker
|
par_sql_joblog $MYSQL ### --sqlmaster/--sqlworker
|
||||||
|
|
|
@ -62,7 +62,9 @@ par_sshloginfile parallel
|
||||||
par_sshloginfile parallel
|
par_sshloginfile parallel
|
||||||
par_sshloginfile parallel
|
par_sshloginfile parallel
|
||||||
par_tmux_different_shells ### Test tmux works on different shells
|
par_tmux_different_shells ### Test tmux works on different shells
|
||||||
|
par_tmux_different_shells See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
par_tmux_different_shells 0
|
par_tmux_different_shells 0
|
||||||
|
par_tmux_different_shells See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
par_tmux_different_shells 4
|
par_tmux_different_shells 4
|
||||||
par_tmux_different_shells 0
|
par_tmux_different_shells 0
|
||||||
par_tmux_different_shells 4
|
par_tmux_different_shells 4
|
||||||
|
@ -74,9 +76,16 @@ par_tmux_different_shells # command is currently too long for csh. Maybe it can
|
||||||
par_tmux_different_shells 0
|
par_tmux_different_shells 0
|
||||||
par_tmux_different_shells 4
|
par_tmux_different_shells 4
|
||||||
par_tmux_length ### works
|
par_tmux_length ### works
|
||||||
par_tmux_length See output with: tmux -S attach
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
par_tmux_length See output with: tmux -S attach
|
par_tmux_length <' attach
|
||||||
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
|
par_tmux_length <' attach
|
||||||
par_tmux_length ### These blocked due to length
|
par_tmux_length ### These blocked due to length
|
||||||
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
|
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
|
||||||
par_transfer_return_multiple_inputs ### bug #43746: --transfer and --return of multiple inputs {1} and {2}
|
par_transfer_return_multiple_inputs ### bug #43746: --transfer and --return of multiple inputs {1} and {2}
|
||||||
par_transfer_return_multiple_inputs ### and:
|
par_transfer_return_multiple_inputs ### and:
|
||||||
par_transfer_return_multiple_inputs ### bug #44371: --trc with csh complains
|
par_transfer_return_multiple_inputs ### bug #44371: --trc with csh complains
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
par_ssh_cmd_with_newline ### Check --ssh with \n works
|
||||||
|
par_ssh_cmd_with_newline uid=1003(sh) gid=1003(sh) groups=1003(sh)
|
||||||
par_pipe_retries ### bug #45025: --pipe --retries does not reschedule on other host
|
par_pipe_retries ### bug #45025: --pipe --retries does not reschedule on other host
|
||||||
par_pipe_retries parallel: Warning: Could not figure out number of cpus on a.a (). Using 1.
|
par_pipe_retries parallel: Warning: Could not figure out number of cpus on a.a (). Using 1.
|
||||||
par_pipe_retries 165668 165668 1048571
|
par_pipe_retries 165668 165668 1048571
|
||||||
|
@ -18,6 +20,15 @@ par_env_parallel_onall Myfunc works
|
||||||
par_controlmaster_eats bug #36707: --controlmaster eats jobs
|
par_controlmaster_eats bug #36707: --controlmaster eats jobs
|
||||||
par_controlmaster_eats OK1
|
par_controlmaster_eats OK1
|
||||||
par_controlmaster_eats OK2
|
par_controlmaster_eats OK2
|
||||||
|
par_controlmaster ### Check -M works if TMPDIR contains space
|
||||||
|
par_controlmaster 1
|
||||||
|
par_controlmaster 2
|
||||||
|
par_controlmaster 3
|
||||||
|
par_controlmaster 1
|
||||||
|
par_controlmaster 2
|
||||||
|
par_controlmaster 3
|
||||||
|
par_controlmaster Part2
|
||||||
|
par_controlmaster OK
|
||||||
par_command_len_shellquote ### test quoting will not cause a crash if too long
|
par_command_len_shellquote ### test quoting will not cause a crash if too long
|
||||||
par_command_len_shellquote -Slo -j10 " 1 1 1 1 4
|
par_command_len_shellquote -Slo -j10 " 1 1 1 1 4
|
||||||
par_command_len_shellquote -Slo -j10 " 1 2 1 1 10
|
par_command_len_shellquote -Slo -j10 " 1 2 1 1 10
|
||||||
|
|
|
@ -45,25 +45,25 @@ echo '### bug #42041: Implement $PARALLEL_JOBSLOT'
|
||||||
2
|
2
|
||||||
echo '### bug #42363: --pipepart and --fifo/--cat does not work'
|
echo '### bug #42363: --pipepart and --fifo/--cat does not work'
|
||||||
### bug #42363: --pipepart and --fifo/--cat does not work
|
### bug #42363: --pipepart and --fifo/--cat does not work
|
||||||
seq 100 > /tmp/bug42363; parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp\S+par).....:${1}XXXXX:'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp\S+par).....:${1}XXXXX:'; rm /tmp/bug42363
|
seq 100 > /tmp/bug42363; parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:'; rm /tmp/bug42363
|
||||||
14 14 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
14 14 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
9 9 28 /tmp/parallel-local22-tmpdir/parXXXXX
|
9 9 28 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
14 14 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
14 14 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
|
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
9 9 28 /tmp/parallel-local22-tmpdir/parXXXXX
|
9 9 28 '/tmp/parallel-local22-tmp/'$'\n'' </tmp/parXXXXX'
|
||||||
echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile'
|
echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile'
|
||||||
### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile
|
### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile
|
||||||
parallel --pipepart -a /etc/passwd -L 1 should not be run
|
parallel --pipepart -a /etc/passwd -L 1 should not be run
|
||||||
|
|
|
@ -254,7 +254,7 @@ echo '### Race condition bug - 1 - would block'; seq 1 80 | nice parallel -j0
|
||||||
### Race condition bug - 1 - would block
|
### Race condition bug - 1 - would block
|
||||||
echo '### Race condition bug - 2 - would block'; seq 1 100 | nice parallel -j100 --block 1 --recend "" --pipe cat >/dev/null
|
echo '### Race condition bug - 2 - would block'; seq 1 100 | nice parallel -j100 --block 1 --recend "" --pipe cat >/dev/null
|
||||||
### Race condition bug - 2 - would block
|
### Race condition bug - 2 - would block
|
||||||
echo '### Test --block size=1'; seq 1 10| parallel --block 1 --files --recend "" --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {}
|
echo '### Test --block size=1'; seq 1 10| TMPDIR=/tmp parallel --block 1 --files --recend "" --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {}
|
||||||
### Test --block size=1
|
### Test --block size=1
|
||||||
|
|
||||||
|
|
||||||
|
@ -277,14 +277,14 @@ echo '### Test --block size=1'; seq 1 10| parallel --block 1 --files --recend
|
||||||
7
|
7
|
||||||
8
|
8
|
||||||
9
|
9
|
||||||
echo '### Test --block size=1M -j10 --files - more jobs than data'; sort -n < /tmp/blocktest | md5sum; cat /tmp/blocktest | parallel --files --recend "\n" -j10 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
echo '### Test --block size=1M -j10 --files - more jobs than data'; sort -n < /tmp/blocktest | md5sum; cat /tmp/blocktest | TMPDIR=/tmp parallel --files --recend "\n" -j10 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
### Test --block size=1M -j10 --files - more jobs than data
|
### Test --block size=1M -j10 --files - more jobs than data
|
||||||
8a7095c1c23bfadc311fe6b16d950582 -
|
8a7095c1c23bfadc311fe6b16d950582 -
|
||||||
8a7095c1c23bfadc311fe6b16d950582 -
|
8a7095c1c23bfadc311fe6b16d950582 -
|
||||||
echo '### Test --block size=1M -j1 - more data than cpu'; cat /tmp/blocktest | parallel --files --recend "\n" -j1 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
echo '### Test --block size=1M -j1 - more data than cpu'; cat /tmp/blocktest | TMPDIR=/tmp parallel --files --recend "\n" -j1 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
### Test --block size=1M -j1 - more data than cpu
|
### Test --block size=1M -j1 - more data than cpu
|
||||||
8a7095c1c23bfadc311fe6b16d950582 -
|
8a7095c1c23bfadc311fe6b16d950582 -
|
||||||
echo '### Test --block size=1M -j1 - more data than cpu'; cat /tmp/blocktest | parallel --files --recend "\n" -j2 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
echo '### Test --block size=1M -j1 - more data than cpu'; cat /tmp/blocktest | TMPDIR=/tmp parallel --files --recend "\n" -j2 --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
### Test --block size=1M -j1 - more data than cpu
|
### Test --block size=1M -j1 - more data than cpu
|
||||||
8a7095c1c23bfadc311fe6b16d950582 -
|
8a7095c1c23bfadc311fe6b16d950582 -
|
||||||
echo '### Test --pipe default settings'; cat /tmp/blocktest | parallel --pipe sort | sort -n | md5sum
|
echo '### Test --pipe default settings'; cat /tmp/blocktest | parallel --pipe sort | sort -n | md5sum
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
echo '### tmux-1.9'
|
echo '### tmux-1.9'
|
||||||
### tmux-1.9
|
### tmux-1.9
|
||||||
seq 510 512 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
seq 510 512 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
||||||
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
|
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
0
|
0
|
||||||
seq 0000 10 510 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
seq 0000 10 510 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
||||||
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
|
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
0
|
0
|
||||||
echo '### tmux-1.9 fails' seq 512 10 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
echo '### tmux-1.9 fails' seq 512 10 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
||||||
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
|
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
0
|
0
|
||||||
seq 2001 10 3000 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
seq 2001 10 3000 | PARALLEL_TMUX=tmux-1.9 par_tmux
|
||||||
parallel: Error: Command line too long (2012 >= 523) at input 0: 2001
|
parallel: Error: Command line too long (2012 >= 523) at input 0: 2001
|
||||||
|
@ -62,19 +65,22 @@ parallel: Error: Command line too long (6 >= -1264) at input 0: 0
|
||||||
echo '### tmux-1.9 0..255 ascii'
|
echo '### tmux-1.9 0..255 ascii'
|
||||||
### tmux-1.9 0..255 ascii
|
### tmux-1.9 0..255 ascii
|
||||||
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux --timeout 5 echo | par_tmux_filter; echo $?
|
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux --timeout 5 echo | par_tmux_filter; echo $?
|
||||||
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
|
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
0
|
0
|
||||||
echo '### Test output ascii'
|
echo '### Test output ascii'
|
||||||
### Test output ascii
|
### Test output ascii
|
||||||
rm -f /tmp/paralocal7-ascii*; perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } $_-10..$_),"\n" } 1..255' | stdout parallel --tmux echo {}'>>/tmp/paralocal7-ascii{%}' | par_tmux_filter; sort /tmp/paralocal7-ascii* | md5sum
|
rm -f /tmp/paralocal7-ascii*; perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } $_-10..$_),"\n" } 1..255' | stdout parallel --tmux echo {}'>>/tmp/paralocal7-ascii{%}' | par_tmux_filter; sort /tmp/paralocal7-ascii* | md5sum
|
||||||
See output with: tmux -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
|
See output with: tmux -S '/tmp/parallel-local7-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
053c7e8e945ef7641fc63bc309ac069d -
|
053c7e8e945ef7641fc63bc309ac069d -
|
||||||
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 140 260 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
seq 140 260 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
||||||
parallel: Error: Command line too long (150 >= -1264) at input 0: 140
|
parallel: Error: Command line too long (150 >= -1264) at input 0: 140
|
||||||
seq 140 260 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
seq 140 260 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
|
||||||
See output with: tmux-1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
|
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
seq 560 850 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
seq 560 850 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
||||||
parallel: Error: Command line too long (568 >= -1264) at input 0: 560
|
parallel: Error: Command line too long (568 >= -1264) at input 0: 560
|
||||||
seq 560 850 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
seq 560 850 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
|
||||||
|
|
|
@ -61,7 +61,8 @@ echo '### Test --spreadstdin - this failed during devel'; nice seq 1 1000000 |
|
||||||
echo '### Test --spreadstdin -k'; nice seq 1 1000000 | $NICEPAR -k --recend "\n" -j10 --spreadstdin gzip -9 | zcat | md5sum
|
echo '### Test --spreadstdin -k'; nice seq 1 1000000 | $NICEPAR -k --recend "\n" -j10 --spreadstdin gzip -9 | zcat | md5sum
|
||||||
### Test --spreadstdin -k
|
### Test --spreadstdin -k
|
||||||
8a7095c1c23bfadc311fe6b16d950582 -
|
8a7095c1c23bfadc311fe6b16d950582 -
|
||||||
echo '### Test --spreadstdin --files'; nice seq 1 1000000 | shuf | $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
# --files requires TMPDIR does not contain \n
|
||||||
|
echo '### Test --spreadstdin --files'; nice seq 1 1000000 | shuf | TMPDIR=/tmp $NICEPAR --files --recend "\n" -j10 --spreadstdin sort -n | parallel -Xj1 sort -nm {} ";"rm {} | md5sum
|
||||||
### Test --spreadstdin --files
|
### Test --spreadstdin --files
|
||||||
8a7095c1c23bfadc311fe6b16d950582 -
|
8a7095c1c23bfadc311fe6b16d950582 -
|
||||||
echo '### Test --tag ::: a ::: b'; stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b
|
echo '### Test --tag ::: a ::: b'; stdout $NICEPAR -k --tag -j1 echo stderr-{.} ">&2;" echo stdout-{} ::: a ::: b
|
||||||
|
|
|
@ -150,7 +150,8 @@ num30000
|
||||||
num8
|
num8
|
||||||
tsv-file.tsv
|
tsv-file.tsv
|
||||||
foo
|
foo
|
||||||
~
|
/tmp/parallel-tutorial-tmp/
|
||||||
|
</tmp
|
||||||
my_func() {
|
my_func() {
|
||||||
echo in my_func $1
|
echo in my_func $1
|
||||||
}
|
}
|
||||||
|
@ -439,9 +440,14 @@ echo C
|
||||||
1-middle
|
1-middle
|
||||||
1-end
|
1-end
|
||||||
parallel --files echo ::: A B C
|
parallel --files echo ::: A B C
|
||||||
/tmp/parallel-tutorial-tmpdir/parXXXXX.par
|
/tmp/parallel-tutorial-tmp/
|
||||||
|
</tmp/tempfile
|
||||||
|
/tmp/parallel-tutorial-tmp/
|
||||||
|
</tmp/tempfile
|
||||||
|
/tmp/parallel-tutorial-tmp/
|
||||||
|
</tmp/tempfile
|
||||||
parallel --tmpdir /var/tmp --files echo ::: A B C
|
parallel --tmpdir /var/tmp --files echo ::: A B C
|
||||||
/var/tmp/parXXXXX.par
|
/var/tmp/tempfile
|
||||||
parallel --results outdir echo ::: A B C
|
parallel --results outdir echo ::: A B C
|
||||||
outdir/1/A/seq
|
outdir/1/A/seq
|
||||||
outdir/1/A/stderr
|
outdir/1/A/stderr
|
||||||
|
@ -509,7 +515,8 @@ parallel: Warning: or increasing /proc/sys/fs/file-max
|
||||||
parallel --shuf echo ::: 1 2 3 ::: a b c ::: A B C
|
parallel --shuf echo ::: 1 2 3 ::: a b c ::: A B C
|
||||||
123 abc ABC
|
123 abc ABC
|
||||||
seq 10 20 | parallel --tmux 'echo start {}; sleep {}; echo done {}'
|
seq 10 20 | parallel --tmux 'echo start {}; sleep {}; echo done {}'
|
||||||
See output with: tmux -S /tmp/parallel-tutorial-tmpdir/tmsXXXXX attach
|
See output with: tmux -S '/tmp/parallel-tutorial-tmp/
|
||||||
|
</tmp/tmsXXXXX' attach
|
||||||
tmux -S /tmp/tmsXXXXX attach
|
tmux -S /tmp/tmsXXXXX attach
|
||||||
no sessions
|
no sessions
|
||||||
parallel --delay 2.5 echo Starting {}\;date ::: 1 2 3
|
parallel --delay 2.5 echo Starting {}\;date ::: 1 2 3
|
||||||
|
@ -701,6 +708,8 @@ foo
|
||||||
parallel --workdir . -S $SERVER1 pwd ::: ""
|
parallel --workdir . -S $SERVER1 pwd ::: ""
|
||||||
parallel --workdir ... -S $SERVER1 pwd ::: ""
|
parallel --workdir ... -S $SERVER1 pwd ::: ""
|
||||||
/home/parallel
|
/home/parallel
|
||||||
|
/tmp/parallel-tutorial-tmp/
|
||||||
|
</tmp
|
||||||
/home/parallel/.TMPWORKDIR
|
/home/parallel/.TMPWORKDIR
|
||||||
parallel -S $SERVER1 --sshdelay 0.2 echo ::: 1 2 3
|
parallel -S $SERVER1 --sshdelay 0.2 echo ::: 1 2 3
|
||||||
9
|
9
|
||||||
|
@ -787,6 +796,7 @@ BASH_FUNC_run_test%%
|
||||||
_
|
_
|
||||||
mysqlrootpass
|
mysqlrootpass
|
||||||
oracle_password
|
oracle_password
|
||||||
|
testsuitedir
|
||||||
withpassword
|
withpassword
|
||||||
# The function is only copied if using Bash
|
# The function is only copied if using Bash
|
||||||
my_func2() {
|
my_func2() {
|
||||||
|
@ -1315,7 +1325,7 @@ This helps funding further development; AND IT WON'T COST YOU A CENT.
|
||||||
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
|
||||||
More about funding GNU Parallel and the citation notice:
|
More about funding GNU Parallel and the citation notice:
|
||||||
https://lists.gnu.org/archive/html/parallel/2013-11/msg00006.html
|
https://lists.gnu.org/archive/html/parallel/2013-11/msg00006.html
|
||||||
https://www.gnu.org/software/parallel/parallel_design.html#citation-notice
|
https://www.gnu.org/software/tempfileallel_design.html#citation-notice
|
||||||
https:BASE64-notice-faq.txt
|
https:BASE64-notice-faq.txt
|
||||||
If you send a copy of your published article to tange@gnu.org, it will be
|
If you send a copy of your published article to tange@gnu.org, it will be
|
||||||
mentioned in the release notes of next version of GNU Parallel.
|
mentioned in the release notes of next version of GNU Parallel.
|
||||||
|
@ -1330,4 +1340,10 @@ mentioned in the release notes of next version of GNU Parallel.
|
||||||
echo A
|
echo A
|
||||||
echo B
|
echo B
|
||||||
echo C
|
echo C
|
||||||
9
|
### 3+3 .par files (from --files), 1 .tms-file from tmux attach
|
||||||
|
A
|
||||||
|
A
|
||||||
|
B
|
||||||
|
B
|
||||||
|
C
|
||||||
|
C
|
||||||
|
|
|
@ -47,7 +47,9 @@ def 3
|
||||||
### Test --debug
|
### Test --debug
|
||||||
dburl mysql://tange:tange@localhost:3306/tange
|
dburl mysql://tange:tange@localhost:3306/tange
|
||||||
databasedriver mysql user tange password tange host localhost port 3306 database tange query
|
databasedriver mysql user tange password tange host localhost port 3306 database tange query
|
||||||
[ | ((sleep 1; rm tmpfile) & mysql --defaults-extra-file=tmpfile -C --host=localhost --user=tange --port=3306 tange)]
|
[ | ((sleep 1; rm '/tmp/sql01-tmp/
|
||||||
|
<tmpfile') & mysql --defaults-extra-file='/tmp/sql01-tmp/
|
||||||
|
<tmpfile' --host=localhost --user=tange --port=3306 tange)]
|
||||||
Test if --debug works
|
Test if --debug works
|
||||||
Yes it does
|
Yes it does
|
||||||
### Test --version -V
|
### Test --version -V
|
||||||
|
|
|
@ -3,7 +3,7 @@ par_influx empty input
|
||||||
par_influx empty input
|
par_influx empty input
|
||||||
par_influx empty input
|
par_influx empty input
|
||||||
par_influx dbsize is not implemented for influx
|
par_influx dbsize is not implemented for influx
|
||||||
par_influx Field separator not implemented for influx at /usr/local/bin/sql line 889.
|
par_influx Field separator not implemented for influx at /usr/local/bin/sql line 892.
|
||||||
par_influx name: databases
|
par_influx name: databases
|
||||||
par_influx name
|
par_influx name
|
||||||
par_influx ----
|
par_influx ----
|
||||||
|
|
Loading…
Reference in a new issue