mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 14:07:55 +00:00
parallel: --tmux needs LC_CTYPE set.
parallel: '--halt done'.
This commit is contained in:
parent
426ea9b372
commit
77da672741
|
@ -195,7 +195,7 @@ to:parallel@gnu.org, bug-parallel@gnu.org
|
|||
|
||||
Subject: GNU Parallel 20170422 ('Санкт-Петербу́рг') released <<[stable]>>
|
||||
|
||||
GNU Parallel 20170422 ('Stockholm/London/Санкт-Петербу́рг') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||
GNU Parallel 20170422 ('Paris/Stockholm/London/Санкт-Петербу́рг') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||
|
||||
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
||||
|
||||
|
@ -218,6 +218,9 @@ https://128.84.21.199/pdf/1703.09026.pdf
|
|||
https://wiki.ncsa.illinois.edu/display/ROGER/Using+GNU+Parallel
|
||||
|
||||
https://github.com/lucascbeyeler/zmbackup
|
||||
http://helpful.knobs-dials.com/index.php/Find_and_xargs_and_parallel#Parallel
|
||||
|
||||
https://github.com/mlangill/microbiome_helper/wiki/Quick-Introduction-to-GNU-Parallel
|
||||
|
||||
http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0174575
|
||||
|
||||
|
|
|
@ -182,84 +182,6 @@ env_parallel() {
|
|||
fi
|
||||
}
|
||||
|
||||
_parset() {
|
||||
# $1 = variable NAME
|
||||
# If ${"$1"} is an array: Then put the output into variables with those names
|
||||
# else put the output into an array named ${"$1"}
|
||||
# e.g.:
|
||||
# # Create array named myvar
|
||||
# parset myvar echo ::: {1..10}
|
||||
# echo ${myvar[5]}
|
||||
#
|
||||
# # Put output into $var_a $var_b $var_c
|
||||
# varnames=(var_a var_b var_c)
|
||||
# parset -a varnames echo ::: {1..3}
|
||||
# echo $var_c
|
||||
#
|
||||
# # Put output into $var_a2 $var_b2 $var_c2
|
||||
# varname=var_a2,var_b2,var_c2
|
||||
# parset -a varname echo ::: {1..3}
|
||||
# echo $var_c2
|
||||
#
|
||||
# # Put output into $var_a3 $var_b3 $var_c3
|
||||
# varname="var_a3 var_b3 var_c3"
|
||||
# parset -a varname echo ::: {1..3}
|
||||
# echo $var_c3
|
||||
|
||||
# Variable name to store in
|
||||
local _parset_vname
|
||||
local _parset_vnames
|
||||
# Array to fetch names from
|
||||
local _parset_aname
|
||||
_parset_vname="$1"
|
||||
_parset_aname="_nO_sUch_vAr"
|
||||
shift
|
||||
if [[ "-a" == "$_parset_vname" ]] ; then
|
||||
# Option -a given
|
||||
echo '-a given'
|
||||
_parset_vname="$1"
|
||||
_parset_aname="$1"
|
||||
shift
|
||||
if [[ "$(declare -p $_parset_vname 2>/dev/null)" =~ "declare -a" ]]; then
|
||||
# OK
|
||||
true
|
||||
else
|
||||
# error
|
||||
echo "$_parset_vname" must be an array
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
local _parset_splitable
|
||||
_parset_splitable="$(eval echo '$'$_parset_vname)"
|
||||
if echo "$_parset_splitable" | grep -E ',| ' >/dev/null ; then
|
||||
# Split on , and space
|
||||
_parset_vnames=( $(perl -e 'print map { s/,| /\n/g; $_ } @ARGV' "$_parset_splitable" ) )
|
||||
_parset_aname="_parset_vnames"
|
||||
echo first ${_parset_vnames[0]}
|
||||
else
|
||||
# _parset_vname should be used as an array
|
||||
true
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ "$(declare -p $_parset_aname 2>/dev/null)" =~ "declare -a" ]]; then
|
||||
# vname refers to an array
|
||||
# The array elements refers to variable names to put output into
|
||||
eval $(
|
||||
parallel --files "$@" |
|
||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\"\n"' |
|
||||
parallel echo {2}={1} :::: - :::+ $(eval echo '${'$_parset_aname'[@]}')
|
||||
)
|
||||
unset _parset_aname
|
||||
else
|
||||
# Put output into array ${$_parset_vname}
|
||||
eval $_parset_vname="( $( parallel --files "$@" |
|
||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
parset() {
|
||||
# If $1 contains ',' or space:
|
||||
# Split on , to get the destination variable names
|
||||
|
@ -286,7 +208,7 @@ parset() {
|
|||
# Split on , or space to get the names
|
||||
eval "$(
|
||||
# Compute results into files
|
||||
parallel --files "$@" |
|
||||
parallel --files -k "$@" |
|
||||
# var1=`cat tmpfile1; rm tmpfile1`
|
||||
# var2=`cat tmpfile2; rm tmpfile2`
|
||||
parallel -q echo {2}='`cat {1}; rm {1}`' :::: - :::+ $(
|
||||
|
@ -297,7 +219,7 @@ parset() {
|
|||
else
|
||||
# $1 contains no space or ,
|
||||
# => $1 is the name of the array to put data into
|
||||
eval $_parset_name="( $( parallel --files "$@" |
|
||||
eval $_parset_name="( $( parallel --files -k "$@" |
|
||||
perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
|
||||
fi
|
||||
}
|
||||
|
|
128
src/parallel
128
src/parallel
|
@ -279,7 +279,8 @@ sub pipe_tee_setup {
|
|||
# cat t4 | grep 4
|
||||
# cat t5 | grep 5
|
||||
# Remove the tmpfifo as soon as it is open
|
||||
@Global::cat_prepends = map { "(rm $_;cat) < $_" } @fifos;
|
||||
# 'exec' saves a process
|
||||
@Global::cat_prepends = map { "(rm $_; exec cat) < $_" } @fifos;
|
||||
}
|
||||
|
||||
sub pipe_part_files {
|
||||
|
@ -1474,6 +1475,8 @@ sub parse_halt {
|
|||
$Global::halt_fail = 1;
|
||||
} elsif($fail_success eq "success") {
|
||||
$Global::halt_success = 1;
|
||||
} elsif($fail_success eq "done") {
|
||||
$Global::halt_done = 1;
|
||||
} else {
|
||||
::error("--halt $when must be followed by ,success or ,fail.");
|
||||
::wait_and_exit(255);
|
||||
|
@ -3812,7 +3815,7 @@ sub reaper {
|
|||
# Free the jobslot
|
||||
$job->free_slot();
|
||||
if($opt::timeout and not $job->exitstatus()) {
|
||||
# Update average runtime for timeout
|
||||
# Update average runtime for timeout only for successful jobs
|
||||
$Global::timeoutq->update_median_runtime($job->runtime());
|
||||
}
|
||||
if($opt::keeporder) {
|
||||
|
@ -4224,7 +4227,10 @@ sub qqx {
|
|||
# that /bin/sh does not understand
|
||||
my $PATH = $ENV{'PATH'};
|
||||
my %env;
|
||||
my @keep = qw(PATH SSH_AUTH_SOCK SSH_AGENT_PID);
|
||||
# ssh with ssh-agent needs PATH SSH_AUTH_SOCK SSH_AGENT_PID
|
||||
# ssh with Kerberos needs KRB5CCNAME
|
||||
# tmux needs LC_CTYPE
|
||||
my @keep = qw(PATH SSH_AUTH_SOCK SSH_AGENT_PID KRB5CCNAME LC_CTYPE);
|
||||
@env{@keep} = @ENV{@keep};
|
||||
local(%ENV);
|
||||
%ENV = %env;
|
||||
|
@ -8774,13 +8780,7 @@ sub set_exitsignal {
|
|||
# Should we halt? Immediately? Gracefully?
|
||||
# Returns: N/A
|
||||
my $job = shift;
|
||||
# --halt # => 1..100 (number of jobs failed, 101 means > 100)
|
||||
# --halt % => 1..100 (pct of jobs failed)
|
||||
if($Global::halt_pct and not $Global::halt_count) {
|
||||
$total_jobs ||= $Global::JobQueue->total_jobs();
|
||||
# From the pct compute the number of jobs that must fail/succeed
|
||||
$Global::halt_count = $total_jobs * $Global::halt_pct;
|
||||
}
|
||||
my $limit;
|
||||
if($job->exitstatus() or $job->exitsignal()) {
|
||||
# Job failed
|
||||
$Global::exitstatus++;
|
||||
|
@ -8788,58 +8788,66 @@ sub set_exitsignal {
|
|||
if($Global::halt_fail) {
|
||||
::status("$Global::progname: This job failed:",
|
||||
$job->replaced());
|
||||
if($Global::halt_count <= $Global::total_failed) {
|
||||
# At least N jobs had failed
|
||||
if(not defined $Global::halt_exitstatus) {
|
||||
if($Global::halt_pct) {
|
||||
# --halt now,fail=X% or soon,fail=X%
|
||||
$Global::halt_exitstatus =
|
||||
::ceil($Global::total_failed / $total_jobs * 100);
|
||||
} elsif($Global::halt_count) {
|
||||
# --halt now,fail=X or soon,fail=X
|
||||
$Global::halt_exitstatus = ::min($Global::total_failed,101);
|
||||
}
|
||||
if($Global::halt_count and $Global::halt_count == 1) {
|
||||
# --halt now,fail=1 or soon,fail=1
|
||||
$Global::halt_exitstatus = $job->exitstatus();
|
||||
}
|
||||
}
|
||||
::debug("halt","Pct: ",$Global::halt_pct,
|
||||
" count: ",$Global::halt_count,"\n");
|
||||
if($Global::halt_when eq "soon"
|
||||
and scalar(keys %Global::running) > 0) {
|
||||
::status
|
||||
("$Global::progname: Starting no more jobs. ".
|
||||
"Waiting for ". (keys %Global::running).
|
||||
" jobs to finish.");
|
||||
$Global::start_no_new_jobs ||= 1;
|
||||
}
|
||||
return($Global::halt_when);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if($Global::halt_success) {
|
||||
::debug("halt","Pct: ",$Global::halt_pct,"<=",
|
||||
" count: ",$Global::halt_count,"\n");
|
||||
::status("$Global::progname: This job succeeded:",
|
||||
$job->replaced());
|
||||
if($Global::halt_count <=
|
||||
$Global::total_completed-$Global::total_failed) {
|
||||
# At least N jobs had success
|
||||
# or at least N% had success
|
||||
$Global::halt_exitstatus = 0;
|
||||
if($Global::halt_when eq "soon"
|
||||
and scalar(keys %Global::running) > 0) {
|
||||
::status
|
||||
("$Global::progname: Starting no more jobs. ".
|
||||
"Waiting for ". (keys %Global::running).
|
||||
" jobs to finish.");
|
||||
$Global::start_no_new_jobs ||= 1;
|
||||
}
|
||||
return($Global::halt_when);
|
||||
}
|
||||
$limit = $Global::total_failed;
|
||||
}
|
||||
} elsif($Global::halt_success) {
|
||||
::status("$Global::progname: This job succeeded:",
|
||||
$job->replaced());
|
||||
$limit = $Global::total_completed-$Global::total_failed;
|
||||
}
|
||||
if($Global::halt_done) {
|
||||
::status("$Global::progname: This job finished:",
|
||||
$job->replaced());
|
||||
$limit = $Global::total_completed;
|
||||
}
|
||||
if(not defined $limit) {
|
||||
return ""
|
||||
}
|
||||
# --halt # => 1..100 (number of jobs failed, 101 means > 100)
|
||||
# --halt % => 1..100 (pct of jobs failed)
|
||||
if($Global::halt_pct and not $Global::halt_count) {
|
||||
$total_jobs ||= $Global::JobQueue->total_jobs();
|
||||
# From the pct compute the number of jobs that must fail/succeed
|
||||
$Global::halt_count = $total_jobs * $Global::halt_pct;
|
||||
}
|
||||
if($limit >= $Global::halt_count) {
|
||||
# At least N jobs have failed/succeded/completed
|
||||
# or at least N% have failed/succeded/completed
|
||||
# So we should prepare for exit
|
||||
if($Global::halt_fail or $Global::halt_done) {
|
||||
# Set exit status
|
||||
if(not defined $Global::halt_exitstatus) {
|
||||
if($Global::halt_pct) {
|
||||
# --halt now,fail=X% or soon,fail=X%
|
||||
# --halt now,done=X% or soon,done=X%
|
||||
$Global::halt_exitstatus =
|
||||
::ceil($Global::total_failed / $total_jobs * 100);
|
||||
} elsif($Global::halt_count) {
|
||||
# --halt now,fail=X or soon,fail=X
|
||||
# --halt now,done=X or soon,done=X
|
||||
$Global::halt_exitstatus = ::min($Global::total_failed,101);
|
||||
}
|
||||
if($Global::halt_count and $Global::halt_count == 1) {
|
||||
# --halt now,fail=1 or soon,fail=1
|
||||
# --halt now,done=1 or soon,done=1
|
||||
$Global::halt_exitstatus = $job->exitstatus();
|
||||
}
|
||||
}
|
||||
::debug("halt","Pct: ",$Global::halt_pct,
|
||||
" count: ",$Global::halt_count,"\n");
|
||||
} elsif($Global::halt_success) {
|
||||
$Global::halt_exitstatus = 0;
|
||||
}
|
||||
if($Global::halt_when eq "soon"
|
||||
and scalar(keys %Global::running) > 0) {
|
||||
::status
|
||||
("$Global::progname: Starting no more jobs. ".
|
||||
"Waiting for ". (keys %Global::running).
|
||||
" jobs to finish.");
|
||||
$Global::start_no_new_jobs ||= 1;
|
||||
}
|
||||
return($Global::halt_when);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -760,10 +760,10 @@ I<when> can be 'now' which means kill all running jobs and halt
|
|||
immediately, or it can be 'soon' which means wait for all running jobs
|
||||
to complete, but start no new jobs.
|
||||
|
||||
I<why> can be 'fail=X', 'fail=Y%', 'success=X', or 'success=Y%' where
|
||||
X is the number of jobs that has to fail or succeed before halting,
|
||||
and Y is the percentage of jobs that has to fail or succeed before
|
||||
halting.
|
||||
I<why> can be 'fail=X', 'fail=Y%', 'success=X', 'success=Y%',
|
||||
'done=X', or 'done=Y%' where X is the number of jobs that has to fail,
|
||||
succeed, or be done before halting, and Y is the percentage of jobs
|
||||
that has to fail, succeed, or be done before halting.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -793,6 +793,18 @@ exit when 3 jobs succeeds, but wait for running jobs to complete.
|
|||
|
||||
exit when 3% of the jobs have succeeded. Kill running jobs.
|
||||
|
||||
=item Z<> --halt now,done=1
|
||||
|
||||
exit when one of the jobs finishes. Kill running jobs.
|
||||
|
||||
=item Z<> --halt soon,done=3
|
||||
|
||||
exit when 3 jobs finishes, but wait for running jobs to complete.
|
||||
|
||||
=item Z<> --halt now,done=3%
|
||||
|
||||
exit when 3% of the jobs have finished. Kill running jobs.
|
||||
|
||||
=back
|
||||
|
||||
For backwards compability these also work:
|
||||
|
@ -2281,8 +2293,8 @@ Time out for command. If the command runs for longer than I<secs>
|
|||
seconds it will get killed as per B<--termseq>.
|
||||
|
||||
If I<secs> is followed by a % then the timeout will dynamically be
|
||||
computed as a percentage of the median average runtime. Only values
|
||||
> 100% will make sense.
|
||||
computed as a percentage of the median average runtime of successful
|
||||
jobs. Only values > 100% will make sense.
|
||||
|
||||
|
||||
=item B<--verbose>
|
||||
|
|
|
@ -685,7 +685,7 @@ par_tagstring_pipe() {
|
|||
|
||||
par_link_files_as_only_arg() {
|
||||
echo 'bug #50685: single ::::+ does not work'
|
||||
parallel echo ::::+ <(seq 10) <(seq 3) <(seq 4)
|
||||
parallel -k echo ::::+ <(seq 10) <(seq 3) <(seq 4)
|
||||
}
|
||||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
|
|
|
@ -16,17 +16,18 @@ par_retries_unreachable() {
|
|||
}
|
||||
|
||||
par_outside_file_handle_limit() {
|
||||
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
||||
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) |
|
||||
stdout parallel -uj 0 | egrep -v 'processes took|adjusting' |
|
||||
perl -pe 's/\d\d\d/999/'
|
||||
ulimit -n 1024
|
||||
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
|
||||
(echo echo Start; seq 1 20000 | perl -pe 's/^/true /'; echo echo end) |
|
||||
stdout parallel -uj 0 | egrep -v 'processes took|adjusting' |
|
||||
perl -pe 's/\d\d\d/999/'
|
||||
}
|
||||
|
||||
par_over_4GB() {
|
||||
echo '### Test if we can deal with output > 4 GB'
|
||||
echo |
|
||||
nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' |
|
||||
nice md5sum
|
||||
echo '### Test if we can deal with output > 4 GB'
|
||||
echo |
|
||||
nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' |
|
||||
nice md5sum
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -135,7 +135,7 @@ par_result() {
|
|||
parallel -k --results /tmp/parallel_results_test/testA echo {1} {2} ::: I II ::: III IIII
|
||||
ls /tmp/parallel_results_test/testA/*/*/*/*/*
|
||||
rm -rf /tmp/parallel_results_test/testA*
|
||||
|
||||
|
||||
echo "### Test --res"
|
||||
mkdir -p /tmp/parallel_results_test
|
||||
parallel -k --res /tmp/parallel_results_test/testD echo {1} {2} ::: I II ::: III IIII
|
||||
|
@ -201,32 +201,33 @@ par_parset() {
|
|||
. `which env_parallel.bash`
|
||||
|
||||
echo 'Put output into $myarray'
|
||||
parset myarray seq 10 ::: 14 15 16
|
||||
parset myarray -k seq 10 ::: 14 15 16
|
||||
echo "${myarray[1]}"
|
||||
|
||||
echo 'Put output into vars "$seq, $pwd, $ls"'
|
||||
parset "seq pwd ls" ::: "seq 10" pwd ls
|
||||
parset "seq pwd ls" -k ::: "seq 10" pwd ls
|
||||
echo "$seq"
|
||||
|
||||
echo 'Put output into vars ($seq, $pwd, $ls)':
|
||||
into_vars=(seq pwd ls)
|
||||
parset "${into_vars[*]}" ::: "seq 5" pwd ls
|
||||
parset "${into_vars[*]}" -k ::: "seq 5" pwd ls
|
||||
echo "$seq"
|
||||
|
||||
|
||||
echo 'The commands to run can be an array'
|
||||
cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd")
|
||||
parset data ::: "${cmd[@]}"
|
||||
parset data -k ::: "${cmd[@]}"
|
||||
echo "${data[0]}"
|
||||
echo "${data[1]}"
|
||||
|
||||
|
||||
echo 'You cannot pipe into parset, but must use a tempfile'
|
||||
seq 10 > parallel_input
|
||||
parset res echo :::: parallel_input
|
||||
seq 10 > /tmp/parset_input_$$
|
||||
parset res -k echo :::: /tmp/parset_input_$$
|
||||
echo "${res[0]}"
|
||||
echo "${res[9]}"
|
||||
rm /tmp/parset_input_$$
|
||||
|
||||
echo 'Commands with newline require -0'
|
||||
parset var -0 ::: 'echo "line1
|
||||
parset var -k -0 ::: 'echo "line1
|
||||
line2"' 'echo "command2"'
|
||||
echo "${var[0]}"
|
||||
}
|
||||
|
|
|
@ -4,12 +4,13 @@ par_print_before_halt_on_error() {
|
|||
echo '### What is printed before the jobs are killed'
|
||||
mytest() {
|
||||
HALT=$1
|
||||
(echo 0;
|
||||
echo 3;
|
||||
(echo 0.1;
|
||||
echo 3.2;
|
||||
seq 0 7;
|
||||
echo 0;
|
||||
echo 0.3;
|
||||
echo 8) |
|
||||
parallel --tag -j10 -kq --halt $HALT perl -e 'sleep $ARGV[0];print STDERR @ARGV,"\n"; '$HALT' > 0 ? exit shift : exit not shift;';
|
||||
parallel --tag --delay 0.1 -j4 -kq --halt $HALT \
|
||||
perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; '$HALT' > 0 ? exit shift : exit not shift;' {};
|
||||
echo exit code $?
|
||||
}
|
||||
export -f mytest
|
||||
|
@ -20,21 +21,22 @@ par_testhalt() {
|
|||
testhalt_false() {
|
||||
echo '### testhalt --halt '$1;
|
||||
(yes 0 | head -n 10; seq 10) |
|
||||
stdout parallel -kj4 --halt $1 \
|
||||
'sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
|
||||
stdout parallel -kj4 --delay 0.23 --halt $1 \
|
||||
'echo job {#}; sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
|
||||
}
|
||||
testhalt_true() {
|
||||
echo '### testhalt --halt '$1;
|
||||
(seq 10; yes 0 | head -n 10) |
|
||||
stdout parallel -kj4 --halt $1 \
|
||||
'sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
|
||||
stdout parallel -kj4 --delay 0.17 --halt $1 \
|
||||
'echo job {#}; sleep {= $_=0.3*($_+1+seq()) =}; exit {}'; echo $?;
|
||||
};
|
||||
export -f testhalt_false;
|
||||
export -f testhalt_true;
|
||||
|
||||
stdout parallel -kj0 testhalt_{4} {1},{2}={3} \
|
||||
::: now soon ::: fail success ::: 0 1 2 30% 70% ::: true false |
|
||||
# Remove lines that only show up now and then
|
||||
perl -ne '/Starting no more jobs./ or print'
|
||||
stdout parallel -kj0 --delay 0.11 --tag testhalt_{4} {1},{2}={3} \
|
||||
::: now soon ::: fail success done ::: 0 1 2 30% 70% ::: true false |
|
||||
# Remove lines that only show up now and then
|
||||
perl -ne '/Starting no more jobs./ or print'
|
||||
}
|
||||
|
||||
export -f $(compgen -A function | grep par_)
|
||||
|
|
|
@ -950,7 +950,7 @@ par_bash_environment_too_big() {
|
|||
env_parallel -S lo echo ::: OK
|
||||
|
||||
bigvar=u
|
||||
eval 'bigfunc() { a="'"$(yes a| head -c 118k)"'"; };'
|
||||
eval 'bigfunc() { a="'"$(yes a| head -c 120k)"'"; };'
|
||||
env_parallel echo ::: OK
|
||||
env_parallel -S lo echo ::: OK
|
||||
|
||||
|
@ -963,7 +963,7 @@ par_bash_environment_too_big() {
|
|||
env_parallel -S lo echo ::: fail
|
||||
|
||||
bigvar=u
|
||||
eval 'bigfunc() { a="'"$(yes a| head -c 119k)"'"; };'
|
||||
eval 'bigfunc() { a="'"$(yes a| head -c 121k)"'"; };'
|
||||
env_parallel echo ::: fail
|
||||
env_parallel -S lo echo ::: fail
|
||||
_EOF
|
||||
|
|
|
@ -111,5 +111,5 @@ echo '### Test bug #35820: sem breaks if $HOME is not writable'
|
|||
rm -rf /tmp/.parallel;
|
||||
HOME=/tmp sem echo OK;
|
||||
HOME=/tmp sem --wait;
|
||||
HOME=/usr/this/should/fail stdout sem echo should fail
|
||||
ssh lo 'HOME=/usr/this/should/fail stdout sem echo should fail'
|
||||
EOF
|
||||
|
|
|
@ -7,26 +7,6 @@ test -d "parallel-00000000" || mkdir "parallel-00000000"
|
|||
(cd src && make top_distdir=../parallel-00000000 distdir=../parallel-00000000/src \
|
||||
am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
|
||||
make[0]: Entering directory '~/privat/parallel/src'
|
||||
pod2man --release='00000000' --center='parallel' \
|
||||
--section=1 ./parset > ./parset.1n \
|
||||
&& mv ./parset.1n ./parset.1 \
|
||||
|| echo "Warning: pod2man not found. Using old parset.1"
|
||||
/bin/bash: pod2man: command not found
|
||||
Warning: pod2man not found. Using old parset.1
|
||||
pod2html --title "GNU parset" ./parset > ./parset.htmln \
|
||||
&& mv ./parset.htmln ./parset.html \
|
||||
|| echo "Warning: pod2html not found. Using old parset.html"
|
||||
/bin/bash: pod2html: command not found
|
||||
Warning: pod2html not found. Using old parset.html
|
||||
rm -f ./pod2htm*
|
||||
pod2texi --output=./parset.texi ./parset \
|
||||
|| echo "Warning: pod2texi not found. Using old parset.texi"
|
||||
/bin/bash: pod2texi: command not found
|
||||
Warning: pod2texi not found. Using old parset.texi
|
||||
pod2pdf --output-file ./parset.pdf ./parset --title "GNU parset" \
|
||||
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
Warning: pod2pdf not found. Using old parset.pdf
|
||||
make[0]: Leaving directory '~/privat/parallel/src'
|
||||
test -n "" \
|
||||
|| find "parallel-00000000" -type d ! -perm -755 \
|
||||
|
@ -101,12 +81,6 @@ pod2man --release='00000000' --center='parallel' \
|
|||
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
|
||||
/bin/bash: pod2man: command not found
|
||||
Warning: pod2man not found. Using old parallel_alternatives.7
|
||||
pod2man --release='00000000' --center='parallel' \
|
||||
--section=1 ./parset > ./parset.1n \
|
||||
&& mv ./parset.1n ./parset.1 \
|
||||
|| echo "Warning: pod2man not found. Using old parset.1"
|
||||
/bin/bash: pod2man: command not found
|
||||
Warning: pod2man not found. Using old parset.1
|
||||
pod2html --title "GNU Parallel" ./parallel.pod > ./parallel.htmln \
|
||||
&& mv ./parallel.htmln ./parallel.html \
|
||||
|| echo "Warning: pod2html not found. Using old parallel.html"
|
||||
|
@ -187,10 +161,6 @@ pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|
|||
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
|
||||
/bin/bash: pod2texi: command not found
|
||||
Warning: pod2texi not found. Using old parallel_alternatives.texi
|
||||
pod2texi --output=./parset.texi ./parset \
|
||||
|| echo "Warning: pod2texi not found. Using old parset.texi"
|
||||
/bin/bash: pod2texi: command not found
|
||||
Warning: pod2texi not found. Using old parset.texi
|
||||
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|
||||
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
|
@ -223,10 +193,6 @@ pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --
|
|||
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
|
||||
pod2pdf --output-file ./parset.pdf ./parset --title "GNU parset" \
|
||||
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
Warning: pod2pdf not found. Using old parset.pdf
|
||||
make[0]: Entering directory '/tmp/parallel-00000000/src'
|
||||
/bin/mkdir -p '/usr/local/bin'
|
||||
/usr/bin/install -c parallel sql niceload parcat env_parallel env_parallel.ash env_parallel.bash env_parallel.csh env_parallel.dash env_parallel.fish env_parallel.ksh env_parallel.pdksh env_parallel.sh env_parallel.tcsh env_parallel.zsh '/usr/local/bin'
|
||||
|
@ -315,10 +281,6 @@ pod2texi --output=./parallel_alternatives.texi ./parallel_alternatives.pod \
|
|||
|| echo "Warning: pod2texi not found. Using old parallel_alternatives.texi"
|
||||
/bin/bash: pod2texi: command not found
|
||||
Warning: pod2texi not found. Using old parallel_alternatives.texi
|
||||
pod2texi --output=./parset.texi ./parset \
|
||||
|| echo "Warning: pod2texi not found. Using old parset.texi"
|
||||
/bin/bash: pod2texi: command not found
|
||||
Warning: pod2texi not found. Using old parset.texi
|
||||
pod2pdf --output-file ./parallel.pdf ./parallel.pod --title "GNU Parallel" \
|
||||
|| echo "Warning: pod2pdf not found. Using old parallel.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
|
@ -351,10 +313,6 @@ pod2pdf --output-file ./parallel_alternatives.pdf ./parallel_alternatives.pod --
|
|||
|| echo "Warning: pod2pdf not found. Using old parallel_alternatives.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
Warning: pod2pdf not found. Using old parallel_alternatives.pdf
|
||||
pod2pdf --output-file ./parset.pdf ./parset --title "GNU parset" \
|
||||
|| echo "Warning: pod2pdf not found. Using old parset.pdf"
|
||||
/bin/bash: pod2pdf: command not found
|
||||
Warning: pod2pdf not found. Using old parset.pdf
|
||||
/bin/mkdir -p '/usr/local/share/doc/parallel'
|
||||
/usr/bin/install -c -m 644 parallel.html env_parallel.html sem.html sql.html niceload.html parallel_tutorial.html parallel_design.html parallel_alternatives.html parcat.html parallel.texi env_parallel.texi sem.texi sql.texi niceload.texi parallel_tutorial.texi parallel_design.texi parallel_alternatives.texi parcat.texi parset.texi parallel.pdf env_parallel.pdf sem.pdf sql.pdf niceload.pdf parallel_tutorial.pdf parallel_design.pdf parallel_alternatives.pdf parcat.pdf parset.pdf '/usr/local/share/doc/parallel'
|
||||
pod2man --release='00000000' --center='parallel' \
|
||||
|
@ -405,12 +363,6 @@ pod2man --release='00000000' --center='parallel' \
|
|||
|| echo "Warning: pod2man not found. Using old parallel_alternatives.7"
|
||||
/bin/bash: pod2man: command not found
|
||||
Warning: pod2man not found. Using old parallel_alternatives.7
|
||||
pod2man --release='00000000' --center='parallel' \
|
||||
--section=1 ./parset > ./parset.1n \
|
||||
&& mv ./parset.1n ./parset.1 \
|
||||
|| echo "Warning: pod2man not found. Using old parset.1"
|
||||
/bin/bash: pod2man: command not found
|
||||
Warning: pod2man not found. Using old parset.1
|
||||
/bin/mkdir -p '/usr/local/share/man/man1'
|
||||
/usr/bin/install -c -m 644 parallel.1 env_parallel.1 sem.1 sql.1 niceload.1 parcat.1 parset.1 '/usr/local/share/man/man1'
|
||||
/bin/mkdir -p '/usr/local/share/man/man7'
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
make[1]: Entering directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
|
||||
make[1]: Entering directory '~/privat/parallel/testsuite'
|
||||
# || true - because this should not fail if the VM is not running
|
||||
VBoxManage controlvm CentOS3-root:centos3 savestate || true
|
||||
VBoxManage controlvm RedHat9-root:redhat9 savestate || true
|
||||
VBoxManage controlvm OracleXE savestate || true
|
||||
make[1]: Leaving directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
|
||||
make[1]: Leaving directory '~/privat/parallel/testsuite'
|
||||
echo '### bug #44358: 2 GB records cause problems for -N'
|
||||
### bug #44358: 2 GB records cause problems for -N
|
||||
echo '5 GB version: Eats 12.5 GB'
|
||||
|
@ -52,7 +52,7 @@ Eats 4.7 GB
|
|||
parallel: Warning: --blocksize >= 2G causes problems. Using 2G-1.
|
||||
echo '**'
|
||||
**
|
||||
make[1]: Entering directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
|
||||
make[1]: Entering directory '~/privat/parallel/testsuite'
|
||||
# Make sure we can reach the virtual machines
|
||||
#sudo ifconfig wlp13s0:0 192.168.1.72 || sudo ifconfig wlan0:0 192.168.1.72
|
||||
sudo ifconfig enp14s0:0 192.168.1.72 || sudo ifconfig eth0:0 192.168.1.72
|
||||
|
@ -64,4 +64,4 @@ VBoxManage startvm RedHat9-root:redhat9 || VBoxManage controlvm RedHat9-root:red
|
|||
Waiting for VM "RedHat9-root:redhat9" to power on...
|
||||
VM "RedHat9-root:redhat9" has been successfully started.
|
||||
parallel 'ping {} | read' ::: redhat9.tange.dk centos3.tange.dk
|
||||
make[1]: Leaving directory '/mnt/4tb/home/tange/privat/parallel/testsuite'
|
||||
make[1]: Leaving directory '~/privat/parallel/testsuite'
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -237,7 +237,7 @@ echo a b | wc -w
|
|||
2
|
||||
echo '### Test bug #35820: sem breaks if $HOME is not writable'
|
||||
### Test bug #35820: sem breaks if $HOME is not writable
|
||||
echo 'Workaround: use another writable dir'; rm -rf /tmp/.parallel; HOME=/tmp sem echo OK; HOME=/tmp sem --wait; HOME=/usr/this/should/fail stdout sem echo should fail
|
||||
echo 'Workaround: use another writable dir'; rm -rf /tmp/.parallel; HOME=/tmp sem echo OK; HOME=/tmp sem --wait; ssh lo 'HOME=/usr/this/should/fail stdout sem echo should fail'
|
||||
Workaround: use another writable dir
|
||||
OK
|
||||
parallel: Error: Cannot change into non-executable dir /usr/this/should/fail/.parallel: No such file or directory
|
||||
parallel: Error: Cannot change into non-executable dir /usr/this/should/fail/.parallel/semaphores: No such file or directory
|
||||
|
|
|
@ -699,9 +699,12 @@ Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
|
|||
9
|
||||
9
|
||||
9
|
||||
9
|
||||
parallel: This job failed:
|
||||
echo X; exit X
|
||||
parallel: Starting no more jobs. Waiting for 1 jobs to finish.
|
||||
parallel: This job failed:
|
||||
echo X; exit X
|
||||
parallel -j2 --halt now,fail=1 echo {}\; exit {} ::: 0 0 1 2 3
|
||||
9
|
||||
9
|
||||
|
@ -726,6 +729,8 @@ echo X; exit X
|
|||
9
|
||||
9
|
||||
9
|
||||
9
|
||||
9
|
||||
parallel: This job succeeded:
|
||||
echo X; exit X
|
||||
parallel -k --retries 3 \
|
||||
|
|
Loading…
Reference in a new issue