parallel: Fixed bug #63263: Joblog does not have the same exit code as bash.

This commit is contained in:
Ole Tange 2022-11-26 21:42:41 +01:00
parent c444cfc333
commit 24d23541c2
20 changed files with 13738 additions and 71 deletions

8
NEWS
View file

@ -6,7 +6,7 @@ New in this release:
* Use --total-jobs for --eta/--bar if generating jobs is slow. * Use --total-jobs for --eta/--bar if generating jobs is slow.
* A lot of bug fixed in --latest-line. * A lot of bugs fixed in --latest-line.
* Better support for MSYS2. * Better support for MSYS2.
@ -14,10 +14,12 @@ New in this release:
* --bar supports UTF8. * --bar supports UTF8.
* GNU Parallel is now on Mastodon: @GNU_Parallel@hostux.social
* Bug fixes and man page updates. * Bug fixes and man page updates.
News about GNU Parallel:
* GNU Parallel is now on Mastodon: @GNU_Parallel@hostux.social
20221022 20221022

View file

@ -4,6 +4,9 @@
Quote of the month: Quote of the month:
GNU Parallel absolutely rocks.
-- Austin Mordahl@Stackoverflow
Got around to using GNU parallel for the first time from a suggestion by @jdwasmuth ... now I'm wishing I started using this years ago Got around to using GNU parallel for the first time from a suggestion by @jdwasmuth ... now I'm wishing I started using this years ago
-- Stefan Gavriliuc @GavriliucStefan@twitter -- Stefan Gavriliuc @GavriliucStefan@twitter

View file

@ -261,32 +261,24 @@ from:tange@gnu.org
to:parallel@gnu.org, bug-parallel@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm> stable-bcc: Jesse Alama <jessealama@fastmail.fm>
Subject: GNU Parallel 20221122 ('Херсо́н') released Subject: GNU Parallel 20221222 ('ChatGPT/Mauneloa/#A4Revolution/#A4革命/#MahsaAmini') released
GNU Parallel 20221122 ('Херсо́н') has been released. It is available for download at: lbry://@GnuParallel:4 GNU Parallel 20221222 ('') has been released. It is available for download at: lbry://@GnuParallel:4
Quote of the month: Quote of the month:
[GNU Parallel] is the most amazing tool ever invented for bioinformatics! <<>>
-- Istvan Albert https://www.ialbert.me/
New in this release: New in this release:
* Support for IPv6 adresses and _ in hostnames in --sshlogin. * --results works on more file systems (e.g. fat)
* Use --total-jobs for --eta/--bar if generating jobs is slow. * <<>>
* A lot of bug fixed in --latest-line. News about GNU Parallel:
* Better support MSYS2. https://www.youtube.com/watch?v=duheTWLIrp8
https://talkpython.fm/episodes/show/392/data-science-from-the-command-line
* Better Text::CSV error messages.
* --bar supports UTF8.
* GNU Parallel is now on Mastodon: @GNU_Parallel@hostux.social
* Bug fixes and man page updates.
GNU Parallel - For people who live life in the parallel lane. GNU Parallel - For people who live life in the parallel lane.

View file

