echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)'; seq 10 | parallel --halt now,fail=1 true; echo $? ### Test bug #45619: "--halt" erroneous error exit code (should give 0) 0 echo '**' ** echo '### Test exit val - true'; echo true | parallel; echo $? ### Test exit val - true 0 echo '**' ** echo '### Test exit val - false'; echo false | parallel; echo $? ### Test exit val - false 1 echo '**' ** echo '### Test bug #43284: {%} and {#} with --xapply'; parallel --xapply 'echo {1} {#} {%} {2}' ::: a ::: b; parallel -N2 'echo {%}' ::: a b ### Test bug #43284: {%} and {#} with --xapply a 1 1 b 1 echo '**' ** echo '### Test bug #43376: {%} and {#} with --pipe' ### Test bug #43376: {%} and {#} with --pipe echo foo | parallel -q --pipe -k echo {#} 1 echo foo | parallel --pipe -k echo {%} 1 echo foo | parallel -q --pipe -k echo {%} 1 echo foo | parallel --pipe -k echo {#} 1 echo '**' ** echo '### {= and =} in different groups separated by space' ### {= and =} in different groups separated by space parallel echo {= s/a/b/ =} ::: a b parallel echo {= s/a/b/=} ::: a b parallel echo {= s/a/b/=}{= s/a/b/=} ::: a bb parallel echo {= s/a/b/=}{=s/a/b/=} ::: a bb parallel echo {= s/a/b/=}{= {= s/a/b/=} ::: a b{= b parallel echo {= s/a/b/=}{={=s/a/b/=} ::: a b{=b parallel echo {= s/a/b/ =} {={==} ::: a b {=a parallel echo {={= =} ::: a {=a parallel echo {= {= =} ::: a {= a parallel echo {= {= =} =} ::: a {= a =} echo '**' ** echo '### {} as part of the command' ### {} as part of the command echo p /bin/ls | parallel l{= s/p/s/ =} /bin/ls echo /bin/ls-p | parallel --colsep '-' l{=2 s/p/s/ =} {1} /bin/ls echo s /bin/ls | parallel l{} /bin/ls echo /bin/ls | parallel ls {} /bin/ls echo ls /bin/ls | parallel {} /bin/ls echo ls /bin/ls | parallel /bin/ls echo '**' ** echo '### bug #43817: Some JP char cause problems in positional replacement strings' ### bug #43817: Some JP char cause problems in positional replacement strings parallel -k echo ::: '�<�>' '�<1 $_=2�>' 'ワ' �<�> �<1 $_=2�> ワ parallel -k echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' �<�> �<1 $_=2�> ワ parallel -Xj1 echo ::: '�<�>' '�<1 $_=2�>' 'ワ' �<�> �<1 $_=2�> ワ parallel -Xj1 echo {1} ::: '�<�>' '�<1 $_=2�>' 'ワ' �<�> echo '**' ** echo '### --rpl % that is a substring of longer --rpl %D' ### --rpl % that is a substring of longer --rpl %D parallel --plus --rpl '%' --rpl '%D $_=::shell_quote(::dirname($_));' --rpl '%B s:.*/::;s:\.[^/.]+$::;' --rpl '%E s:.*\.::' 'echo {}=%;echo %D={//};echo %B={/.};echo %E={+.};echo %D/%B.%E={}' ::: a.b/c.d/e.f a.b/c.d/e.f=a.b/c.d/e.f a.b/c.d=a.b/c.d e=e f=f a.b/c.d/e.f=a.b/c.d/e.f echo '**' ** echo '### Disk full' ### Disk full cat /dev/zero >$SMALLDISK/out; parallel --tmpdir $SMALLDISK echo ::: OK; rm $SMALLDISK/out cat: write error: No space left on device parallel: Error: Output is incomplete. Cannot append to buffer file in /mnt/ram. Is the disk full? parallel: Error: Change $TMPDIR with --tmpdir or use --compress. echo '**' ** echo '### bug #44546: If --compress-program fails: fail' ### bug #44546: If --compress-program fails: fail parallel --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $? 1 parallel: Error: false failed. parallel: Error: false failed. parallel --tag --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $? 1 parallel: Error: false failed. parallel: Error: false failed. (parallel --files --tag --line-buffer --compress-program false echo \;sleep 1\;ls ::: /no-existing; echo $?) | tail -n1 1 parallel: Error: false failed. parallel: Error: false failed. parallel: Error: false failed. parallel: Error: false failed. parallel --tag --compress-program false echo \;ls ::: /no-existing; echo $? 1 parallel: Error: false failed. parallel: Error: false failed. parallel --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $? 1 parallel: Error: false failed. parallel: Error: false failed. parallel --compress-program false echo \;ls ::: /no-existing; echo $? 1 parallel: Error: false failed. parallel: Error: false failed. echo 'bug #41613: --compress --line-buffer - no newline'; echo 'pipe compress tagstring' bug #41613: --compress --line-buffer - no newline pipe compress tagstring perl -e 'print "O"'| parallel --compress --tagstring {#} --pipe --line-buffer cat; echo "K" 1 OK echo 'pipe compress notagstring' pipe compress notagstring perl -e 'print "O"'| parallel --compress --pipe --line-buffer cat; echo "K" OK echo 'pipe nocompress tagstring' pipe nocompress tagstring perl -e 'print "O"'| parallel --tagstring {#} --pipe --line-buffer cat; echo "K" 1 OK echo 'pipe nocompress notagstring' pipe nocompress notagstring perl -e 'print "O"'| parallel --pipe --line-buffer cat; echo "K" OK echo 'nopipe compress tagstring' nopipe compress tagstring parallel --compress --tagstring {#} --line-buffer echo {} O ::: -n; echo "K" 1 OK echo 'nopipe compress notagstring' nopipe compress notagstring parallel --compress --line-buffer echo {} O ::: -n; echo "K" OK echo 'nopipe nocompress tagstring' nopipe nocompress tagstring parallel --tagstring {#} --line-buffer echo {} O ::: -n; echo "K" 1 OK echo 'nopipe nocompress notagstring' nopipe nocompress notagstring parallel --line-buffer echo {} O ::: -n; echo "K" OK echo 'Compress with failing (de)compressor' Compress with failing (de)compressor parallel -k --tag --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: tag true true tag tag true true true true parallel -k --tag --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: tag false true tag tag false false true true parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --tag --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: tag false false tag tag false false false false parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --tag --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag true false tag tag true true false false parallel -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: true true true true parallel -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: false true false true parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: false false false false parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: true false true false parallel -k --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: line-buffer true true line-buffer true true parallel -k --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: line-buffer false true line-buffer false true parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: line-buffer false false line-buffer false false parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag line-buffer true false tag tag line-buffer line-buffer true true false false parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: tag line-buffer true true tag tag line-buffer line-buffer true true true true parallel -k --tag --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: tag line-buffer false true tag tag line-buffer line-buffer false false true true parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --tag --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: tag line-buffer false false tag tag line-buffer line-buffer false false false false parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag line-buffer true false tag tag line-buffer line-buffer true true false false parallel -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: files true true | parallel rm parallel -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: files false true | parallel rm parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: files false false | parallel rm parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel: Error: cat;false failed. parallel -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: files true false | parallel rm echo 'bug #44250: pxz complains File format not recognized but decompresses anyway' bug #44250: pxz complains File format not recognized but decompresses anyway # The first line dumps core if run from make file. Why?! stdout parallel --compress --compress-program pxz ls /{} ::: OK-if-missing-file parallel: Error: pxz failed. stdout parallel --compress --compress-program pixz --decompress-program 'pixz -d' ls /{} ::: OK-if-missing-file ls: cannot access /OK-if-missing-file: No such file or directory stdout parallel --compress --compress-program pixz --decompress-program 'pixz -d' true ::: OK-if-no-output stdout parallel --compress --compress-program pxz true ::: OK-if-no-output echo 'bug #41613: --compress --line-buffer no newline'; perl -e 'print "It worked"'| parallel --pipe --compress --line-buffer cat; echo bug #41613: --compress --line-buffer no newline It worked echo '### bug #44614: --pipepart --header off by one' ### bug #44614: --pipepart --header off by one seq 10 >/tmp/parallel_44616; parallel --pipepart -a /tmp/parallel_44616 -k --block 5 'echo foo; cat'; parallel --pipepart -a /tmp/parallel_44616 -k --block 2 --regexp --recend 3'\n' 'echo foo; cat'; rm /tmp/parallel_44616 foo 1 2 3 foo 4 5 6 foo 7 8 9 foo 10 foo 1 2 3 foo 4 5 6 7 8 9 10 echo '### TMUX not found' ### TMUX not found TMUX=not-existing parallel --tmux echo ::: 1 parallel: Error: not-existing not found in $PATH. echo '**' ** parallel -j4 --halt 2 ::: 'sleep 1' burnP6 false; killall burnP6 && echo ERROR: burnP6 should be killed parallel: This job failed: false burnP6: no process found parallel -j4 --halt -2 ::: 'sleep 1' burnP5 true; killall burnP5 && echo ERROR: burnP5 should be killed parallel: This job succeeded: true burnP5: no process found parallel --halt error echo ::: should not print parallel: Error: --halt must have 'never', 'soon', or 'now'. parallel --halt soon echo ::: should not print parallel: Error: --halt soon must be followed by ,success or ,fail. parallel --halt now echo ::: should not print parallel: Error: --halt now must be followed by ,success or ,fail. echo '**' ** echo '### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2' ### bug #44995: parallel echo {#} ::: 1 2 ::: 1 2 parallel -k echo {#} ::: 1 2 ::: 1 2 1 2 3 4 echo '**' ** testquote() { printf '"#&/\n()*=?'"'" | PARALLEL_SHELL=$1 parallel -0 echo; }; export -f testquote; parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh pdksh posh rbash rc rzsh sash sh static-sh tcsh yash zsh ash "#&/ ash ()*=?' bash "#&/ bash ()*=?' csh "#&/ csh ()*=?' dash "#&/ dash ()*=?' fdsh "#&/ fdsh ()*=?' fish "#&/ fish ()*=?' fizsh "#&/ fizsh ()*=?' ksh "#&/ ksh ()*=?' ksh93 "#&/ ksh93 ()*=?' mksh "#&/ mksh ()*=?' pdksh "#&/ pdksh ()*=?' posh "#&/ posh ()*=?' rbash "#&/ rbash ()*=?' rc "#&/ rc ()*=?' rzsh "#&/ rzsh ()*=?' sash "#&/ sash ()*=?' sh "#&/ sh ()*=?' static-sh "#&/ static-sh ()*=?' tcsh "#&/ tcsh ()*=?' yash "#&/ yash ()*=?' zsh "#&/ zsh ()*=?' echo '**' ** echo '### bug #45769: --round-robin --pipepart gives wrong results' ### bug #45769: --round-robin --pipepart gives wrong results seq 10000 >/tmp/seq10000; parallel -j2 --pipepart -a /tmp/seq10000 --block 14 --round-robin wc | wc -l; rm /tmp/seq10000 2 echo '**' ** echo '### bug #45842: Do not evaluate {= =} twice' ### bug #45842: Do not evaluate {= =} twice parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} 1 2 3 4 parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} 1 2 3 4 parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} ::: {a..c} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} ::: {a..c} 1 2 3 4 5 6 7 8 9 10 11 12 echo '**' ** echo '### bug #45939: {2} in {= =} fails' ### bug #45939: {2} in {= =} fails parallel echo '{= s/O{2}//=}' ::: OOOK OK parallel echo '{2}-{=1 s/O{2}//=}' ::: OOOK ::: OK OK-OK echo '**' ** echo '### bug #45998: --pipe to function broken' ### bug #45998: --pipe to function broken myfunc() { echo $1; cat; }; export -f myfunc; echo OK | parallel --pipe myfunc {#} 1 OK echo '**' ** echo 'bug #46016: --joblog should not log when --dryrun' bug #46016: --joblog should not log when --dryrun parallel --dryrun --joblog - echo ::: Only_this echo Only_this echo '**' ** echo 'bug #45993: --wd ... should also work when run locally' bug #45993: --wd ... should also work when run locally parallel --wd /bi 'pwd; echo $OLDPWD; echo' ::: fail parallel: Error: Cannot write to /bi: No such file or directory parallel --wd /bin 'pwd; echo $OLDPWD; echo' ::: OK /bin /home/tange/privat/parallel/testsuite OK parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK / /home/tange/privat/parallel/testsuite OK parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK /tmp /home/tange/privat/parallel/testsuite OK parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g' /home/tange/.parallel/tmp/aspire-0-0 /home/tange/privat/parallel/testsuite OK parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK /home/tange/privat/parallel/testsuite /home/tange/privat/parallel/testsuite OK echo '**' ** echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken' bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken parallel --bar -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null 1 2 1 2 1 2 parallel --halt now,fail=10% -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 1 2 1 2 1 2 parallel --eta -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null 1 2 1 2 1 2 parallel --shuf -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null 1 2 1 2 1 2 echo '**' ** echo 'bug #46231: {%} with --pipepart broken. Should give 1+2' bug #46231: {%} with --pipepart broken. Should give 1+2 seq 10000 > /tmp/num10000; parallel --pipepart -ka /tmp/num10000 --block 10k -j2 echo {%}; rm /tmp/num10000 1 2 1 2 1 echo '**' ** echo '{##} bug #45841: Replacement string for total no of jobs' {##} bug #45841: Replacement string for total no of jobs parallel -k --plus echo {##} ::: {a..j}; parallel -k 'echo {= $::G++ > 3 and ($_=$Global::JobQueue->total_jobs());=}' ::: {1..10} 10 10 10 10 10 10 10 10 10 10 1 2 3 4 10 10 10 10 10 10 parallel -k -N7 --plus echo {#} {##} ::: {1..14} 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 parallel -k -N7 --plus echo {#} {##} ::: {1..15} 1 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 parallel -k -X --plus echo {#} {##} ::: {1..15} 1 15 15 2 15 15 3 15 15 4 15 15 5 15 15 6 15 15 7 15 15 8 15 echo '**' ** ### 1 .par file from --files expected 1