@ -104,9 +104,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -90,9 +90,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -104,9 +104,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -87,9 +87,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -89,9 +89,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -104,9 +104,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -79,9 +79,7 @@ env_parallel() {
_ignore_RO="`_ignore_READONLY`" _ignore_RO="`_ignore_READONLY`"
# shellcheck disable=SC2006 # shellcheck disable=SC2006
_ignore_HARD="`_ignore_HARDCODED`" _ignore_HARD="`_ignore_HARDCODED`"
# Macos-grep does not like long patterns # To avoid depending on grep dialect, use Perl version of:
# Old Solaris grep does not support -E
# Perl Version of:
# grep -Ev '^(...)$' | # grep -Ev '^(...)$' |
perl -ne '/^( perl -ne '/^(
PARALLEL_ENV| PARALLEL_ENV|

View file

@ -5425,8 +5425,16 @@ sub reaper() {
$job->set_exitstatus(-2); $job->set_exitstatus(-2);
$job->set_exitsignal(0); $job->set_exitsignal(0);
} else { } else {
$job->set_exitstatus($? >> 8);
$job->set_exitsignal($? & 127); $job->set_exitsignal($? & 127);
if($job->exitstatus()) {
# Exit status already set - probably by --timeout
} elsif($? & 127) {
# Killed by signal. Many shells return: 128 | $signal
$job->set_exitstatus(128 | $?);
} else {
# Normal exit
$job->set_exitstatus($? >> 8);
}
} }
debug("run", "\nseq ",$job->seq()," died (", $job->exitstatus(), ")"); debug("run", "\nseq ",$job->seq()," died (", $job->exitstatus(), ")");

View file

@ -8,6 +8,45 @@
# Each should be taking 10-30s and be possible to run in parallel # Each should be taking 10-30s and be possible to run in parallel
# I.e.: No race conditions, no logins # I.e.: No race conditions, no logins
par_quote_special_results() {
doit() {
mkfs=$1
img=$(mktemp /dev/shm/par-test-loop-XXXX.img)
dir=$(mktemp -d /tmp/par-test-loop-XXXX)
dd if=/dev/zero bs=1000k count=150 > $img
# Use the mkfs.$filesystem
$mkfs $img
sudo mount $img $dir -oloop,uid=`id -u` 2>/dev/null ||
sudo mount $img $dir -oloop
cd $dir
sudo chown `id -u` .
df $dir
printf "%s\0" '' +m . +_ .. +__ ,. ,.. + ++ / +z |
parallel -0 --results a echo
find a | sort
seq 128 | perl -ne 'printf "%c\0",$_' |
parallel -0 --results b128 echo
find b128 | sort
seq 128 255 | perl -ne 'printf "%c\0",$_' |
parallel -0 --results b255 echo
find b255 | sort
cd
sudo umount $dir
rm -r $dir/
rm $img
}
export -f doit
stdout parallel -k --tag --plus doit ::: \
mkfs.btrfs mkfs.exfat mkfs.ext2 mkfs.ext3 mkfs.ext4 \
"mkfs.reiserfs -fq" "mkfs.ntfs -F" "mkfs.xfs -f" mkfs.minix \
mkfs.fat mkfs.vfat mkfs.msdos mkfs.f2fs |
perl -pe 's:(/dev/loop|par-test-loop)\S+:$1:g;s/ +/ /g' |
G -v MB/s -v UUID -v Binutils
# Skip:
# mkfs.bfs - ro
# mkfs.cramfs - ro
}
par_totaljobs() { par_totaljobs() {
. `which env_parallel.bash` . `which env_parallel.bash`
myrun() { myrun() {

View file

@ -14,6 +14,65 @@ export TMP5G
rm -f /tmp/*.{tmx,pac,arg,all,log,swp,loa,ssh,df,pip,tmb,chr,tms,par} rm -f /tmp/*.{tmx,pac,arg,all,log,swp,loa,ssh,df,pip,tmb,chr,tms,par}
par_compare_exit_codes() {
echo '### compare the exit codes'
echo 'directly from shells, shells called from parallel,'
echo 'killed with different signals'
echo
echo sig=joblog_sig shell=parallel=joblog
selfkill=$(mktemp)
export selfkill
echo 'kill -$1 $$' >$selfkill
exit=$(mktemp)
export exit
echo 'exit $1' >$exit
doit() {
shell=$1
sig=$2
sig128=$(( sig + 128 ))
sh -c "$shell $selfkill $sig" 2>/dev/null
raw=$?
sh -c "$shell $exit $sig128" 2>/dev/null
raw128=$?
log=$(mktemp)
$shell -c "parallel --halt now,done=1 --jl $log $shell $selfkill ::: $sig" 2>/dev/null
#echo parallel $shell $sig = $?
parallel=$?
joblog_exit=$(field 7 < $log | tail -n1)
joblog_signal=$(field 8 < $log | tail -n1)
$shell -c "parallel --halt now,done=1 --jl $log $shell $exit ::: $sig128" 2>/dev/null
parallel128=$?
joblog_exit128=$(field 7 < $log | tail -n1)
joblog_signal128=$(field 8 < $log | tail -n1)
#echo joblog p $shell $sig $(field 8,7 < $log | tail -n1)
rm $log
echo $shell sig' ' $sig=$joblog_signal $raw=$parallel=$joblog_exit
echo $shell exit $sig128=$joblog_signal128 $raw128=$parallel128=$joblog_exit128
}
export -f doit
# These give the same exit code prepended with 'true;' or not
OK="ash csh dash fish fizsh posh rc sash sh tcsh"
# These do not give the same exit code prepended with 'true;' or not
BAD="bash ksh93 mksh static-sh yash zsh"
(
# Most block on signals: 19+20+21+22
ulimit -n `ulimit -Hn`
parallel -j1000% -k doit ::: $OK $BAD ::: {1..18} {23..64}
# fdsh blocks on a lot more signals
parallel -j1000% -k doit ::: fdsh ::: 2 {9..12} {14..18} {20..23} 26 27 29 30 {32..64}
) |
# Ignore where the exit codes are the same
perl -ne '/(\d+)=\1=\1/ or print'
rm $selfkill
}
par_retries_unreachable() { par_retries_unreachable() {
echo '### Test of --retries on unreachable host' echo '### Test of --retries on unreachable host'
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo

View file

@ -6,6 +6,16 @@
# These fail regularly # These fail regularly
par_ll_tag() {
(
parallel --tag --ll -q printf "a\n{}\n" ::: should-be-tagged
parallel --tag --ll -q printf "a\n\r{}\n" ::: should-be-tagged
parallel --color --tag --ll true ::: A
parallel --color --tag --ll 'echo;true {}' ::: B
parallel --color --tag --ll 'echo {};true {}' ::: C
) | puniq
}
par_ll_lb_color() { par_ll_lb_color() {
echo 'bug #62386: --color (--ctag but without --tag)' echo 'bug #62386: --color (--ctag but without --tag)'
echo 'bug #62438: See last line from multiple jobslots' echo 'bug #62438: See last line from multiple jobslots'

View file

@ -78,8 +78,9 @@ par_many_var() {
export -f pecho export -f pecho
gen() { seq -f %f 1000000000000000 1000000000050000 | head -c $1; } gen() { seq -f %f 1000000000000000 1000000000050000 | head -c $1; }
for a in `seq 6000`; do eval "export a$a=1" ; done for a in `seq 6000`; do eval "export a$a=1" ; done
gen 40000 | stdout parallel -Xkj1 'pecho {} {} {} {} | wc' | gen 40000 | stdout parallel -Xkj1 'pecho {} {} {} {} | wc -c' |
perl -pe 's/\d{10,}.\d+ //g' perl -pe 's/\d{10,}.\d+ //g; s/(\d+)\d\d\d/${1}XXX/g;' |
grep 22XXX
} }
par_many_var_func() { par_many_var_func() {
@ -131,7 +132,8 @@ par_many_var_big_func() {
for a in `seq 10`; do eval "a$a() { '$big'; }" ; done for a in `seq 10`; do eval "a$a() { '$big'; }" ; done
for a in `seq 10`; do eval export -f a$a ; done for a in `seq 10`; do eval export -f a$a ; done
gen 40000 | stdout parallel -Xkj1 'pecho {} {} {} {} | wc -c' | gen 40000 | stdout parallel -Xkj1 'pecho {} {} {} {} | wc -c' |
perl -pe 's/\d{10,}.\d+ //g' perl -pe 's/\d{10,}.\d+ //g; s/(\d+)\d\d\d/${1}XXX/g;' |
grep 5XXX
} }
par_big_func_name() { par_big_func_name() {
@ -143,7 +145,8 @@ par_big_func_name() {
big=`perl -e print\"x\"x10000` big=`perl -e print\"x\"x10000`
for a in `seq 10`; do eval "export a$big$a=1" ; done for a in `seq 10`; do eval "export a$big$a=1" ; done
gen 30000 | stdout parallel -Xkj1 'pecho {} {} {} {} | wc -c' | gen 30000 | stdout parallel -Xkj1 'pecho {} {} {} {} | wc -c' |
perl -pe 's/\d{10,}.\d+ //g' perl -pe 's/\d{10,}.\d+ //g; s/(\d+)\d\d\d/${1}XXX/g;' |
grep 18XXX
} }
par_big_var_func_name() { par_big_var_func_name() {
@ -157,7 +160,8 @@ par_big_var_func_name() {
for a in `seq 10`; do eval "a$big$a() { 1; }" ; done for a in `seq 10`; do eval "a$big$a() { 1; }" ; done
for a in `seq 10`; do eval export -f a$big$a ; done for a in `seq 10`; do eval export -f a$big$a ; done
gen 80000 | stdout parallel --load 4 -Xkj1 'pecho {} {} {} {} | wc -c' | gen 80000 | stdout parallel --load 4 -Xkj1 'pecho {} {} {} {} | wc -c' |
perl -pe 's/\d{10,}.\d+ //g' perl -pe 's/\d{10,}.\d+ //g; s/(\d+)\d\d\d/${1}XXX/g;' |
grep 18XXX
} }
macsshlogin=$(parallel --halt now,success=1 ssh {} echo {} ::: ota@mac macosx.p) macsshlogin=$(parallel --halt now,success=1 ssh {} echo {} ::: ota@mac macosx.p)

File diff suppressed because it is too large Load diff

View file

@ -648,23 +648,23 @@ par_result ### Test --results --header : piped
par_result parallel: Warning: A NUL character in the input was replaced with \0. par_result parallel: Warning: A NUL character in the input was replaced with \0.
par_result parallel: Warning: NUL cannot be passed through in the argument list. par_result parallel: Warning: NUL cannot be passed through in the argument list.
par_result parallel: Warning: Did you mean to use the --null option? par_result parallel: Warning: Did you mean to use the --null option?
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2 par_result /tmp/parallel_results_test/testF/Col/backslash\tab/2
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof par_result /tmp/parallel_results_test/testF/Col/backslash\tab/2/slash+znull\0eof
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof/seq par_result /tmp/parallel_results_test/testF/Col/backslash\tab/2/slash+znull\0eof/seq
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof/stderr par_result /tmp/parallel_results_test/testF/Col/backslash\tab/2/slash+znull\0eof/stderr
par_result /tmp/parallel_results_test/testF/Col/backslash\\tab/2/slash\_null\\0eof/stdout par_result /tmp/parallel_results_test/testF/Col/backslash\tab/2/slash+znull\0eof/stdout
par_result ### Test --results --header : piped - non-existing column header par_result ### Test --results --header : piped - non-existing column header
par_result parallel: Warning: A NUL character in the input was replaced with \0. par_result parallel: Warning: A NUL character in the input was replaced with \0.
par_result parallel: Warning: NUL cannot be passed through in the argument list. par_result parallel: Warning: NUL cannot be passed through in the argument list.
par_result parallel: Warning: Did you mean to use the --null option? par_result parallel: Warning: Did you mean to use the --null option?
par_result /tmp/parallel_results_test/testG/ par_result /tmp/parallel_results_test/testG/
par_result /tmp/parallel_results_test/testG/Col1 par_result /tmp/parallel_results_test/testG/Col1
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab par_result /tmp/parallel_results_test/testG/Col1/backslash\tab
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2 par_result /tmp/parallel_results_test/testG/Col1/backslash\tab/2
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof par_result /tmp/parallel_results_test/testG/Col1/backslash\tab/2/slash+znull\0eof
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof/seq par_result /tmp/parallel_results_test/testG/Col1/backslash\tab/2/slash+znull\0eof/seq
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof/stderr par_result /tmp/parallel_results_test/testG/Col1/backslash\tab/2/slash+znull\0eof/stderr
par_result /tmp/parallel_results_test/testG/Col1/backslash\\tab/2/slash\_null\\0eof/stdout par_result /tmp/parallel_results_test/testG/Col1/backslash\tab/2/slash+znull\0eof/stdout
par_result /tmp/parallel_results_test/testG/Col1/v1 par_result /tmp/parallel_results_test/testG/Col1/v1
par_result /tmp/parallel_results_test/testG/Col1/v1/2 par_result /tmp/parallel_results_test/testG/Col1/v1/2
par_result /tmp/parallel_results_test/testG/Col1/v1/2/v2 par_result /tmp/parallel_results_test/testG/Col1/v1/2/v2

View file

@ -1,3 +1,135 @@
par_compare_exit_codes ### compare the exit codes
par_compare_exit_codes directly from shells, shells called from parallel,
par_compare_exit_codes killed with different signals
par_compare_exit_codes
par_compare_exit_codes sig=joblog_sig shell=parallel=joblog
par_compare_exit_codes par_compare_exit_codes
par_compare_exit_codes csh sig 2=0 130=1=1
par_compare_exit_codes posh sig 34=11 162=139=139
par_compare_exit_codes posh sig 35=11 163=139=139
par_compare_exit_codes posh sig 36=11 164=139=139
par_compare_exit_codes posh sig 37=11 165=139=139
par_compare_exit_codes posh sig 38=11 166=139=139
par_compare_exit_codes posh sig 39=11 167=139=139
par_compare_exit_codes posh sig 40=11 168=139=139
par_compare_exit_codes posh sig 41=11 169=139=139
par_compare_exit_codes posh sig 42=11 170=139=139
par_compare_exit_codes posh sig 43=11 171=139=139
par_compare_exit_codes posh sig 44=11 172=139=139
par_compare_exit_codes posh sig 45=11 173=139=139
par_compare_exit_codes posh sig 46=11 174=139=139
par_compare_exit_codes posh sig 47=11 175=139=139
par_compare_exit_codes posh sig 48=11 176=139=139
par_compare_exit_codes posh sig 49=11 177=139=139
par_compare_exit_codes posh sig 50=11 178=139=139
par_compare_exit_codes posh sig 51=11 179=139=139
par_compare_exit_codes posh sig 52=11 180=139=139
par_compare_exit_codes posh sig 53=11 181=139=139
par_compare_exit_codes posh sig 54=11 182=139=139
par_compare_exit_codes posh sig 55=11 183=139=139
par_compare_exit_codes posh sig 56=11 184=139=139
par_compare_exit_codes posh sig 57=11 185=139=139
par_compare_exit_codes posh sig 58=11 186=139=139
par_compare_exit_codes posh sig 59=11 187=139=139
par_compare_exit_codes posh sig 60=11 188=139=139
par_compare_exit_codes posh sig 61=11 189=139=139
par_compare_exit_codes posh sig 62=11 190=139=139
par_compare_exit_codes posh sig 63=11 191=139=139
par_compare_exit_codes posh sig 64=11 192=139=139
par_compare_exit_codes par_compare_exit_codes
par_compare_exit_codes tcsh sig 2=0 130=1=1
par_compare_exit_codes fdsh sig 2=0 0=2=2
par_compare_exit_codes fdsh exit 130=0 130=2=2
par_compare_exit_codes fdsh sig 9=0 137=2=2
par_compare_exit_codes fdsh exit 137=0 137=2=2
par_compare_exit_codes fdsh sig 10=0 0=2=2
par_compare_exit_codes fdsh exit 138=0 138=2=2
par_compare_exit_codes fdsh sig 11=0 0=2=2
par_compare_exit_codes fdsh exit 139=0 139=2=2
par_compare_exit_codes fdsh sig 12=0 0=2=2
par_compare_exit_codes fdsh exit 140=0 140=2=2
par_compare_exit_codes fdsh sig 15=0 0=2=2
par_compare_exit_codes fdsh exit 143=0 143=2=2
par_compare_exit_codes fdsh sig 16=0 144=2=2
par_compare_exit_codes fdsh exit 144=0 144=2=2
par_compare_exit_codes fdsh sig 17=0 0=2=2
par_compare_exit_codes fdsh exit 145=0 145=2=2
par_compare_exit_codes fdsh sig 18=0 0=2=2
par_compare_exit_codes fdsh exit 146=0 146=2=2
par_compare_exit_codes fdsh sig 20=0 0=2=2
par_compare_exit_codes fdsh exit 148=0 148=2=2
par_compare_exit_codes fdsh sig 21=0 0=2=2
par_compare_exit_codes fdsh exit 149=0 149=2=2
par_compare_exit_codes fdsh sig 22=0 0=2=2
par_compare_exit_codes fdsh exit 150=0 150=2=2
par_compare_exit_codes fdsh sig 23=0 0=2=2
par_compare_exit_codes fdsh exit 151=0 151=2=2
par_compare_exit_codes fdsh sig 26=0 154=2=2
par_compare_exit_codes fdsh exit 154=0 154=2=2
par_compare_exit_codes fdsh sig 27=0 155=2=2
par_compare_exit_codes fdsh exit 155=0 155=2=2
par_compare_exit_codes fdsh sig 29=0 157=2=2
par_compare_exit_codes fdsh exit 157=0 157=2=2
par_compare_exit_codes fdsh sig 30=0 158=2=2
par_compare_exit_codes fdsh exit 158=0 158=2=2
par_compare_exit_codes fdsh sig 32=0 0=2=2
par_compare_exit_codes fdsh exit 160=0 160=2=2
par_compare_exit_codes fdsh sig 33=0 0=2=2
par_compare_exit_codes fdsh exit 161=0 161=2=2
par_compare_exit_codes fdsh sig 35=0 163=2=2
par_compare_exit_codes fdsh exit 163=0 163=2=2
par_compare_exit_codes fdsh sig 36=0 164=2=2
par_compare_exit_codes fdsh exit 164=0 164=2=2
par_compare_exit_codes fdsh sig 37=0 165=2=2
par_compare_exit_codes fdsh exit 165=0 165=2=2
par_compare_exit_codes fdsh sig 38=0 166=2=2
par_compare_exit_codes fdsh exit 166=0 166=2=2
par_compare_exit_codes fdsh sig 39=0 167=2=2
par_compare_exit_codes fdsh exit 167=0 167=2=2
par_compare_exit_codes fdsh sig 40=0 168=2=2
par_compare_exit_codes fdsh exit 168=0 168=2=2
par_compare_exit_codes fdsh sig 41=0 169=2=2
par_compare_exit_codes fdsh exit 169=0 169=2=2
par_compare_exit_codes fdsh sig 42=0 170=2=2
par_compare_exit_codes fdsh exit 170=0 170=2=2
par_compare_exit_codes fdsh sig 43=0 171=2=2
par_compare_exit_codes fdsh exit 171=0 171=2=2
par_compare_exit_codes fdsh sig 45=0 173=2=2
par_compare_exit_codes fdsh exit 173=0 173=2=2
par_compare_exit_codes fdsh sig 46=0 174=2=2
par_compare_exit_codes fdsh exit 174=0 174=2=2
par_compare_exit_codes fdsh sig 47=0 175=2=2
par_compare_exit_codes fdsh exit 175=0 175=2=2
par_compare_exit_codes fdsh sig 48=0 176=2=2
par_compare_exit_codes fdsh exit 176=0 176=2=2
par_compare_exit_codes fdsh sig 49=0 177=2=2
par_compare_exit_codes fdsh exit 177=0 177=2=2
par_compare_exit_codes fdsh sig 50=0 178=2=2
par_compare_exit_codes fdsh exit 178=0 178=2=2
par_compare_exit_codes fdsh sig 51=0 179=2=2
par_compare_exit_codes fdsh exit 179=0 179=2=2
par_compare_exit_codes fdsh sig 52=0 180=2=2
par_compare_exit_codes fdsh exit 180=0 180=2=2
par_compare_exit_codes fdsh sig 53=0 181=2=2
par_compare_exit_codes fdsh exit 181=0 181=2=2
par_compare_exit_codes fdsh sig 55=0 183=2=2
par_compare_exit_codes fdsh exit 183=0 183=2=2
par_compare_exit_codes fdsh sig 56=0 184=2=2
par_compare_exit_codes fdsh exit 184=0 184=2=2
par_compare_exit_codes fdsh sig 57=0 185=2=2
par_compare_exit_codes fdsh exit 185=0 185=2=2
par_compare_exit_codes fdsh sig 58=0 186=2=2
par_compare_exit_codes fdsh exit 186=0 186=2=2
par_compare_exit_codes fdsh sig 59=0 187=2=2
par_compare_exit_codes fdsh exit 187=0 187=2=2
par_compare_exit_codes fdsh sig 60=0 188=2=2
par_compare_exit_codes fdsh exit 188=0 188=2=2
par_compare_exit_codes fdsh sig 61=0 189=2=2
par_compare_exit_codes fdsh exit 189=0 189=2=2
par_compare_exit_codes fdsh sig 62=0 190=2=2
par_compare_exit_codes fdsh exit 190=0 190=2=2
par_compare_exit_codes fdsh sig 63=0 191=2=2
par_compare_exit_codes fdsh exit 191=0 191=2=2
par_halt_on_error -2 true true 0 par_halt_on_error -2 true true 0
par_halt_on_error -2 true true 0 par_halt_on_error -2 true true 0
par_halt_on_error -2 true true parallel: This job succeeded: par_halt_on_error -2 true true parallel: This job succeeded:
@ -237,7 +369,7 @@ par_test_build_and_install make[0]: Nothing to be done for 'install-exec-am'.
par_test_build_and_install make install-data-hook par_test_build_and_install make install-data-hook
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install mkdir -p /tmp/parallel-install/share/zsh/site-functions /tmp/parallel-install/share/bash-completion/completions par_test_build_and_install mkdir -p /tmp/parallel-install/share/zsh/site-functions /tmp/parallel-install/share/bash-completion/completions
par_test_build_and_install src/parallel --shell-completion bash > /tmp/parallel-install/share/bash-completion/completions/parallel par_test_build_and_install /tmp/parallel-install/bin/parallel --shell-completion bash > /tmp/parallel-install/share/bash-completion/completions/parallel
par_test_build_and_install echo '#compdef parallel' > /tmp/parallel-install/share/zsh/site-functions/_parallel par_test_build_and_install echo '#compdef parallel' > /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo '(( $+functions[_comp_parallel] )) ||' >> /tmp/parallel-install/share/zsh/site-functions/_parallel par_test_build_and_install echo '(( $+functions[_comp_parallel] )) ||' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo ' eval "$(parallel --shell-completion auto)" &&' >> /tmp/parallel-install/share/zsh/site-functions/_parallel par_test_build_and_install echo ' eval "$(parallel --shell-completion auto)" &&' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
@ -766,7 +898,7 @@ par_test_build_and_install make[0]: Nothing to be done for 'install-exec-am'.
par_test_build_and_install make install-data-hook par_test_build_and_install make install-data-hook
par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000' par_test_build_and_install make[0]: Entering directory '/tmp/parallel-00000000'
par_test_build_and_install mkdir -p /tmp/parallel-install/share/zsh/site-functions /tmp/parallel-install/share/bash-completion/completions par_test_build_and_install mkdir -p /tmp/parallel-install/share/zsh/site-functions /tmp/parallel-install/share/bash-completion/completions
par_test_build_and_install src/parallel --shell-completion bash > /tmp/parallel-install/share/bash-completion/completions/parallel par_test_build_and_install /tmp/parallel-install/bin/parallel --shell-completion bash > /tmp/parallel-install/share/bash-completion/completions/parallel
par_test_build_and_install echo '#compdef parallel' > /tmp/parallel-install/share/zsh/site-functions/_parallel par_test_build_and_install echo '#compdef parallel' > /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo '(( $+functions[_comp_parallel] )) ||' >> /tmp/parallel-install/share/zsh/site-functions/_parallel par_test_build_and_install echo '(( $+functions[_comp_parallel] )) ||' >> /tmp/parallel-install/share/zsh/site-functions/_parallel
par_test_build_and_install echo ' eval "$(parallel --shell-completion auto)" &&' >> /tmp/parallel-install/share/zsh/site-functions/_parallel par_test_build_and_install echo ' eval "$(parallel --shell-completion auto)" &&' >> /tmp/parallel-install/share/zsh/site-functions/_parallel

View file

@ -120,7 +120,13 @@ par_kill_hup parallel: bash -c 'sleep 3 & pid=$!; wait $pid'
par_kill_hup bash---pstree par_kill_hup bash---pstree
par_ll_lb_color bug #62386: --color (--ctag but without --tag) par_ll_lb_color bug #62386: --color (--ctag but without --tag)
par_ll_lb_color bug #62438: See last line from multiple jobslots par_ll_lb_color bug #62438: See last line from multiple jobslots
par_ll_lb_color c9a124d7cbd2d04b1201b297ef7cefa1 - par_ll_lb_color 35d02d4d868110dd4f0eaf1c2f26dc36 -
par_ll_tag par_ll_tag should-be-tagged should-be-tagged
par_ll_tag  par_ll_tag should-be-tagged should-be-tagged
par_ll_tag par_ll_tag B  
par_ll_tag  par_ll_tag B  
par_ll_tag par_ll_tag C C 
par_ll_tag  par_ll_tag C C 
par_more_than_9_relative_sshlogin ### Check more than 9(relative) simultaneous sshlogins par_more_than_9_relative_sshlogin ### Check more than 9(relative) simultaneous sshlogins
par_more_than_9_relative_sshlogin 1 par_more_than_9_relative_sshlogin 1
par_more_than_9_relative_sshlogin 2 par_more_than_9_relative_sshlogin 2

View file

@ -8,7 +8,6 @@ par_big_func_name 18XXX
par_big_func_name 18XXX par_big_func_name 18XXX
par_big_func_name 18XXX par_big_func_name 18XXX
par_big_func_name 18XXX par_big_func_name 18XXX
par_big_func_name 7XXX
par_big_var_func_name 18XXX par_big_var_func_name 18XXX
par_big_var_func_name 18XXX par_big_var_func_name 18XXX
par_big_var_func_name 18XXX par_big_var_func_name 18XXX
@ -26,7 +25,6 @@ par_big_var_func_name 18XXX
par_big_var_func_name 18XXX par_big_var_func_name 18XXX
par_big_var_func_name 18XXX par_big_var_func_name 18XXX
par_big_var_func_name 18XXX par_big_var_func_name 18XXX
par_big_var_func_name 1XXX
par_many_args 1 3XXX 6XXX par_many_args 1 3XXX 6XXX
par_many_args 1 3XXX 6XXX par_many_args 1 3XXX 6XXX
par_many_args 1 3XXX 6XXX par_many_args 1 3XXX 6XXX
@ -68,14 +66,13 @@ par_many_func 1 200 4XXX
par_many_func 1 200 4XXX par_many_func 1 200 4XXX
par_many_func 1 200 4XXX par_many_func 1 200 4XXX
par_many_func 1 68 1XXX par_many_func 1 68 1XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 948 22XXX par_many_var 22XXX
par_many_var 1 32 740
par_many_var_big_func 5XXX par_many_var_big_func 5XXX
par_many_var_big_func 5XXX par_many_var_big_func 5XXX
par_many_var_big_func 5XXX par_many_var_big_func 5XXX
@ -105,7 +102,6 @@ par_many_var_big_func 5XXX
par_many_var_big_func 5XXX par_many_var_big_func 5XXX
par_many_var_big_func 5XXX par_many_var_big_func 5XXX
par_many_var_big_func 5XXX par_many_var_big_func 5XXX
par_many_var_big_func 1XXX
par_many_var_func 1 2XXX 58XXX par_many_var_func 1 2XXX 58XXX
par_many_var_func 1 2XXX 58XXX par_many_var_func 1 2XXX 58XXX
par_many_var_func 1 1XXX 42XXX par_many_var_func 1 1XXX 42XXX