testsuite: reorg. Passes testsuite.

This commit is contained in:
Ole Tange 2016-05-17 02:11:38 +02:00
parent 17a50e3354
commit 58fc7e7c7c
42 changed files with 2457 additions and 1879 deletions

View file

@ -232,6 +232,10 @@ Haiku of the month:
New in this release: New in this release:
* niceload --net
*
* Vote for GNU Parallel's community ad on https://meta.askubuntu.com/questions/14925/community-promotion-ads-2016/15046#15046 * Vote for GNU Parallel's community ad on https://meta.askubuntu.com/questions/14925/community-promotion-ads-2016/15046#15046
* << kontakt GNU Parallel was used (unfortunately without citation) in: Instrumentation and Trace Analysis for Ad-hoc Python Workflows in Cloud Environments http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7214035>> * << kontakt GNU Parallel was used (unfortunately without citation) in: Instrumentation and Trace Analysis for Ad-hoc Python Workflows in Cloud Environments http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7214035>>

View file

@ -5937,9 +5937,9 @@ sub cleanup_cmd {
$dir .= $_."/"; $dir .= $_."/";
unshift @rmdir, ::shell_quote_file($dir); unshift @rmdir, ::shell_quote_file($dir);
} }
my $rmdir = @rmdir ? "sh -c 'rmdir @rmdir 2>/dev/null';" : ""; my $rmdir = @rmdir ? "sh -c ".::shell_quote_scalar("rmdir @rmdir 2>/dev/null;") : "";
if(defined $opt::workdir and $opt::workdir eq "...") { if(defined $opt::workdir and $opt::workdir eq "...") {
$rmdir .= "rm -rf " . ::shell_quote_file($workdir).';'; $rmdir .= ::shell_quote_scalar("rm -rf " . ::shell_quote_file($workdir).';');
} }
$f = ::shell_quote_file($f); $f = ::shell_quote_file($f);
@ -7565,24 +7565,6 @@ sub start {
my ($stdin_fh) = ::gensym(); my ($stdin_fh) = ::gensym();
$pid = open3_setpgrp($stdin_fh,$stdout_fh,$stderr_fh,$command); $pid = open3_setpgrp($stdin_fh,$stdout_fh,$stderr_fh,$command);
$job->set_fh(0,"w",$stdin_fh); $job->set_fh(0,"w",$stdin_fh);
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
open(my $devtty_fh, "<", "/dev/tty")) {
# Give /dev/tty to the command if no one else is using it
# The eval is needed to catch exception from open3
eval {
no warnings;
local (*IN) = $devtty_fh;
local (*OUT,*ERR);
open OUT, '>&', $stdout_fh or ::die_bug("Can't dup STDOUT: $!");
open ERR, '>&', $stderr_fh or ::die_bug("Can't dup STDERR: $!");
$pid = ::open3("<&IN", ">&OUT", ">&ERR",
"exec $Global::shell -c ".
::shell_quote_scalar($command)) ||
::die_bug("open3-/dev/tty");
$Global::tty_taken = $pid;
close $devtty_fh;
1;
};
} elsif(@opt::a and not $Global::stdin_in_opt_a and $job->seq() == 1 } elsif(@opt::a and not $Global::stdin_in_opt_a and $job->seq() == 1
and $job->sshlogin()->string() eq ":") { and $job->sshlogin()->string() eq ":") {
# Give STDIN to the first job if using -a (but only if running # Give STDIN to the first job if using -a (but only if running
@ -7603,6 +7585,25 @@ sub start {
# Re-open to avoid complaining # Re-open to avoid complaining
open(STDIN, "<&", $Global::original_stdin) open(STDIN, "<&", $Global::original_stdin)
or ::die_bug("dup-\$Global::original_stdin: $!"); or ::die_bug("dup-\$Global::original_stdin: $!");
} elsif ($opt::tty and not $Global::tty_taken and -c "/dev/tty" and
open(my $devtty_fh, "<", "/dev/tty")) {
# Give /dev/tty to the command if no one else is using it
# The eval is needed to catch exception from open3
eval {
no warnings;
local (*IN) = $devtty_fh;
local (*OUT,*ERR);
open OUT, '>&', $stdout_fh or ::die_bug("Can't dup STDOUT: $!");
open ERR, '>&', $stderr_fh or ::die_bug("Can't dup STDERR: $!");
$pid = ::open3("<&IN", ">&OUT", ">&ERR",
"exec $Global::shell -c ".
::shell_quote_scalar($command)) ||
::die_bug("open3-/dev/tty");
$Global::tty_taken = $pid;
close $devtty_fh;
1;
};
} else { } else {
$pid = open3_setpgrp(::gensym(),$stdout_fh,$stderr_fh,$command); $pid = open3_setpgrp(::gensym(),$stdout_fh,$stderr_fh,$command);
} }
@ -9160,7 +9161,9 @@ sub is_acceptable_command_line_length {
# 0 if the command line length is too long # 0 if the command line length is too long
# 1 otherwise # 1 otherwise
my $len = shift; my $len = shift;
if($ENV{PARALLEL_ENV}) {
$len += length $ENV{PARALLEL_ENV} + (-s $ENV{PARALLEL_ENV})*2; $len += length $ENV{PARALLEL_ENV} + (-s $ENV{PARALLEL_ENV})*2;
}
::qqx("true "."x"x$len); ::qqx("true "."x"x$len);
::debug("init", "$len=$? "); ::debug("init", "$len=$? ");
return not $?; return not $?;

View file

@ -1824,7 +1824,8 @@ An I<sshlogin> is of the form:
[sshcommand [options]] [username@]hostname [sshcommand [options]] [username@]hostname
The sshlogin must not require a password. The sshlogin must not require a password (B<ssh-agent>,
B<ssh-copy-id>, and B<sshpass> may help with that).
The sshlogin ':' is special, it means 'no ssh' and will therefore run The sshlogin ':' is special, it means 'no ssh' and will therefore run
on the local computer. on the local computer.
@ -2903,7 +2904,7 @@ If a line matches multiple regexps, the line may be duplicated.
To run commands on a remote computer SSH needs to be set up and you To run commands on a remote computer SSH needs to be set up and you
must be able to login without entering a password (The commands must be able to login without entering a password (The commands
B<ssh-copy-id> and B<ssh-agent> may help you do that). B<ssh-copy-id>, B<ssh-agent>, and B<sshpass> may help you do that).
If you need to login to a whole cluster, you typically do not want to If you need to login to a whole cluster, you typically do not want to
accept the host key for every host. You want to accept them the first accept the host key for every host. You want to accept them the first

View file

@ -10,7 +10,7 @@ export TIMEOUT=$MAX_SEC_PER_TEST
run_test() { run_test() {
script="$1" script="$1"
base=`basename "$script" .sh` base=`basename "$script" .sh`
export TMPDIR=/tmp/"$base" export TMPDIR=/tmp/"$base"-tmpdir
mkdir -p "$TMPDIR" mkdir -p "$TMPDIR"
if [ "$TRIES" = "3" ] ; then if [ "$TRIES" = "3" ] ; then
# Try 3 times # Try 3 times

View file

@ -15,9 +15,9 @@ export PID3=$!
echo '### multiple -p' echo '### multiple -p'
stdout /usr/bin/time -f %e niceload -l 9 -H -p $PID1 -p $PID2 -p $PID3 | perl -ne '$_ > 5 and print "Multiple -p OK\n"' & stdout /usr/bin/time -f %e niceload -l 9 -H -p $PID1 -p $PID2 -p $PID3 | perl -ne '$_ > 5 and print "Multiple -p OK\n"' &
/tmp/mysleep 2 & /tmp/mysleep 4 &
/tmp/mysleep 2 & /tmp/mysleep 4 &
/tmp/mysleep 2 & /tmp/mysleep 4 &
echo '### --prg' echo '### --prg'
stdout /usr/bin/time -f %e niceload -l 8 -H --prg /tmp/mysleep | perl -ne '$_ > 5 and print "--prg OK\n"' stdout /usr/bin/time -f %e niceload -l 8 -H --prg /tmp/mysleep | perl -ne '$_ > 8 and print "--prg OK\n"'
rm /tmp/mysleep rm /tmp/mysleep

View file

@ -17,9 +17,10 @@ export SMALLDISK
) >/dev/null 2>/dev/null ) >/dev/null 2>/dev/null
# Test amount of parallelization
# parallel --shuf --jl /tmp/myjl -j1 'export JOBS={1};'bash tests-to-run/parallel-local-0.3s.sh ::: {1..16} ::: {1..5}
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj13 -k --joblog /tmp/jl-`basename $0` -L1
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj8 -k --joblog /tmp/jl-`basename $0` -L1
echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)'; echo '### Test bug #45619: "--halt" erroneous error exit code (should give 0)';
seq 10 | parallel --halt now,fail=1 true; seq 10 | parallel --halt now,fail=1 true;
echo $? echo $?
@ -104,64 +105,6 @@ cat /dev/zero >$SMALLDISK/out;
echo '**' echo '**'
echo '### bug #44546: If --compress-program fails: fail'
parallel --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $?
parallel --tag --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $?
(parallel --files --tag --line-buffer --compress-program false echo \;sleep 1\;ls ::: /no-existing; echo $?) | tail -n1
parallel --tag --compress-program false echo \;ls ::: /no-existing; echo $?
parallel --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $?
parallel --compress-program false echo \;ls ::: /no-existing; echo $?
echo 'bug #41613: --compress --line-buffer - no newline';
echo 'pipe compress tagstring'
perl -e 'print "O"'| parallel --compress --tagstring {#} --pipe --line-buffer cat; echo "K"
echo 'pipe compress notagstring'
perl -e 'print "O"'| parallel --compress --pipe --line-buffer cat; echo "K"
echo 'pipe nocompress tagstring'
perl -e 'print "O"'| parallel --tagstring {#} --pipe --line-buffer cat; echo "K"
echo 'pipe nocompress notagstring'
perl -e 'print "O"'| parallel --pipe --line-buffer cat; echo "K"
echo 'nopipe compress tagstring'
parallel --compress --tagstring {#} --line-buffer echo {} O ::: -n; echo "K"
echo 'nopipe compress notagstring'
parallel --compress --line-buffer echo {} O ::: -n; echo "K"
echo 'nopipe nocompress tagstring'
parallel --tagstring {#} --line-buffer echo {} O ::: -n; echo "K"
echo 'nopipe nocompress notagstring'
parallel --line-buffer echo {} O ::: -n; echo "K"
echo 'Compress with failing (de)compressor'
parallel -k --tag --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: tag true true
parallel -k --tag --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: tag false true
parallel -k --tag --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: tag false false
parallel -k --tag --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag true false
parallel -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: true true
parallel -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: false true
parallel -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: false false
parallel -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: true false
parallel -k --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: line-buffer true true
parallel -k --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: line-buffer false true
parallel -k --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: line-buffer false false
parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag line-buffer true false
parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: tag line-buffer true true
parallel -k --tag --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: tag line-buffer false true
parallel -k --tag --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: tag line-buffer false false
parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag line-buffer true 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 -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: files false false | parallel rm
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'
# The first line dumps core if run from make file. Why?!
stdout parallel --compress --compress-program pxz ls /{} ::: OK-if-missing-file
stdout parallel --compress --compress-program pixz --decompress-program 'pixz -d' ls /{} ::: OK-if-missing-file
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
echo '### bug #44614: --pipepart --header off by one' echo '### bug #44614: --pipepart --header off by one'
seq 10 >/tmp/parallel_44616; 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 5 'echo foo; cat';
@ -204,41 +147,47 @@ echo '**'
echo '### bug #45842: Do not evaluate {= =} twice' echo '### bug #45842: Do not evaluate {= =} twice'
parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} parallel -k echo '{= $_=++$::G =}' ::: {1001..1004}
parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004}
parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} ::: {a..c} parallel -k echo '{= $_=++$::G =}' ::: {1001..1004} ::: {a..c}
parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} ::: {a..c} parallel -k echo '{=1 $_=++$::G =}' ::: {1001..1004} ::: {a..c}
echo '**' echo '**'
echo '### bug #45939: {2} in {= =} fails' echo '### bug #45939: {2} in {= =} fails'
parallel echo '{= s/O{2}//=}' ::: OOOK
parallel echo '{2}-{=1 s/O{2}//=}' ::: OOOK ::: OK parallel echo '{= s/O{2}//=}' ::: OOOK
parallel echo '{2}-{=1 s/O{2}//=}' ::: OOOK ::: OK
echo '**' echo '**'
echo '### bug #45998: --pipe to function broken' echo '### bug #45998: --pipe to function broken'
myfunc() { echo $1; cat; }; export -f myfunc; echo OK | parallel --pipe myfunc {#}
myfunc() { echo $1; cat; };
export -f myfunc;
echo OK | parallel --pipe myfunc {#}
echo '**' echo '**'
echo 'bug #46016: --joblog should not log when --dryrun' echo 'bug #46016: --joblog should not log when --dryrun'
parallel --dryrun --joblog - echo ::: Only_this
parallel --dryrun --joblog - echo ::: Only_this
echo '**' echo '**'
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 /bin 'pwd; echo $OLDPWD; echo' ::: OK
parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK
parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK
parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g'
parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK parallel --wd /bi 'pwd; echo $OLDPWD; echo' ::: fail
parallel --wd /bin 'pwd; echo $OLDPWD; echo' ::: OK
parallel --wd / 'pwd; echo $OLDPWD; echo' ::: OK
parallel --wd /tmp 'pwd; echo $OLDPWD; echo' ::: OK
parallel --wd ... 'pwd; echo $OLDPWD; echo' ::: OK | perl -pe 's/\d+/0/g'
parallel --wd . 'pwd; echo $OLDPWD; echo' ::: OK
echo '**' echo '**'
echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken' echo '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 parallel --bar -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null
parallel --halt now,fail=10% -kj2 --delay 0.1 echo {%} ::: a b ::: c d e parallel --halt now,fail=10% -kj2 --delay 0.1 echo {%} ::: a b ::: c d e
parallel --eta -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null parallel --eta -kj2 --delay 0.1 echo {%} ::: a b ::: c d e 2>/dev/null
@ -247,8 +196,9 @@ echo 'bug #46232: {%} with --bar/--eta/--shuf or --halt xx% broken'
echo '**' echo '**'
echo 'bug #46231: {%} with --pipepart broken. Should give 1+2' echo 'bug #46231: {%} with --pipepart broken. Should give 1+2'
seq 10000 > /tmp/num10000; seq 10000 > /tmp/num10000;
parallel --pipepart -ka /tmp/num10000 --block 10k -j2 echo {%}; parallel -k --pipepart -ka /tmp/num10000 --block 10k -j2 --delay 0.05 echo {%};
rm /tmp/num10000 rm /tmp/num10000
echo '**' echo '**'
@ -283,6 +233,370 @@ echo 'bug #47290: xargs: Warning: a NUL character occurred in the input'
echo '**' echo '**'
echo '### Test --shellquote'
parallel --tag -q -k {} -c perl\ -e\ \'print\ pack\(\"c\*\",1..255\)\'\ \|\ parallel\ -0\ --shellquote ::: ash bash csh dash fish fizsh ksh ksh93 lksh mksh pdksh posh rzsh sash sh static-sh tcsh yash zsh csh tcsh
echo '**'
echo xargs compatibility
echo '### Test -L -l and --max-lines'
(echo a_b;echo c) | parallel -km -L2 echo
(echo a_b;echo c) | parallel -k -L2 echo
(echo a_b;echo c) | xargs -L2 echo
echo '### xargs -L1 echo'
(echo a_b;echo c) | parallel -km -L1 echo
(echo a_b;echo c) | parallel -k -L1 echo
(echo a_b;echo c) | xargs -L1 echo
echo 'Lines ending in space should continue on next line'
echo '### xargs -L1 echo'
(echo a_b' ';echo c;echo d) | parallel -km -L1 echo
(echo a_b' ';echo c;echo d) | parallel -k -L1 echo
(echo a_b' ';echo c;echo d) | xargs -L1 echo
echo '### xargs -L2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -L2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo
echo '### xargs -l echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | parallel -l -k echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | xargs -l echo
echo '### xargs -l2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo
echo '### xargs -l1 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l1 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -l1 echo
echo '### xargs --max-lines=2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k --max-lines 2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo
echo '### xargs --max-lines echo'
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -k echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines echo
echo '### test too long args'
perl -e 'print "z"x1000000' | parallel echo 2>&1
perl -e 'print "z"x1000000' | xargs echo 2>&1
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10 echo
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout xargs -s 10 echo
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -kX -s 10 echo
echo '### Test -x'
(seq 1 10; echo 12345; seq 12 15) | stdout parallel -j1 -km -s 10 -x echo
(seq 1 10; echo 12345; seq 12 15) | stdout parallel -j1 -kX -s 10 -x echo
(seq 1 10; echo 12345; seq 12 15) | stdout xargs -s 10 -x echo
(seq 1 10; echo 1234; seq 12 15) | stdout parallel -j1 -km -s 10 -x echo
(seq 1 10; echo 1234; seq 12 15) | stdout parallel -j1 -kX -s 10 -x echo
(seq 1 10; echo 1234; seq 12 15) | stdout xargs -s 10 -x echo
echo '### Test -a and --arg-file: Read input from file instead of stdin'
seq 1 10 >/tmp/parallel_$$-1; parallel -k -a /tmp/parallel_$$-1 echo; rm /tmp/parallel_$$-1
seq 1 10 >/tmp/parallel_$$-2; parallel -k --arg-file /tmp/parallel_$$-2 echo; rm /tmp/parallel_$$-2
echo '### Test -i and --replace: Replace with argument'
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce
(echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{}ce
(echo a; echo END; echo b) | parallel -k -i+ -eEND echo repl+ce
(echo e; echo END; echo b) | parallel -k -i'*' -eEND echo r'*'plac'*'
(echo a; echo END; echo b) | parallel -k --replace + -eEND echo repl+ce
(echo a; echo END; echo b) | parallel -k --replace== -eEND echo repl=ce
(echo a; echo END; echo b) | parallel -k --replace = -eEND echo repl=ce
(echo a; echo END; echo b) | parallel -k --replace=^ -eEND echo repl^ce
(echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce
echo '### Test -E: Artificial end-of-file'
(echo include this; echo END; echo not this) | parallel -k -E END echo
(echo include this; echo END; echo not this) | parallel -k -EEND echo
echo '### Test -e and --eof: Artificial end-of-file'
(echo include this; echo END; echo not this) | parallel -k -e END echo
(echo include this; echo END; echo not this) | parallel -k -eEND echo
(echo include this; echo END; echo not this) | parallel -k --eof=END echo
(echo include this; echo END; echo not this) | parallel -k --eof END echo
echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)'
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -m echo
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args=1 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args=2 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo
echo '### Test --max-procs and -P: Number of processes'
seq 1 10 | parallel -k --max-procs +0 echo max proc
seq 1 10 | parallel -k -P 200% echo 200% proc
echo '### Test --delimiter and -d: Delimiter instead of newline'
echo '# Yes there is supposed to be an extra newline for -d N'
echo line 1Nline 2Nline 3 | parallel -k -d N echo This is
echo line 1Nline 2Nline 3 | parallel -k --delimiter N echo This is
printf "delimiter NUL line 1\0line 2\0line 3" | parallel -k -d '\0' echo
printf "delimiter TAB line 1\tline 2\tline 3" | parallel -k --delimiter '\t' echo
echo '### Test --max-chars and -s: Max number of chars in a line'
(echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo
echo '### Test --no-run-if-empty and -r: This should give no output'
echo " " | parallel -r echo
echo " " | parallel --no-run-if-empty echo
echo '### Test --help and -h: Help output (just check we get the same amount of lines)'
echo Output from -h and --help
parallel -h | wc -l
parallel --help | wc -l
echo '### Test --version: Version output (just check we get the same amount of lines)'
parallel --version | wc -l
echo '### Test --verbose and -t'
(echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null
(echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null
echo '### Test --show-limits'
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
(echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar
echo '### Test empty line as input'
echo | parallel echo empty input line
echo '### Tests if (cat | sh) works'
perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort
echo '### Test if xargs-mode works'
perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort
echo '### Test -q'
parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i"
echo '### Test -q {#}'
parallel -kq echo {#} ::: a b
parallel -kq echo {\#} ::: a b
parallel -kq echo {\\#} ::: a b
echo '### Test long commands do not take up all memory'
seq 1 100 | parallel -j0 -qv perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2>/dev/null | sort
echo '### Test 0-arguments'
seq 1 2 | parallel -k -n0 echo n0
seq 1 2 | parallel -k -L0 echo L0
seq 1 2 | parallel -k -N0 echo N0
echo '### Because of --tollef -l, then -l0 == -l1, sorry'
seq 1 2 | parallel -k -l0 echo l0
echo '### Test replace {}'
seq 1 2 | parallel -k -N0 echo replace {} curlies
echo '### Test arguments on commandline'
parallel -k -N0 echo args on cmdline ::: 1 2
echo '### Test --nice locally'
parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b
echo '### Test distribute arguments at EOF to 2 jobslots'
seq 1 92 | parallel -j+0 -kX -s 100 echo
echo '### Test distribute arguments at EOF to 5 jobslots'
seq 1 92 | parallel -j+3 -kX -s 100 echo
echo '### Test distribute arguments at EOF to infinity jobslots'
seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null
echo '### Test -N is not broken by distribution - single line'
seq 9 | parallel -N 10 echo
echo '### Test -N is not broken by distribution - two lines'
seq 19 | parallel -k -N 10 echo
echo '### Test -N context replace'
seq 19 | parallel -k -N 10 echo a{}b
echo '### Test -L context replace'
seq 19 | parallel -k -L 10 echo a{}b
echo '**'
echo '### Test {} multiple times in different commands'
seq 10 | parallel -v -Xj1 echo {} \; echo {}
echo '### Test of -X {1}-{2} with multiple input sources'
parallel -j1 -kX echo {1}-{2} ::: a ::: b
parallel -j2 -kX echo {1}-{2} ::: a b ::: c d
parallel -j2 -kX echo {1}-{2} ::: a b c ::: d e f
parallel -j0 -kX echo {1}-{2} ::: a b c ::: d e f
echo '### Test of -X {}-{.} with multiple input sources'
parallel -j1 -kX echo {}-{.} ::: a ::: b
parallel -j2 -kX echo {}-{.} ::: a b ::: c d
parallel -j2 -kX echo {}-{.} ::: a b c ::: d e f
parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f
echo '### Test of -r with --pipe - the first should give an empty line. The second should not.'
echo | parallel -j2 -N1 --pipe cat | wc -l
echo | parallel -r -j2 -N1 --pipe cat | wc -l
echo '### Test --tty'
seq 0.1 0.1 0.5 | parallel -j1 --tty tty\;sleep
echo '**'
echo '### Test bugfix if no command given'
(echo echo; seq 1 5; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10
echo '**'
echo "### Test --results"
mkdir -p /tmp/parallel_results_test;
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;
ls /tmp/parallel_results_test/testD/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testD*
echo "### Test --result"
mkdir -p /tmp/parallel_results_test;
parallel -k --result /tmp/parallel_results_test/testE echo {1} {2} ::: I II ::: III IIII;
ls /tmp/parallel_results_test/testE/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testE*
echo "### Test --results --header :"
mkdir -p /tmp/parallel_results_test;
parallel -k --header : --results /tmp/parallel_results_test/testB echo {1} {2} ::: a I II ::: b III IIII;
ls /tmp/parallel_results_test/testB/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testB*
echo "### Test --results --header : named - a/b swapped"
mkdir -p /tmp/parallel_results_test;
parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: b III IIII ::: a I II;
ls /tmp/parallel_results_test/testC/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testC*
echo "### Test --results --header : piped"
mkdir -p /tmp/parallel_results_test;
(echo Col; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testF true;
find /tmp/parallel_results_test/testF/*/*/* | sort; rm -rf /tmp/parallel_results_test/testF*
echo "### Test --results --header : piped - non-existing column header"
mkdir -p /tmp/parallel_results_test;
(printf "Col1\t\n"; printf "v1\tv2\tv3\n"; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testG true; find /tmp/parallel_results_test/testG/ | sort; rm -rf /tmp/parallel_results_test/testG*
echo '**'
echo "bug #34958: --pipe with record size measured in lines"
seq 10 | parallel -k --pipe -l 4 cat\;echo bug 34958-2
echo '**'
echo "bug #37325: Inefficiency of --pipe -L"
seq 2000 | parallel -k --pipe --block 1k -L 4 wc\;echo FOO | uniq
echo '**'
echo "bug #34958: --pipe with record size measured in lines"
seq 10 | parallel -k --pipe -L 4 cat\;echo bug 34958-1
echo '**'
echo "### bug #41482: --pipe --compress blocks at different -j/seq combinations"
seq 1 | parallel -k -j2 --compress -N1 -L1 --pipe cat;
echo echo 1-4 + 1-4
seq 4 | parallel -k -j3 --compress -N1 -L1 -vv echo;
echo 4 times wc to stderr to stdout
(seq 4 | parallel -k -j3 --compress -N1 -L1 --pipe wc '>&2') 2>&1 >/dev/null
echo 1 2 3 4
seq 4 | parallel -k -j3 --compress echo;
echo 1 2 3 4
seq 4 | parallel -k -j1 --compress echo;
echo 1 2
seq 2 | parallel -k -j1 --compress echo;
echo 1 2 3
seq 3 | parallel -k -j2 --compress -N1 -L1 --pipe cat;
echo '**'
echo '### --pipe without command'
seq -w 10 | stdout parallel --pipe
echo '**'
echo '### bug #36260: {n} expansion in --colsep files fails for empty fields if all following fields are also empty'
echo A,B,, | parallel --colsep , echo {1}{3}{2}
echo '**'
echo '### bug #34422: parallel -X --eta crashes with div by zero'
# We do not care how long it took
seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG'
EOF EOF
echo '### 1 .par file from --files expected' echo '### 1 .par file from --files expected'
find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | wc -l find /tmp{/*,}/*.{par,tms,tmx} 2>/dev/null -mmin -10 | wc -l

View file

@ -8,9 +8,8 @@ TMP5G=${TMP5G:-/dev/shm}
export TMP5G export TMP5G
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
echo '### Test if we can deal with output > 4 GB' echo '### Test of --retries on unreachable host'
## echo | niceload --io 10 parallel -q perl -e '"\$a=\"x\"x1000000;for(0..4300){print \$a}"' | md5sum seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
echo | parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | nice md5sum
echo '**' echo '**'
@ -19,9 +18,34 @@ echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
echo '**' echo '**'
echo '### Test of --retries on unreachable host' echo '### Test if we can deal with output > 4 GB'
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo echo | nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | nice md5sum
echo '**' echo '**'
echo 'bug #41613: --compress --line-buffer no --tagstring';
diff
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --line-buffer
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
>/dev/null
|| (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
echo 'bug #41613: --compress --line-buffer with --tagstring';
diff
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#}
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} --line-buffer
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
>/dev/null
|| (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
echo '**'
EOF EOF

View file

@ -97,4 +97,42 @@ echo '### bug #47750: -k --line-buffer should give current job up to now'
parallel --line-buffer --tag -k 'seq {} | pv -qL 10' ::: {10..20} parallel --line-buffer --tag -k 'seq {} | pv -qL 10' ::: {10..20}
parallel --line-buffer -k 'echo stdout top;sleep 1;echo stderr in the middle >&2; sleep 1;echo stdout' ::: end 2>&1 parallel --line-buffer -k 'echo stdout top;sleep 1;echo stderr in the middle >&2; sleep 1;echo stdout' ::: end 2>&1
echo '**'
echo "### Test memory consumption stays (almost) the same for 30 and 300 jobs"
echo "should give 1 == true"
mem30=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x60000;for(1..30){print $a,"\n"}') );
mem300=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x60000;for(1..300){print $a,"\n"}') );
echo "Memory use should not depend very much on the total number of jobs run\n";
echo "Test if memory consumption(300 jobs) < memory consumption(30 jobs) * 110% ";
echo $(($mem300*100 < $mem30 * 110))
echo '**'
echo "### Test max line length -m -I"
seq 1 60000 | parallel -I :: -m -j1 echo a::b::c | sort >/tmp/114-a$$;
md5sum </tmp/114-a$$;
export CHAR=$(cat /tmp/114-a$$ | wc -c);
export LINES=$(cat /tmp/114-a$$ | wc -l);
echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc);
rm /tmp/114-a$$
echo "### Test max line length -X -I"
seq 1 60000 | parallel -I :: -X -j1 echo a::b::c | sort >/tmp/114-b$$;
md5sum </tmp/114-b$$;
export CHAR=$(cat /tmp/114-b$$ | wc -c);
export LINES=$(cat /tmp/114-b$$ | wc -l);
echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc);
rm /tmp/114-b$$
echo '**'
echo "### bug #41609: --compress fails"
seq 12 | parallel --compress --compress-program bzip2 -k seq {} 1000000 | md5sum
seq 12 | parallel --compress -k seq {} 1000000 | md5sum
EOF EOF

View file

@ -4,7 +4,97 @@
# Each should be taking 1-3s and be possible to run in parallel # Each should be taking 1-3s and be possible to run in parallel
# I.e.: No race conditions, no logins # I.e.: No race conditions, no logins
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 -k --joblog /tmp/jl-`basename $0` -L1
echo "### BUG: The length for -X is not close to max (131072)";
seq 1 60000 | parallel -X echo {.} aa {}{.} {}{}d{} {}dd{}d{.} |head -n 1 |wc
seq 1 60000 | parallel -X echo a{}b{}c |head -n 1 |wc
seq 1 60000 | parallel -X echo |head -n 1 |wc
seq 1 60000 | parallel -X echo a{}b{}c {} |head -n 1 |wc
seq 1 60000 | parallel -X echo {}aa{} |head -n 1 |wc
seq 1 60000 | parallel -X echo {} aa {} |head -n 1 |wc
echo '### Test --fifo under csh' echo '### Test --fifo under csh'
csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'"; echo exit $? csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'"; echo exit $?
echo '**'
echo '### bug #44546: If --compress-program fails: fail'
parallel --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $?
parallel --tag --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $?
(parallel --files --tag --line-buffer --compress-program false echo \;sleep 1\;ls ::: /no-existing; echo $?) | tail -n1
parallel --tag --compress-program false echo \;ls ::: /no-existing; echo $?
parallel --line-buffer --compress-program false echo \;ls ::: /no-existing; echo $?
parallel --compress-program false echo \;ls ::: /no-existing; echo $?
echo 'bug #41613: --compress --line-buffer - no newline';
echo 'pipe compress tagstring'
perl -e 'print "O"'| parallel --compress --tagstring {#} --pipe --line-buffer cat; echo "K"
echo 'pipe compress notagstring'
perl -e 'print "O"'| parallel --compress --pipe --line-buffer cat; echo "K"
echo 'pipe nocompress tagstring'
perl -e 'print "O"'| parallel --tagstring {#} --pipe --line-buffer cat; echo "K"
echo 'pipe nocompress notagstring'
perl -e 'print "O"'| parallel --pipe --line-buffer cat; echo "K"
echo 'nopipe compress tagstring'
parallel --compress --tagstring {#} --line-buffer echo {} O ::: -n; echo "K"
echo 'nopipe compress notagstring'
parallel --compress --line-buffer echo {} O ::: -n; echo "K"
echo 'nopipe nocompress tagstring'
parallel --tagstring {#} --line-buffer echo {} O ::: -n; echo "K"
echo 'nopipe nocompress notagstring'
parallel --line-buffer echo {} O ::: -n; echo "K"
echo 'Compress with failing (de)compressor'
parallel -k --tag --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: tag true true
parallel -k --tag --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: tag false true
parallel -k --tag --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: tag false false
parallel -k --tag --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag true false
parallel -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: true true
parallel -k --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: false true
parallel -k --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: false false
parallel -k --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: true false
parallel -k --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: line-buffer true true
parallel -k --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: line-buffer false true
parallel -k --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: line-buffer false false
parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag line-buffer true false
parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;true' echo ::: tag line-buffer true true
parallel -k --tag --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;true' echo ::: tag line-buffer false true
parallel -k --tag --line-buffer --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: tag line-buffer false false
parallel -k --tag --line-buffer --compress --compress-program 'cat;true' --decompress-program 'cat;false' echo ::: tag line-buffer true 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 -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' echo ::: files false false | parallel rm
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'
# The first line dumps core if run from make file. Why?!
stdout parallel --compress --compress-program pxz ls /{} ::: OK-if-missing-file
stdout parallel --compress --compress-program pixz --decompress-program 'pixz -d' ls /{} ::: OK-if-missing-file
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
echo '**'
echo "### Test -I";
seq 1 10 | parallel -k 'seq 1 {} | parallel -k -I :: echo {} ::'
echo "### Test -X -I";
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -X -k -I :: echo a{} b::'
echo "### Test -m -I";
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::'
EOF EOF

View file

@ -7,6 +7,13 @@ cd tmp
unset run_test unset run_test
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj300% -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj300% -k --joblog /tmp/jl-`basename $0` -L1
echo '### Test --load remote'
ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -N0 burnP6' &
sleep 1;
stdout /usr/bin/time -f %e parallel -S parallel@lo --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
echo '**'
echo '### Stop if all hosts are filtered and there are no hosts left to run on' echo '### Stop if all hosts are filtered and there are no hosts left to run on'
stdout parallel --filter-hosts -S no-such.host echo ::: 1 stdout parallel --filter-hosts -S no-such.host echo ::: 1
@ -131,6 +138,11 @@ echo '### bug #46519: --onall ignores --transfer'
ls bug46519.?? bug46519.???; ls bug46519.?? bug46519.???;
parallel --onall -S csh@lo,sh@lo ls bug46519.{}{} bug46519.{}{}{} ::: a b c && echo Cleanup failed parallel --onall -S csh@lo,sh@lo ls bug46519.{}{} bug46519.{}{}{} ::: a b c && echo Cleanup failed
echo '### Test --nice remote'
stdout parallel --nice 1 -S lo -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b |
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z/\\+=0-9]{500,}:base64:i;'
echo '**'
echo TODO echo TODO

View file

@ -58,21 +58,6 @@ echo "### Test -X -I";
echo "### Test -m -I"; echo "### Test -m -I";
seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::' seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::'
echo "### Test max line length -m -I"
seq 1 60000 | parallel -I :: -m -j1 echo a::b::c |
tee >(sort |md5sum) >/tmp/114-a$$;
export CHAR=$(cat /tmp/114-a$$ | wc -c);
export LINES=$(cat /tmp/114-a$$ | wc -l);
echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc);
rm /tmp/114-a$$
echo "### Test max line length -X -I"
seq 1 60000 | parallel -I :: -X -j1 echo a::b::c |
tee >(sort |md5sum) >/tmp/114-b$$;
export CHAR=$(cat /tmp/114-b$$ | wc -c);
export LINES=$(cat /tmp/114-b$$ | wc -l);
echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc);
rm /tmp/114-b$$
echo "### bug #36659: --sshlogin strips leading slash from ssh command" echo "### bug #36659: --sshlogin strips leading slash from ssh command"
parallel --sshlogin '/usr/bin/ssh localhost' echo ::: OK parallel --sshlogin '/usr/bin/ssh localhost' echo ::: OK
@ -90,47 +75,5 @@ echo "bug #36657: --load does not work with custom ssh"
export -f ssh; export -f ssh;
parallel --load=1000% -S "/usr/bin/ssh localhost" echo ::: OK parallel --load=1000% -S "/usr/bin/ssh localhost" echo ::: OK
echo "bug #34958: --pipe with record size measured in lines"
seq 10 | parallel -k --pipe -L 4 cat\;echo bug 34958-1
echo "bug #37325: Inefficiency of --pipe -L"
seq 2000 | parallel -k --pipe --block 1k -L 4 wc\;echo FOO | uniq
echo "bug #34958: --pipe with record size measured in lines"
seq 10 | parallel -k --pipe -l 4 cat\;echo bug 34958-2
echo "### Test --results"
mkdir -p /tmp/parallel_results_test;
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;
ls /tmp/parallel_results_test/testD/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testD*
echo "### Test --result"
mkdir -p /tmp/parallel_results_test;
parallel -k --result /tmp/parallel_results_test/testE echo {1} {2} ::: I II ::: III IIII;
ls /tmp/parallel_results_test/testE/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testE*
echo "### Test --results --header :"
mkdir -p /tmp/parallel_results_test;
parallel -k --header : --results /tmp/parallel_results_test/testB echo {1} {2} ::: a I II ::: b III IIII;
ls /tmp/parallel_results_test/testB/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testB*
echo "### Test --results --header : named - a/b swapped"
mkdir -p /tmp/parallel_results_test;
parallel -k --header : --results /tmp/parallel_results_test/testC echo {a} {b} ::: b III IIII ::: a I II;
ls /tmp/parallel_results_test/testC/*/*/*/*/*; rm -rf /tmp/parallel_results_test/testC*
echo "### Test --results --header : piped"
mkdir -p /tmp/parallel_results_test;
(echo Col; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testF true;
find /tmp/parallel_results_test/testF/*/*/* | sort; rm -rf /tmp/parallel_results_test/testF*
echo "### Test --results --header : piped - non-existing column header"
mkdir -p /tmp/parallel_results_test;
(printf "Col1\t\n"; printf "v1\tv2\tv3\n"; perl -e 'print "backslash\\tab\tslash/null\0eof\n"') | parallel --header : --result /tmp/parallel_results_test/testG true; find /tmp/parallel_results_test/testG/ | sort; rm -rf /tmp/parallel_results_test/testG*
EOF EOF

View file

@ -5,22 +5,28 @@
rsync -Ha --delete input-files/testdir2/ tmp/ rsync -Ha --delete input-files/testdir2/ tmp/
cd tmp cd tmp
echo '### Test {.} and {}' echo '### Test {.} and {}'
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {.}_thumb.jpg
find . -name '*.jpg' | parallel -j +0 convert -geometry 120 {} {.}_thumb.jpg
echo '### Test {.} with files that have no . but dir does' echo '### Test {.} with files that have no . but dir does'
mkdir -p /tmp/test-of-{.}-parallel/subdir
touch /tmp/test-of-{.}-parallel/subdir/file mkdir -p /tmp/test-of-{.}-parallel/subdir;
touch /tmp/test-of-{.}-parallel/subdir/file{.}.funkyextension}} touch /tmp/test-of-{.}-parallel/subdir/file;
find /tmp/test-of-{.}-parallel -type f | parallel echo {.} | sort touch /tmp/test-of-{.}-parallel/subdir/file{.}.funkyextension}};
rm -rf /tmp/test-of-{.}-parallel/subdir find /tmp/test-of-{.}-parallel -type f | parallel echo {.} | sort;
rm -rf /tmp/test-of-{.}-parallel/subdir
find -type f | parallel -k diff {} a/foo ">"{.}.diff find -type f | parallel -k diff {} a/foo ">"{.}.diff
ls | parallel -kv --group "ls {}|wc;echo {}"
ls | parallel -kj500 'sleep 1; ls {} | perl -ne "END{print $..\" {}\n\"}"' ls | parallel -kv --group "ls {}|wc;echo {}"
ls | parallel -kj500 --group 'sleep 1; ls {} | perl -ne "END{print $..\" {}\n\"}"' ls | parallel -kj500 'sleep 1; ls {} | perl -ne "END{print $..\" {}\n\"}"'
ls | parallel -kj500 --group 'sleep 1; ls {} | perl -ne "END{print $..\" {}\n\"}"'
mkdir 1-col 2-col mkdir 1-col 2-col
ls | parallel -kv touch -- {.}/abc-{.}-{} 2>&1 ls | parallel -kv touch -- {.}/abc-{.}-{} 2>&1
ls | parallel -kv rm -- {.}/abc-{.}-{} 2>&1 ls | parallel -kv rm -- {.}/abc-{.}-{} 2>&1
#test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v touch -- {}/abc-{}-{} 2>&1 \ #test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v touch -- {}/abc-{}-{} 2>&1 \
@ -28,7 +34,7 @@ ls | parallel -kv rm -- {.}/abc-{.}-{} 2>&1
#test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v rmdir -- {} 2>&1 \ #test05.sh:find . -type d -print0 | perl -0 -pe 's:^./::' | parallel -0 -v rmdir -- {} 2>&1 \
# -L1 will join lines ending in ' ' # -L1 will join lines ending in ' '
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | nice parallel -vj0 -k -L1 cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj0 -k -L1 --joblog /tmp/jl-`basename $0`
echo '### Test compress' echo '### Test compress'
seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10' seq 5 | parallel -j2 --tag --compress 'seq {} | pv -q -L 10'
@ -39,10 +45,11 @@ echo '### Test weird regexp chars'
seq 1 6 | parallel -j1 -I :: -X echo a::b::^c::[.}c seq 1 6 | parallel -j1 -I :: -X echo a::b::^c::[.}c
echo '### Test -m' echo '### Test -m'
(echo foo;echo bar;echo joe.gif) | parallel -j1 -km echo 1{}2{.}3 A{.}B{.}C
(echo foo;echo bar;echo joe.gif) | parallel -j1 -kX echo 1{}2{.}3 A{.}B{.}C (echo foo;echo bar;echo joe.gif) | parallel -j1 -km echo 1{}2{.}3 A{.}B{.}C
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -km echo a{}b{.}c{.} (echo foo;echo bar;echo joe.gif) | parallel -j1 -kX echo 1{}2{.}3 A{.}B{.}C
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -kX echo a{}b{.}c{.} seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -km echo a{}b{.}c{.}
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -kX echo a{}b{.}c{.}
echo '### Test -m with 60000 args'; echo '### Test -m with 60000 args';
seq 1 60000 | perl -pe 's/$/.gif/' | seq 1 60000 | perl -pe 's/$/.gif/' |
@ -59,37 +66,51 @@ echo '### Test -X with 60000 args';
sleep 1 sleep 1
echo '### Test -X with 60000 args and 5 expansions' echo '### Test -X with 60000 args and 5 expansions'
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | wc -l
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c | wc -l
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b | wc -l
echo '### Test {.} does not repeat more than {}' echo '### Test {.} does not repeat more than {}'
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.}
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.}
echo '### Test -I with shell meta chars' echo '### Test -I with shell meta chars'
seq 1 60000 | parallel -j1 -I :: -X echo a::b::c:: | wc -l
seq 1 60000 | parallel -j1 -I '<>' -X echo 'a<>b<>c<>' | wc -l seq 1 60000 | parallel -j1 -I :: -X echo a::b::c:: | wc -l
seq 1 60000 | parallel -j1 -I '<' -X echo 'a<b<c<' | wc -l seq 1 60000 | parallel -j1 -I '<>' -X echo 'a<>b<>c<>' | wc -l
seq 1 60000 | parallel -j1 -I '>' -X echo 'a>b>c>' | wc -l seq 1 60000 | parallel -j1 -I '<' -X echo 'a<b<c<' | wc -l
seq 1 60000 | parallel -j1 -I '>' -X echo 'a>b>c>' | wc -l
echo '### Test {.}' echo '### Test {.}'
echo a | parallel -qX echo "'"{.}"' "
echo a | parallel -qX echo "'{.}'" echo a | parallel -qX echo "'"{.}"' "
(echo "sleep 3; echo begin"; seq 1 30 | parallel -kq echo "sleep 1; echo {.}"; echo "echo end") | parallel -k -j0 echo a | parallel -qX echo "'{.}'"
(echo "sleep 3; echo begin"; seq 1 30 | parallel -kq echo "sleep 1; echo {.}"; echo "echo end") | parallel -k -j0
echo '### Test -I with -X and -m' echo '### Test -I with -X and -m'
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -k -I :: echo {.} ::'
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -X -k -I :: echo a{.} b::' seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -k -I :: echo {.} ::'
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -m -k -I :: echo a{.} b::' seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -X -k -I :: echo a{.} b::'
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -m -k -I :: echo a{.} b::'
echo '### Test -i' echo '### Test -i'
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{.}ce
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{.}ce
echo '### Test --replace' echo '### Test --replace'
(echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{.}ce
(echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{.}ce
echo '### Test -t' echo '### Test -t'
(echo b; echo c; echo f) | parallel -k -t echo {.}ar 2>&1 >/dev/null
(echo b; echo c; echo f) | parallel -k -t echo {.}ar 2>&1 >/dev/null
echo '### Test --verbose' echo '### Test --verbose'
(echo b; echo c; echo f) | parallel -k --verbose echo {.}ar 2>&1 >/dev/null
(echo b; echo c; echo f) | parallel -k --verbose echo {.}ar 2>&1 >/dev/null
EOF EOF

View file

@ -8,28 +8,6 @@ NICEPAR="nice nice parallel"
export NICEPAR export NICEPAR
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | stdout parallel -vj4 -k --joblog /tmp/jl-`basename $0` -L1
echo 'bug #41613: --compress --line-buffer no --tagstring';
diff
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
$NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
$NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress --line-buffer
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
>/dev/null
|| (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
echo 'bug #41613: --compress --line-buffer with --tagstring';
diff
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
$NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#}
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
<(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'|
$NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} --line-buffer
pv -qL 1000000 | perl -pe 's/(....).*/$1/')
>/dev/null
|| (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
echo 'bug #41412: --timeout + --delay causes deadlock'; echo 'bug #41412: --timeout + --delay causes deadlock';
seq 10 | parallel -j10 --timeout 1 --delay .3 echo; seq 10 | parallel -j10 --timeout 1 --delay .3 echo;
parallel -j3 --timeout 1 --delay 2 echo ::: 1 2 3; parallel -j3 --timeout 1 --delay 2 echo ::: 1 2 3;

View file

@ -67,6 +67,11 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/
s/echo \d; exit \d\n/echo X; exit X\n/; s/echo \d; exit \d\n/echo X; exit X\n/;
# Race condition causes outdir to sometime exist # Race condition causes outdir to sometime exist
s/(std(out|err)|seq): Permission denied/$1: No such file or directory/; s/(std(out|err)|seq): Permission denied/$1: No such file or directory/;
# Race condition
s/^4-(middle|end)\n//;
# Timings are often off
s/^(\d)$/9/;
s/^(\d\d)$/99/;
' '
# 3+3 .par files (from --files), 1 .tms-file from tmux attach # 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 find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | wc -l

View file

@ -38,68 +38,8 @@ echo '### Test killing children with --timeout and exit value (failed if timed o
pstree $$ | grep sleep | grep -v anacron | grep -v screensave | wc; pstree $$ | grep sleep | grep -v anacron | grep -v screensave | wc;
parallel --timeout 3 'true {} ; for i in `seq 100 120`; do bash -c "(sleep $i)" & sleep $i & done; wait; echo No good' ::: 1000000000 1000000001 ; parallel --timeout 3 'true {} ; for i in `seq 100 120`; do bash -c "(sleep $i)" & sleep $i & done; wait; echo No good' ::: 1000000000 1000000001 ;
echo $?; sleep 2; pstree $$ | grep sleep | grep -v anacron | grep -v screensave | wc echo $?; sleep 2; pstree $$ | grep sleep | grep -v anacron | grep -v screensave | wc
echo '### Test -L -l and --max-lines'
(echo a_b;echo c) | parallel -km -L2 echo
(echo a_b;echo c) | parallel -k -L2 echo
(echo a_b;echo c) | xargs -L2 echo
echo '### xargs -L1 echo'
(echo a_b;echo c) | parallel -km -L1 echo
(echo a_b;echo c) | parallel -k -L1 echo
(echo a_b;echo c) | xargs -L1 echo
echo 'Lines ending in space should continue on next line'
echo '### xargs -L1 echo'
(echo a_b' ';echo c;echo d) | parallel -km -L1 echo
(echo a_b' ';echo c;echo d) | parallel -k -L1 echo
(echo a_b' ';echo c;echo d) | xargs -L1 echo
echo '### xargs -L2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -L2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo
echo '### xargs -l echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | parallel -l -k echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | xargs -l echo
echo '### xargs -l2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo
echo '### xargs -l1 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l1 echo
(echo a_b' ';echo c;echo d;echo e) | xargs -l1 echo
echo '### xargs --max-lines=2 echo'
(echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -k --max-lines 2 echo
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo
echo '### xargs --max-lines echo'
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -k echo # This behaves wrong
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines echo
echo '### test too long args'
perl -e 'print "z"x1000000' | parallel echo 2>&1
perl -e 'print "z"x1000000' | xargs echo 2>&1
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10 echo
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout xargs -s 10 echo
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -kX -s 10 echo
echo '### Test -x'
(seq 1 10; echo 12345; seq 12 15) | stdout parallel -j1 -km -s 10 -x echo
(seq 1 10; echo 12345; seq 12 15) | stdout parallel -j1 -kX -s 10 -x echo
(seq 1 10; echo 12345; seq 12 15) | stdout xargs -s 10 -x echo
(seq 1 10; echo 1234; seq 12 15) | stdout parallel -j1 -km -s 10 -x echo
(seq 1 10; echo 1234; seq 12 15) | stdout parallel -j1 -kX -s 10 -x echo
(seq 1 10; echo 1234; seq 12 15) | stdout xargs -s 10 -x echo
echo '### Test -a and --arg-file: Read input from file instead of stdin'
seq 1 10 >/tmp/parallel_$$-1; parallel -k -a /tmp/parallel_$$-1 echo; rm /tmp/parallel_$$-1
seq 1 10 >/tmp/parallel_$$-2; parallel -k --arg-file /tmp/parallel_$$-2 echo; rm /tmp/parallel_$$-2
EOF EOF
#echo '### Test bugfix if no command given'
#(echo echo; seq 1 5; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10
cd input-files/test15 cd input-files/test15
echo 'xargs Expect: 3 1 2' echo 'xargs Expect: 3 1 2'
@ -132,138 +72,4 @@ echo /tmp/parallel_f1 /tmp/parallel_f2 | stdout parallel -kv --delimiter ' ' gzi
rm /tmp/parallel_f* rm /tmp/parallel_f*
cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
echo '### Test -i and --replace: Replace with argument'
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce
(echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{}ce
(echo a; echo END; echo b) | parallel -k -i+ -eEND echo repl+ce
(echo e; echo END; echo b) | parallel -k -i'*' -eEND echo r'*'plac'*'
(echo a; echo END; echo b) | parallel -k --replace + -eEND echo repl+ce
(echo a; echo END; echo b) | parallel -k --replace== -eEND echo repl=ce
(echo a; echo END; echo b) | parallel -k --replace = -eEND echo repl=ce
(echo a; echo END; echo b) | parallel -k --replace=^ -eEND echo repl^ce
(echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce
echo '### Test -E: Artificial end-of-file'
(echo include this; echo END; echo not this) | parallel -k -E END echo
(echo include this; echo END; echo not this) | parallel -k -EEND echo
echo '### Test -e and --eof: Artificial end-of-file'
(echo include this; echo END; echo not this) | parallel -k -e END echo
(echo include this; echo END; echo not this) | parallel -k -eEND echo
(echo include this; echo END; echo not this) | parallel -k --eof=END echo
(echo include this; echo END; echo not this) | parallel -k --eof END echo
echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)'
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -m echo
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 echo
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args=1 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args=2 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 -X echo
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 echo
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo
echo '### Test --max-procs and -P: Number of processes'
seq 1 10 | parallel -k --max-procs +0 echo max proc
seq 1 10 | parallel -k -P 200% echo 200% proc
echo '### Test --delimiter and -d: Delimiter instead of newline'
echo '# Yes there is supposed to be an extra newline for -d N'
echo line 1Nline 2Nline 3 | parallel -k -d N echo This is
echo line 1Nline 2Nline 3 | parallel -k --delimiter N echo This is
printf "delimiter NUL line 1\0line 2\0line 3" | parallel -k -d '\0' echo
printf "delimiter TAB line 1\tline 2\tline 3" | parallel -k --delimiter '\t' echo
echo '### Test --max-chars and -s: Max number of chars in a line'
(echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo
(echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo
echo '### Test --no-run-if-empty and -r: This should give no output'
echo " " | parallel -r echo
echo " " | parallel --no-run-if-empty echo
echo '### Test --help and -h: Help output (just check we get the same amount of lines)'
echo Output from -h and --help
parallel -h | wc -l
parallel --help | wc -l
echo '### Test --version: Version output (just check we get the same amount of lines)'
parallel --version | wc -l
echo '### Test --verbose and -t'
(echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null
(echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null
echo '### Test --show-limits'
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
(echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar
echo '### Test empty line as input'
echo | parallel echo empty input line
echo '### Tests if (cat | sh) works'
perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort
echo '### Test if xargs-mode works'
perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort
echo '### Test -q'
parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i"
echo '### Test -q {#}'
parallel -kq echo {#} ::: a b
parallel -kq echo {\#} ::: a b
parallel -kq echo {\\#} ::: a b
echo '### Test long commands do not take up all memory'
seq 1 100 | parallel -j0 -qv perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2>/dev/null | sort
echo '### Test 0-arguments'
seq 1 2 | parallel -k -n0 echo n0
seq 1 2 | parallel -k -L0 echo L0
seq 1 2 | parallel -k -N0 echo N0
echo '### Because of --tollef -l, then -l0 == -l1, sorry'
seq 1 2 | parallel -k -l0 echo l0
echo '### Test replace {}'
seq 1 2 | parallel -k -N0 echo replace {} curlies
echo '### Test arguments on commandline'
parallel -k -N0 echo args on cmdline ::: 1 2
echo '### Test --nice locally'
parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b
echo '### Test --nice remote'
stdout parallel --nice 1 -S .. -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b |
perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;'
echo '### Test distribute arguments at EOF to 2 jobslots'
seq 1 92 | parallel -j+0 -kX -s 100 echo
echo '### Test distribute arguments at EOF to 5 jobslots'
seq 1 92 | parallel -j+3 -kX -s 100 echo
echo '### Test distribute arguments at EOF to infinity jobslots'
seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null
echo '### Test -N is not broken by distribution - single line'
seq 9 | parallel -N 10 echo
echo '### Test -N is not broken by distribution - two lines'
seq 19 | parallel -k -N 10 echo
echo '### Test -N context replace'
seq 19 | parallel -k -N 10 echo a{}b
echo '### Test -L context replace'
seq 19 | parallel -k -L 10 echo a{}b
EOF
touch ~/.parallel/will-cite touch ~/.parallel/will-cite

View file

@ -192,7 +192,7 @@ stdout ssh $SSHLOGIN1 ls '/tmp/parallel.file*' || echo OK
stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK
echo '### --transfer --cleanup - multiple argument files' echo '### --transfer --cleanup - multiple argument files'
parallel --xapply -kv --transfer --cleanup -S$SSHLOGIN2 cat {2} {1} :::: /tmp/test17rel <(sort -r /tmp/test17abs) parallel --xapply -kv --transferfile {1} --transferfile {2} --cleanup -S$SSHLOGIN2 cat {2} {1} :::: /tmp/test17rel <(sort -r /tmp/test17abs)
# Should give: No such file or directory # Should give: No such file or directory
stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK

View file

@ -123,7 +123,7 @@ stdout ssh $SSHLOGIN1 ls 'tmp/parallel.file*' || echo OK
stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls 'tmp/parallel.file*' || echo OK
echo 'Input for ssh' echo 'Input for ssh'
cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' | cat /tmp/myssh1-run /tmp/myssh2-run | perl -pe 's/(PID.)\d+/${1}00000/g;s/(SEQ[ =]|line)\d/$1X/g;' |
perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-zA-Z0-9/+=]{500,}:base64:;' perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-zA-Z0-9/\\+=]{500,}:base64:;'
rm /tmp/myssh1-run /tmp/myssh2-run rm /tmp/myssh1-run /tmp/myssh2-run
rm -rf /tmp/parallel.file* rm -rf /tmp/parallel.file*

View file

@ -13,16 +13,6 @@ echo '### Test of --progress'
echo '### Test of --progress with no jobs' echo '### Test of --progress with no jobs'
stdout parallel --progress "sleep 1; echo {}" < /dev/null stdout parallel --progress "sleep 1; echo {}" < /dev/null
echo '### bug #34422: parallel -X --eta crashes with div by zero'
# We do not care how long it took
seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG'
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed' echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $? parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
echo '### --pipe without command'
seq -w 10 | stdout parallel --pipe
echo '### bug #36260: {n} expansion in --colsep files fails for empty fields if all following fields are also empty'
echo A,B,, | parallel --colsep , echo {1}{3}{2}
EOF EOF

View file

@ -5,14 +5,6 @@ SERVER2=parallel-server1
# -L1 will join lines ending in ' ' # -L1 will join lines ending in ' '
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
echo "### BUG: The length for -X is not close to max (131072)";
seq 1 60000 | nice parallel -X echo {.} aa {}{.} {}{}d{} {}dd{}d{.} |head -n 1 |wc
seq 1 60000 | nice parallel -X echo a{}b{}c |head -n 1 |wc
seq 1 60000 | nice parallel -X echo |head -n 1 |wc
seq 1 60000 | nice parallel -X echo a{}b{}c {} |head -n 1 |wc
seq 1 60000 | nice parallel -X echo {}aa{} |head -n 1 |wc
seq 1 60000 | nice parallel -X echo {} aa {} |head -n 1 |wc
echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin' echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin'
seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null" seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null"
@ -21,10 +13,6 @@ echo '### Test --load locally - should take >10s'
seq 10 | parallel --nice 19 --timeout 13 -j0 -N0 "gzip < /dev/zero > /dev/null" & seq 10 | parallel --nice 19 --timeout 13 -j0 -N0 "gzip < /dev/zero > /dev/null" &
sleep 2; stdout /usr/bin/time -f %e parallel --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"' sleep 2; stdout /usr/bin/time -f %e parallel --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
echo '### Test --load remote'
ssh parallel@$SERVER2 'seq 10 | parallel --nice 19 --timeout 10 -j0 -N0 "gzip < /dev/zero > /dev/null"' &
stdout /usr/bin/time -f %e parallel -S parallel@$SERVER2 --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
echo '### Test --load read from a file - more than 3s' echo '### Test --load read from a file - more than 3s'
echo '# This will run 10 processes in parallel for 10s'; echo '# This will run 10 processes in parallel for 10s';
seq 10 | parallel --nice 19 --timeout 10 -j0 -N0 "gzip < /dev/zero > /dev/null" & seq 10 | parallel --nice 19 --timeout 10 -j0 -N0 "gzip < /dev/zero > /dev/null" &

View file

@ -195,7 +195,7 @@ stdout ssh $SSHLOGIN1 ls '/tmp/parallel.file*' || echo OK
stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK
echo '### --transfer --cleanup - multiple argument files' echo '### --transfer --cleanup - multiple argument files'
parallel -kv --xapply --transfer --cleanup -S$SSHLOGIN2 cat {2} {1} :::: /tmp/test17rel <(sort -r /tmp/test17abs) parallel --xapply -kv --transferfile {1} --transferfile {2} --cleanup -S$SSHLOGIN2 cat {2} {1} :::: /tmp/test17rel <(sort -r /tmp/test17abs)
# Should give: No such file or directory # Should give: No such file or directory
stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK stdout ssh $SSHLOGIN2 ls '/tmp/parallel.file*' || echo OK

View file

@ -6,32 +6,11 @@ SERVER2=parallel-server2
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1 cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
echo '### Test --return of weirdly named file' echo '### Test --return of weirdly named file'
stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' | stdout parallel --return {} -vv -S parallel\@$SERVER1 echo '>'{} ::: 'aa<${#}" b' |
perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;'; rm 'aa<${#}" b' perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
echo '### Test if remote login shell is csh' echo '### Test if remote login shell is csh'
stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c |
perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;' perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'
echo '### Test {} multiple times in different commands'
seq 10 | parallel -v -Xj1 echo {} \; echo {}
echo '### Test of -X {1}-{2} with multiple input sources'
parallel -j1 -kX echo {1}-{2} ::: a ::: b
parallel -j2 -kX echo {1}-{2} ::: a b ::: c d
parallel -j2 -kX echo {1}-{2} ::: a b c ::: d e f
parallel -j0 -kX echo {1}-{2} ::: a b c ::: d e f
echo '### Test of -X {}-{.} with multiple input sources'
parallel -j1 -kX echo {}-{.} ::: a ::: b
parallel -j2 -kX echo {}-{.} ::: a b ::: c d
parallel -j2 -kX echo {}-{.} ::: a b c ::: d e f
parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f
echo '### Test of -r with --pipe - the first should give an empty line. The second should not.'
echo | parallel -j2 -N1 --pipe cat | wc -l
echo | parallel -r -j2 -N1 --pipe cat | wc -l
echo '### Test --tty'
seq 0.1 0.1 0.5 | parallel -j1 --tty tty\;sleep
EOF EOF

View file

@ -1,15 +0,0 @@
#!/bin/bash
# -L1 will join lines ending in ' '
cat <<'EOF' | sed -e s/\$SERVER1/$SERVER1/\;s/\$SERVER2/$SERVER2/ | parallel -vj10 -k --joblog /tmp/jl-`basename $0` -L1
echo "### Test memory consumption stays (almost) the same for 30 and 300 jobs"
mem30=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x100000;for(1..30){print $a,"\n"}') );
mem300=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x100000;for(1..300){print $a,"\n"}') );
echo "Memory use should not depend very much on the total number of jobs run\n";
echo "Test if memory consumption(300 jobs) < memory consumption(30 jobs) * 110% ";
echo $(($mem300*100 < $mem30 * 110))
echo '### Test --shellquote'
perl -e 'print pack("c*",1..255)' | parallel -0 --shellquote
EOF

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,11 @@
echo '### Test if we can deal with output > 4 GB' echo '### Test of --retries on unreachable host'
### Test if we can deal with output > 4 GB ### Test of --retries on unreachable host
## echo | niceload --io 10 parallel -q perl -e '"\$a=\"x\"x1000000;for(0..4300){print \$a}"' | md5sum seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo
echo | parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | nice md5sum parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1.
46a318993dfc8e2afd71ff2bc6f605f1 - echo 1
1
echo 2
2
echo '**' echo '**'
** **
echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error" echo "### Test Force outside the file handle limit, 2009-02-17 Gave fork error"
@ -15,13 +18,17 @@ Start
end end
echo '**' echo '**'
** **
echo '### Test of --retries on unreachable host' echo '### Test if we can deal with output > 4 GB'
### Test of --retries on unreachable host ### Test if we can deal with output > 4 GB
seq 2 | stdout parallel -k --retries 2 -v -S 4.3.2.1,: echo echo | nice parallel --tmpdir $TMP5G -q perl -e '$a="x"x1000000;for(0..4300){print $a}' | nice md5sum
parallel: Warning: Could not figure out number of cpus on 4.3.2.1 (). Using 1. 46a318993dfc8e2afd71ff2bc6f605f1 -
echo 1 echo '**'
1 **
echo 2 echo 'bug #41613: --compress --line-buffer no --tagstring'; diff <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress pv -qL 1000000 | perl -pe 's/(....).*/$1/') <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --line-buffer pv -qL 1000000 | perl -pe 's/(....).*/$1/') >/dev/null || (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
2 bug #41613: --compress --line-buffer no --tagstring
Good: --line-buffer matters
echo 'bug #41613: --compress --line-buffer with --tagstring'; diff <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} pv -qL 1000000 | perl -pe 's/(....).*/$1/') <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| nice parallel -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} --line-buffer pv -qL 1000000 | perl -pe 's/(....).*/$1/') >/dev/null || (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
bug #41613: --compress --line-buffer with --tagstring
Good: --line-buffer matters
echo '**' echo '**'
** **

View file

@ -848,3 +848,33 @@ echo '### bug #47750: -k --line-buffer should give current job up to now'
stdout top stdout top
stderr in the middle stderr in the middle
stdout end stdout end
echo '**'
**
echo "### Test memory consumption stays (almost) the same for 30 and 300 jobs"
### Test memory consumption stays (almost) the same for 30 and 300 jobs
echo "should give 1 == true"
should give 1 == true
mem30=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x60000;for(1..30){print $a,"\n"}') ); mem300=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x60000;for(1..300){print $a,"\n"}') ); echo "Memory use should not depend very much on the total number of jobs run\n"; echo "Test if memory consumption(300 jobs) < memory consumption(30 jobs) * 110% "; echo $(($mem300*100 < $mem30 * 110))
Memory use should not depend very much on the total number of jobs run\n
Test if memory consumption(300 jobs) < memory consumption(30 jobs) * 110%
1
echo '**'
**
echo "### Test max line length -m -I"
### Test max line length -m -I
seq 1 60000 | parallel -I :: -m -j1 echo a::b::c | sort >/tmp/114-a$$; md5sum </tmp/114-a$$; export CHAR=$(cat /tmp/114-a$$ | wc -c); export LINES=$(cat /tmp/114-a$$ | wc -l); echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc); rm /tmp/114-a$$
14bacad229d8b0d32be0a2339c2a6af7 -
Chars per line (697810/11): 63437
echo "### Test max line length -X -I"
### Test max line length -X -I
seq 1 60000 | parallel -I :: -X -j1 echo a::b::c | sort >/tmp/114-b$$; md5sum </tmp/114-b$$; export CHAR=$(cat /tmp/114-b$$ | wc -c); export LINES=$(cat /tmp/114-b$$ | wc -l); echo "Chars per line ($CHAR/$LINES): "$(echo "$CHAR/$LINES" | bc); rm /tmp/114-b$$
81c0a85162c989c07f666b827a30ce52 -
Chars per line (817788/13): 62906
echo '**'
**
echo "### bug #41609: --compress fails"
### bug #41609: --compress fails
seq 12 | parallel --compress --compress-program bzip2 -k seq {} 1000000 | md5sum
24812dd0f24a26d08a780f988b9d5ad2 -
seq 12 | parallel --compress -k seq {} 1000000 | md5sum
24812dd0f24a26d08a780f988b9d5ad2 -

View file

@ -1,3 +1,16 @@
echo "### BUG: The length for -X is not close to max (131072)"; seq 1 60000 | parallel -X echo {.} aa {}{.} {}{}d{} {}dd{}d{.} |head -n 1 |wc
### BUG: The length for -X is not close to max (131072)
1 6861 65500
seq 1 60000 | parallel -X echo a{}b{}c |head -n 1 |wc
1 5644 65514
seq 1 60000 | parallel -X echo |head -n 1 |wc
1 12771 65520
seq 1 60000 | parallel -X echo a{}b{}c {} |head -n 1 |wc
1 8098 65512
seq 1 60000 | parallel -X echo {}aa{} |head -n 1 |wc
1 6157 65513
seq 1 60000 | parallel -X echo {} aa {} |head -n 1 |wc
1 13547 65519
echo '### Test --fifo under csh' echo '### Test --fifo under csh'
### Test --fifo under csh ### Test --fifo under csh
csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'"; echo exit $? csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'"; echo exit $?
@ -46,3 +59,262 @@ echo '### Test --fifo under csh'
868832 868832
1 1
exit 22 exit 22
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 '**'
**
echo "### Test -I"; seq 1 10 | parallel -k 'seq 1 {} | parallel -k -I :: echo {} ::'
### Test -I
1 1
2 1
2 2
3 1
3 2
3 3
4 1
4 2
4 3
4 4
5 1
5 2
5 3
5 4
5 5
6 1
6 2
6 3
6 4
6 5
6 6
7 1
7 2
7 3
7 4
7 5
7 6
7 7
8 1
8 2
8 3
8 4
8 5
8 6
8 7
8 8
9 1
9 2
9 3
9 4
9 5
9 6
9 7
9 8
9 9
10 1
10 2
10 3
10 4
10 5
10 6
10 7
10 8
10 9
10 10
echo "### Test -X -I"; seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -X -k -I :: echo a{} b::'
### Test -X -I
a1 b1
a2 b1 b2
a3 b1 b2 b3
a4 b1 b2 b3 b4
a5 b1 b2 b3 b4 b5
a6 b1 b2 b3 b4 b5 b6
a7 b1 b2 b3 b4 b5 b6 b7
a8 b1 b2 b3 b4 b5 b6 b7 b8
a9 b1 b2 b3 b4 b5 b6 b7 b8 b9
a10 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
echo "### Test -m -I"; seq 1 10 | parallel -k 'seq 1 {} | parallel -j1 -m -k -I :: echo a{} b::'
### Test -m -I
a1 b1
a2 b1 2
a3 b1 2 3
a4 b1 2 3 4
a5 b1 2 3 4 5
a6 b1 2 3 4 5 6
a7 b1 2 3 4 5 6 7
a8 b1 2 3 4 5 6 7 8
a9 b1 2 3 4 5 6 7 8 9
a10 b1 2 3 4 5 6 7 8 9 10

View file

@ -1,3 +1,9 @@
echo '### Test --load remote'
### Test --load remote
ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -N0 burnP6' & sleep 1; stdout /usr/bin/time -f %e parallel -S parallel@lo --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
OK
echo '**'
**
echo '### Stop if all hosts are filtered and there are no hosts left to run on' echo '### Stop if all hosts are filtered and there are no hosts left to run on'
### Stop if all hosts are filtered and there are no hosts left to run on ### Stop if all hosts are filtered and there are no hosts left to run on
stdout parallel --filter-hosts -S no-such.host echo ::: 1 stdout parallel --filter-hosts -S no-such.host echo ::: 1
@ -183,6 +189,13 @@ ls: cannot access bug46519.bb: No such file or directory
ls: cannot access bug46519.bbb: No such file or directory ls: cannot access bug46519.bbb: No such file or directory
ls: cannot access bug46519.cc: No such file or directory ls: cannot access bug46519.cc: No such file or directory
ls: cannot access bug46519.ccc: No such file or directory ls: cannot access bug46519.ccc: No such file or directory
echo '### Test --nice remote'
### Test --nice remote
stdout parallel --nice 1 -S lo -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z/\\+=0-9]{500,}:base64:i;'
ssh lo -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; base64;
a b
echo '**'
**
echo TODO echo TODO
TODO TODO
## echo '### Test --trc --basefile --/./--foo7 :/./:foo8 " "/./" "foo9 ./foo11/./foo11' ## echo '### Test --trc --basefile --/./--foo7 :/./:foo8 " "/./" "foo9 ./foo11/./foo11'

View file

@ -44,24 +44,24 @@ echo '### bug #42999: --pipepart with remote does not work'
11 11 33 11 11 33
11 11 33 11 11 33
9 9 28 9 9 28
14 14 33 /tmp/parallel-local-ssh2/parXXXXX 14 14 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
9 9 28 /tmp/parallel-local-ssh2/parXXXXX 9 9 28 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
14 14 33 /tmp/parallel-local-ssh2/parXXXXX 14 14 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local-ssh2/parXXXXX 11 11 33 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
9 9 28 /tmp/parallel-local-ssh2/parXXXXX 9 9 28 /tmp/parallel-local-ssh2-tmpdir/parXXXXX
echo '### --cat gives incorrect exit value in csh' echo '### --cat gives incorrect exit value in csh'
### --cat gives incorrect exit value in csh ### --cat gives incorrect exit value in csh
echo false | parallel --pipe --cat -Scsh@lo 'cat {}; false' ; echo $?; echo false | parallel --pipe --cat -Stcsh@lo 'cat {}; false' ; echo $?; echo true | parallel --pipe --cat -Scsh@lo 'cat {}; true' ; echo $?; echo true | parallel --pipe --cat -Stcsh@lo 'cat {}; true' ; echo $?; echo '### --cat and --fifo exit value in bash' echo false | parallel --pipe --cat -Scsh@lo 'cat {}; false' ; echo $?; echo false | parallel --pipe --cat -Stcsh@lo 'cat {}; false' ; echo $?; echo true | parallel --pipe --cat -Scsh@lo 'cat {}; true' ; echo $?; echo true | parallel --pipe --cat -Stcsh@lo 'cat {}; true' ; echo $?; echo '### --cat and --fifo exit value in bash'

View file

@ -97,13 +97,13 @@ echo '### Test weird regexp chars'
a1b1^c1[.}c a2b2^c2[.}c a3b3^c3[.}c a4b4^c4[.}c a5b5^c5[.}c a6b6^c6[.}c a1b1^c1[.}c a2b2^c2[.}c a3b3^c3[.}c a4b4^c4[.}c a5b5^c5[.}c a6b6^c6[.}c
echo '### Test -m' echo '### Test -m'
### Test -m ### Test -m
(echo foo;echo bar;echo joe.gif) | parallel -j1 -km echo 1{}2{.}3 A{.}B{.}C (echo foo;echo bar;echo joe.gif) | parallel -j1 -km echo 1{}2{.}3 A{.}B{.}C
1foo bar joe.gif2foo bar joe3 Afoo bar joeBfoo bar joeC 1foo bar joe.gif2foo bar joe3 Afoo bar joeBfoo bar joeC
(echo foo;echo bar;echo joe.gif) | parallel -j1 -kX echo 1{}2{.}3 A{.}B{.}C (echo foo;echo bar;echo joe.gif) | parallel -j1 -kX echo 1{}2{.}3 A{.}B{.}C
1foo2foo3 1bar2bar3 1joe.gif2joe3 AfooBfooC AbarBbarC AjoeBjoeC 1foo2foo3 1bar2bar3 1joe.gif2joe3 AfooBfooC AbarBbarC AjoeBjoeC
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -km echo a{}b{.}c{.} seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -km echo a{}b{.}c{.}
a1.gif 2.gif 3.gif 4.gif 5.gif 6.gifb1 2 3 4 5 6c1 2 3 4 5 6 a1.gif 2.gif 3.gif 4.gif 5.gif 6.gifb1 2 3 4 5 6c1 2 3 4 5 6
seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -kX echo a{}b{.}c{.} seq 1 6 | parallel -k printf '{}.gif\\n' | parallel -j1 -kX echo a{}b{.}c{.}
a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6 a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
echo '### Test -m with 60000 args'; seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -km echo a{}b{.}c{.} | tee >(wc; sleep 1) >(md5sum; sleep 1) >/dev/null; wait; sleep 1 echo '### Test -m with 60000 args'; seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -km echo a{}b{.}c{.} | tee >(wc; sleep 1) >(md5sum; sleep 1) >/dev/null; wait; sleep 1
### Test -m with 60000 args ### Test -m with 60000 args
@ -115,51 +115,51 @@ echo '### Test -X with 60000 args'; seq 1 60000 | perl -pe 's/$/.gif/' | par
21 60000 1346682 21 60000 1346682
echo '### Test -X with 60000 args and 5 expansions' echo '### Test -X with 60000 args and 5 expansions'
### Test -X with 60000 args and 5 expansions ### Test -X with 60000 args and 5 expansions
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.}{} | wc -l
34 34
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.}{.} | wc -l
25 25
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | wc -l
21 21
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c | wc -l
17 17
seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b | wc -l seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b | wc -l
11 11
echo '### Test {.} does not repeat more than {}' echo '### Test {.} does not repeat more than {}'
### Test {.} does not repeat more than {} ### Test {.} does not repeat more than {}
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6 a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
a7.gifb7c7 a8.gifb8c8 a9.gifb9c9 a10.gifb10c10 a11.gifb11c11 a12.gifb12c12 a7.gifb7c7 a8.gifb8c8 a9.gifb9c9 a10.gifb10c10 a11.gifb11c11 a12.gifb12c12
a13.gifb13c13 a14.gifb14c14 a15.gifb15c15 a13.gifb13c13 a14.gifb14c14 a15.gifb15c15
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.}
a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7 a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7
a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13 a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13
a14.gif 15.gifb14 15c14 15 a14.gif 15.gifb14 15c14 15
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -kX echo a{}b{.}c{.}
a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6 a1.gifb1c1 a2.gifb2c2 a3.gifb3c3 a4.gifb4c4 a5.gifb5c5 a6.gifb6c6
a7.gifb7c7 a8.gifb8c8 a9.gifb9c9 a10.gifb10c10 a11.gifb11c11 a12.gifb12c12 a7.gifb7c7 a8.gifb8c8 a9.gifb9c9 a10.gifb10c10 a11.gifb11c11 a12.gifb12c12
a13.gifb13c13 a14.gifb14c14 a15.gifb15c15 a13.gifb13c13 a14.gifb14c14 a15.gifb15c15
seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.} seq 1 15 | perl -pe 's/$/.gif/' | parallel -j1 -s 80 -km echo a{}b{.}c{.}
a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7 a1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gifb1 2 3 4 5 6 7c1 2 3 4 5 6 7
a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13 a8.gif 9.gif 10.gif 11.gif 12.gif 13.gifb8 9 10 11 12 13c8 9 10 11 12 13
a14.gif 15.gifb14 15c14 15 a14.gif 15.gifb14 15c14 15
echo '### Test -I with shell meta chars' echo '### Test -I with shell meta chars'
### Test -I with shell meta chars ### Test -I with shell meta chars
seq 1 60000 | parallel -j1 -I :: -X echo a::b::c:: | wc -l seq 1 60000 | parallel -j1 -I :: -X echo a::b::c:: | wc -l
17 17
seq 1 60000 | parallel -j1 -I '<>' -X echo 'a<>b<>c<>' | wc -l seq 1 60000 | parallel -j1 -I '<>' -X echo 'a<>b<>c<>' | wc -l
17 17
seq 1 60000 | parallel -j1 -I '<' -X echo 'a<b<c<' | wc -l seq 1 60000 | parallel -j1 -I '<' -X echo 'a<b<c<' | wc -l
17 17
seq 1 60000 | parallel -j1 -I '>' -X echo 'a>b>c>' | wc -l seq 1 60000 | parallel -j1 -I '>' -X echo 'a>b>c>' | wc -l
17 17
echo '### Test {.}' echo '### Test {.}'
### Test {.} ### Test {.}
echo a | parallel -qX echo "'"{.}"' " echo a | parallel -qX echo "'"{.}"' "
'a' 'a'
echo a | parallel -qX echo "'{.}'" echo a | parallel -qX echo "'{.}'"
'a' 'a'
(echo "sleep 3; echo begin"; seq 1 30 | parallel -kq echo "sleep 1; echo {.}"; echo "echo end") | parallel -k -j0 (echo "sleep 3; echo begin"; seq 1 30 | parallel -kq echo "sleep 1; echo {.}"; echo "echo end") | parallel -k -j0
begin begin
1 1
2 2
@ -194,7 +194,7 @@ begin
end end
echo '### Test -I with -X and -m' echo '### Test -I with -X and -m'
### Test -I with -X and -m ### Test -I with -X and -m
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -k -I :: echo {.} ::' seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -k -I :: echo {.} ::'
1 1 1 1
2 1 2 1
2 2 2 2
@ -250,7 +250,7 @@ seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -k -I :: echo {.} ::'
10 8 10 8
10 9 10 9
10 10 10 10
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -X -k -I :: echo a{.} b::' seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -X -k -I :: echo a{.} b::'
a1 b1 a1 b1
a2 b1 b2 a2 b1 b2
a3 b1 b2 b3 a3 b1 b2 b3
@ -261,7 +261,7 @@ a7 b1 b2 b3 b4 b5 b6 b7
a8 b1 b2 b3 b4 b5 b6 b7 b8 a8 b1 b2 b3 b4 b5 b6 b7 b8
a9 b1 b2 b3 b4 b5 b6 b7 b8 b9 a9 b1 b2 b3 b4 b5 b6 b7 b8 b9
a10 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 a10 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10
seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -m -k -I :: echo a{.} b::' seq 1 10 | parallel -k 'seq 1 {.} | 'parallel' -j1 -m -k -I :: echo a{.} b::'
a1 b1 a1 b1
a2 b1 2 a2 b1 2
a3 b1 2 3 a3 b1 2 3
@ -274,21 +274,21 @@ a9 b1 2 3 4 5 6 7 8 9
a10 b1 2 3 4 5 6 7 8 9 10 a10 b1 2 3 4 5 6 7 8 9 10
echo '### Test -i' echo '### Test -i'
### Test -i ### Test -i
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{.}ce (echo a; echo END; echo b) | parallel -k -i -eEND echo repl{.}ce
replace replace
echo '### Test --replace' echo '### Test --replace'
### Test --replace ### Test --replace
(echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{.}ce (echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{.}ce
replace replace
echo '### Test -t' echo '### Test -t'
### Test -t ### Test -t
(echo b; echo c; echo f) | parallel -k -t echo {.}ar 2>&1 >/dev/null (echo b; echo c; echo f) | parallel -k -t echo {.}ar 2>&1 >/dev/null
echo bar echo bar
echo car echo car
echo far echo far
echo '### Test --verbose' echo '### Test --verbose'
### Test --verbose ### Test --verbose
(echo b; echo c; echo f) | parallel -k --verbose echo {.}ar 2>&1 >/dev/null (echo b; echo c; echo f) | parallel -k --verbose echo {.}ar 2>&1 >/dev/null
echo bar echo bar
echo car echo car
echo far echo far

View file

@ -46,24 +46,24 @@ 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'
### 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\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
14 14 33 /tmp/parallel-local22/parXXXXX 14 14 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
9 9 28 /tmp/parallel-local22/parXXXXX 9 9 28 /tmp/parallel-local22-tmpdir/parXXXXX
14 14 33 /tmp/parallel-local22/parXXXXX 14 14 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
11 11 33 /tmp/parallel-local22/parXXXXX 11 11 33 /tmp/parallel-local22-tmpdir/parXXXXX
9 9 28 /tmp/parallel-local22/parXXXXX 9 9 28 /tmp/parallel-local22-tmpdir/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
@ -355,4 +355,4 @@ Send Receive Exitval
echo '### --tmux test - check termination' echo '### --tmux test - check termination'
### --tmux test - check termination ### --tmux test - check termination
perl -e 'map {printf "$_%o%c\n",$_,$_}1..255' | stdout parallel --tmux echo {} :::: - ::: a b | perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;' perl -e 'map {printf "$_%o%c\n",$_,$_}1..255' | stdout parallel --tmux echo {} :::: - ::: a b | perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;'
See output with: tmux -S /tmp/parallel-local22/tmsXXXXX attach See output with: tmux -S /tmp/parallel-local22-tmpdir/tmsXXXXX attach

View file

@ -1,34 +1,34 @@
echo '### tmux1.9' echo '### tmux1.9'
### tmux1.9 ### tmux1.9
seq 000 100 | TMUX=tmux1.9 par_tmux seq 000 100 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 100 200 | TMUX=tmux1.9 par_tmux seq 100 200 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 200 300 | TMUX=tmux1.9 par_tmux seq 200 300 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 300 400 | TMUX=tmux1.9 par_tmux seq 300 400 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 400 500 | TMUX=tmux1.9 par_tmux seq 400 500 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 500 600 | TMUX=tmux1.9 par_tmux seq 500 600 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 600 700 | TMUX=tmux1.9 par_tmux seq 600 700 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 700 800 | TMUX=tmux1.9 par_tmux seq 700 800 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 800 900 | TMUX=tmux1.9 par_tmux seq 800 900 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 900 1000 | TMUX=tmux1.9 par_tmux seq 900 1000 | TMUX=tmux1.9 par_tmux
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 1000 1100 | TMUX=tmux1.9 par_tmux seq 1000 1100 | TMUX=tmux1.9 par_tmux
parallel: Error: Command line too long (2023 >= 2023) at input 0: 1007 parallel: Error: Command line too long (2023 >= 2023) at input 0: 1007
@ -80,13 +80,13 @@ parallel: Error: Command line too long (4053 >= 2023) at input 0: 2022
echo '### tmux1.8' echo '### tmux1.8'
### tmux1.8 ### tmux1.8
seq 1 50 | TMUX=tmux1.8 par_tmux seq 1 50 | TMUX=tmux1.8 par_tmux
See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 51 100 | TMUX=tmux1.8 par_tmux seq 51 100 | TMUX=tmux1.8 par_tmux
See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
0 0
seq 101 150 | TMUX=tmux1.8 par_tmux seq 101 150 | TMUX=tmux1.8 par_tmux
See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
parallel: Error: Command line too long (236 >= 236) at input 0: 114 parallel: Error: Command line too long (236 >= 236) at input 0: 114
255 255
seq 151 200 | TMUX=tmux1.8 par_tmux seq 151 200 | TMUX=tmux1.8 par_tmux
@ -115,27 +115,27 @@ parallel: Error: Command line too long (480 >= 236) at input 0: 236
echo '### tmux1.8 0..255 ascii' echo '### tmux1.8 0..255 ascii'
### tmux1.8 0..255 ascii ### tmux1.8 0..255 ascii
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.8 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $? perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.8 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $?
See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
parallel: Error: Command line too long (236 >= 236) at input 0: 155  !"#$%&'()*+,-./0... parallel: Error: Command line too long (236 >= 236) at input 0: 155  !"#$%&'()*+,-./0...
0 0
echo '### tmux1.9 0..255 ascii' echo '### tmux1.9 0..255 ascii'
### tmux1.9 0..255 ascii ### tmux1.9 0..255 ascii
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.9 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $? perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | TMUX=tmux1.9 stdout parallel --tmux --timeout 3 echo | par_tmux_filter; echo $?
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/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/tmsXXXXX attach See output with: tmux -S /tmp/parallel-local7-tmpdir/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 70 130 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter seq 70 130 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.8 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
parallel: Error: Command line too long (236 >= 236) at input 0: 114 parallel: Error: Command line too long (236 >= 236) at input 0: 114
seq 70 130 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter seq 70 130 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach
seq 280 425 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter seq 280 425 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
parallel: Error: Command line too long (288 >= 236) at input 0: 280 parallel: Error: Command line too long (288 >= 236) at input 0: 280
seq 280 425 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter seq 280 425 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach See output with: tmux1.9 -S /tmp/parallel-local7-tmpdir/tmsXXXXX attach

View file

@ -1,11 +1,3 @@
echo 'bug #41613: --compress --line-buffer no --tagstring';
bug #41613: --compress --line-buffer no --tagstring
diff <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| $NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress pv -qL 1000000 | perl -pe 's/(....).*/$1/') <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| $NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress --line-buffer pv -qL 1000000 | perl -pe 's/(....).*/$1/') >/dev/null || (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
Good: --line-buffer matters
echo 'bug #41613: --compress --line-buffer with --tagstring';
bug #41613: --compress --line-buffer with --tagstring
diff <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| $NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} pv -qL 1000000 | perl -pe 's/(....).*/$1/') <(nice perl -e 'for("x011".."x110"){print "$_\t", ("\n", map { rand } (1..100000)) }'| $NICEPAR -N10 -L1 --pipe -j6 --block 20M --compress --tagstring {#} --line-buffer pv -qL 1000000 | perl -pe 's/(....).*/$1/') >/dev/null || (echo 'Good: --line-buffer matters'; false) && echo 'Bad: --line-buffer not working'
Good: --line-buffer matters
echo 'bug #41412: --timeout + --delay causes deadlock'; echo 'bug #41412: --timeout + --delay causes deadlock';
bug #41412: --timeout + --delay causes deadlock bug #41412: --timeout + --delay causes deadlock
seq 10 | parallel -j10 --timeout 1 --delay .3 echo; seq 10 | parallel -j10 --timeout 1 --delay .3 echo;
@ -407,7 +399,7 @@ seq 1 4000 | nice parallel -k -X echo {.} aa {}{.} {}{}d{} {}dd{}d{.} |head -n 1
echo "### BUG: empty lines with --show-limit" echo "### BUG: empty lines with --show-limit"
### BUG: empty lines with --show-limit ### BUG: empty lines with --show-limit
echo | $NICEPAR --show-limits echo | $NICEPAR --show-limits
Maximal size of command: 131048 Maximal size of command: 131049
Maximal used size of command: 65528 Maximal used size of command: 65528
Execution of will continue now, and it will try to read its input Execution of will continue now, and it will try to read its input

View file

@ -140,7 +140,7 @@ dragonfly.polarhome.com
freebsd.polarhome.com freebsd.polarhome.com
hpux-ia64 hpux-ia64
hpux64 hpux64
macosx macosx.polarhome.com
mandriva.polarhome.com mandriva.polarhome.com
miros.polarhome.com miros.polarhome.com
netbsd.polarhome.com netbsd.polarhome.com

View file

@ -124,8 +124,8 @@ C
A A
B B
(echo 1; echo; echo 2) | parallel --no-run-if-empty echo (echo 1; echo; echo 2) | parallel --no-run-if-empty echo
1 9
2 9
parallel ::: ls 'echo foo' pwd parallel ::: ls 'echo foo' pwd
abc-file abc-file
abc0-file abc0-file
@ -160,13 +160,13 @@ A
parallel echo {/.} ::: A/B.C parallel echo {/.} ::: A/B.C
B B
parallel echo {#} ::: A B C parallel echo {#} ::: A B C
1 9
2 9
3 9
parallel -j 2 echo {%} ::: A B C parallel -j 2 echo {%} ::: A B C
1 9
2 9
1 9
parallel -I ,, echo ,, ::: A/B.C parallel -I ,, echo ,, ::: A/B.C
A/B.C A/B.C
parallel --extensionreplace ,, echo ,, ::: A/B.C parallel --extensionreplace ,, echo ,, ::: A/B.C
@ -178,13 +178,13 @@ A
parallel --basenameextensionreplace ,, echo ,, ::: A/B.C parallel --basenameextensionreplace ,, echo ,, ::: A/B.C
B B
parallel --seqreplace ,, echo ,, ::: A B C parallel --seqreplace ,, echo ,, ::: A B C
1 9
2 9
3 9
parallel -j2 --slotreplace ,, echo ,, ::: A B C parallel -j2 --slotreplace ,, echo ,, ::: A B C
1 9
2 9
1 9
parallel echo '{= s:\.[^.]+$::;s:\.[^.]+$::; =}' ::: foo.tar.gz parallel echo '{= s:\.[^.]+$::;s:\.[^.]+$::; =}' ::: foo.tar.gz
foo foo
parallel echo Job {#} of {= '$_=total_jobs()' =} ::: {1..5} parallel echo Job {#} of {= '$_=total_jobs()' =} ::: {1..5}
@ -196,10 +196,10 @@ Job 5 of 5
parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$' parallel echo {} shell quoted is {= '$_=Q($_)' =} ::: '*/!#$'
*/!#$ shell quoted is \*/\!\#\$ */!#$ shell quoted is \*/\!\#\$
parallel echo {= 'if($_==3) { $job->skip() }' =} ::: {1..5} parallel echo {= 'if($_==3) { $job->skip() }' =} ::: {1..5}
1 9
2 9
4 9
5 9
parallel echo {= 'if($arg[1]==$arg[2]) { $job->skip() }' =} ::: {1..3} ::: {1..3} parallel echo {= 'if($arg[1]==$arg[2]) { $job->skip() }' =} ::: {1..3} ::: {1..3}
1 2 1 2
1 3 1 3
@ -283,16 +283,16 @@ Job 3 of 5
Job 4 of 5 Job 4 of 5
Job 5 of 5 Job 5 of 5
cat num30000 | parallel --xargs echo | wc -l cat num30000 | parallel --xargs echo | wc -l
3 9
cat num30000 | parallel --xargs -s 10000 echo | wc -l cat num30000 | parallel --xargs -s 10000 echo | wc -l
17 99
cat num30000 | parallel --jobs 4 -m echo | wc -l cat num30000 | parallel --jobs 4 -m echo | wc -l
6 9
parallel --jobs 4 -m echo ::: 1 2 3 4 5 6 7 8 9 10 parallel --jobs 4 -m echo ::: 1 2 3 4 5 6 7 8 9 10
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9
10 99
parallel --jobs 4 -X echo pre-{}-post ::: A B C D E F G parallel --jobs 4 -X echo pre-{}-post ::: A B C D E F G
pre-A-post pre-B-post pre-A-post pre-B-post
pre-C-post pre-D-post pre-C-post pre-D-post
@ -348,8 +348,6 @@ echo B
echo C echo C
parallel -j2 'printf "%s-start\n%s" {} {};sleep {};printf "%s\n" -middle;echo {}-end' ::: 4 2 1 parallel -j2 'printf "%s-start\n%s" {} {};sleep {};printf "%s\n" -middle;echo {}-end' ::: 4 2 1
4-start 4-start
4-middle
4-end
2-start 2-start
2-middle 2-middle
2-end 2-end
@ -365,7 +363,6 @@ echo C
1-middle 1-middle
1-end 1-end
-middle -middle
4-end
parallel -j2 --linebuffer 'printf "%s-start\n%s" {} {};sleep {};printf "%s\n" -middle;echo {}-end' ::: 4 2 1 parallel -j2 --linebuffer 'printf "%s-start\n%s" {} {};sleep {};printf "%s\n" -middle;echo {}-end' ::: 4 2 1
4-start 4-start
2-start 2-start
@ -374,12 +371,8 @@ echo C
1-start 1-start
1-middle 1-middle
1-end 1-end
4-middle
4-end
parallel -j2 -k 'printf "%s-start\n%s" {} {};sleep {};printf "%s\n" -middle;echo {}-end' ::: 4 2 1 parallel -j2 -k 'printf "%s-start\n%s" {} {};sleep {};printf "%s\n" -middle;echo {}-end' ::: 4 2 1
4-start 4-start
4-middle
4-end
2-start 2-start
2-middle 2-middle
2-end 2-end
@ -387,9 +380,9 @@ 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/parXXXXX.par /tmp/parallel-tutorial-tmpdir/parXXXXX.par
/tmp/parallel-tutorial/parXXXXX.par /tmp/parallel-tutorial-tmpdir/parXXXXX.par
/tmp/parallel-tutorial/parXXXXX.par /tmp/parallel-tutorial-tmpdir/parXXXXX.par
parallel --tmpdir /var/tmp --files echo ::: A B C parallel --tmpdir /var/tmp --files echo ::: A B C
/var/tmp/parXXXXX.par /var/tmp/parXXXXX.par
/var/tmp/parXXXXX.par /var/tmp/parXXXXX.par
@ -446,19 +439,19 @@ B D
/bin/bash: line 10: outdir/f1/B/f2/D/stderr: No such file or directory /bin/bash: line 10: outdir/f1/B/f2/D/stderr: No such file or directory
/bin/bash: line 11: outdir/f1/B/f2/D/stdout: No such file or directory /bin/bash: line 11: outdir/f1/B/f2/D/stdout: No such file or directory
/usr/bin/time -f %e parallel -N0 -j64 sleep 1 :::: num128 /usr/bin/time -f %e parallel -N0 -j64 sleep 1 :::: num128
2 9
/usr/bin/time -f %e parallel -N0 sleep 1 :::: num128 /usr/bin/time -f %e parallel -N0 sleep 1 :::: num128
16 99
/usr/bin/time -f %e parallel -N0 --jobs 200% sleep 1 :::: num128 /usr/bin/time -f %e parallel -N0 --jobs 200% sleep 1 :::: num128
8 9
/usr/bin/time -f %e parallel -N0 --jobs 0 sleep 1 :::: num128 /usr/bin/time -f %e parallel -N0 --jobs 0 sleep 1 :::: num128
1 9
echo 50% > my_jobs echo 50% > my_jobs
/usr/bin/time -f %e parallel -N0 --jobs my_jobs sleep 1 :::: num128 & /usr/bin/time -f %e parallel -N0 --jobs my_jobs sleep 1 :::: num128 &
sleep 1 sleep 1
echo 0 > my_jobs echo 0 > my_jobs
wait wait
3 9
parallel --use-cpus-instead-of-cores -N0 sleep 1 :::: num8 parallel --use-cpus-instead-of-cores -N0 sleep 1 :::: num8
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
@ -490,7 +483,7 @@ B D
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/tmsXXXXX attach See output with: tmux -S /tmp/parallel-tutorial-tmpdir/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
@ -501,13 +494,13 @@ DATE OUTPUT
Starting 3 Starting 3
DATE OUTPUT DATE OUTPUT
parallel --timeout 4.1 sleep {}\; echo {} ::: 2 4 6 8 parallel --timeout 4.1 sleep {}\; echo {} ::: 2 4 6 8
2 9
4 9
parallel --timeout 200% sleep {}\; echo {} ::: 2.1 2.2 3 7 2.3 parallel --timeout 200% sleep {}\; echo {} ::: 2.1 2.2 3 7 2.3
2 9
2 9
3 9
2 9
parallel --eta sleep ::: 1 3 2 2 1 3 3 2 1 parallel --eta sleep ::: 1 3 2 2 1 3 3 2 1
Computers / CPU cores / Max jobs to run Computers / CPU cores / Max jobs to run
@ -570,26 +563,26 @@ Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
1 : TIMESTAMP 9.999 0 0 1 0 exit 1 1 : TIMESTAMP 9.999 0 0 1 0 exit 1
2 : TIMESTAMP 9.999 0 0 2 0 exit 2 2 : TIMESTAMP 9.999 0 0 2 0 exit 2
3 : TIMESTAMP 9.999 0 0 3 0 exit 3 3 : TIMESTAMP 9.999 0 0 3 0 exit 3
0 9
0 9
1 9
2 9
parallel: This job failed: parallel: This job failed:
echo X; exit X echo X; exit X
parallel: Starting no more jobs. Waiting for 1 jobs to finish. parallel: Starting no more jobs. Waiting for 1 jobs to finish.
parallel: This job failed: parallel: This job failed:
echo X; exit X echo X; exit X
parallel -j2 --halt now,fail=1 echo {}\; exit {} ::: 0 0 1 2 3 parallel -j2 --halt now,fail=1 echo {}\; exit {} ::: 0 0 1 2 3
0 9
0 9
1 9
parallel: This job failed: parallel: This job failed:
echo X; exit X echo X; exit X
parallel -j2 --halt soon,fail=20% echo {}\; exit {} ::: 0 1 2 3 4 5 6 7 8 9 parallel -j2 --halt soon,fail=20% echo {}\; exit {} ::: 0 1 2 3 4 5 6 7 8 9
0 9
1 9
2 9
3 9
parallel: This job failed: parallel: This job failed:
echo X; exit X echo X; exit X
parallel: This job failed: parallel: This job failed:
@ -598,10 +591,10 @@ parallel: Starting no more jobs. Waiting for 1 jobs to finish.
parallel: This job failed: parallel: This job failed:
echo X; exit X echo X; exit X
parallel -j2 --halt now,success=1 echo {}\; exit {} ::: 1 2 3 0 4 5 6 parallel -j2 --halt now,success=1 echo {}\; exit {} ::: 1 2 3 0 4 5 6
1 9
2 9
3 9
0 9
parallel: This job succeeded: parallel: This job succeeded:
echo X; exit X echo X; exit X
parallel -k --retries 3 'echo tried {} >>/tmp/runs; echo completed {}; exit {}' ::: 1 2 0 parallel -k --retries 3 'echo tried {} >>/tmp/runs; echo completed {}; exit {}' ::: 1 2 0
@ -686,13 +679,13 @@ foo
/home/parallel/privat/parallel/testsuite/tmp /home/parallel/privat/parallel/testsuite/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
1 9
2 9
3 9
parallel --controlmaster -S $SERVER1 echo ::: 1 2 3 parallel --controlmaster -S $SERVER1 echo ::: 1 2 3
1 9
2 9
3 9
parallel --filter-hosts -S 173.194.32.46,$SERVER1 echo ::: bar parallel --filter-hosts -S 173.194.32.46,$SERVER1 echo ::: bar
bar bar
parallel: Warning: Removed 173.194.32.46. parallel: Warning: Removed 173.194.32.46.
@ -861,51 +854,51 @@ _
} }
export -f my_func3 export -f my_func3
parallel -vv --workdir ... --nice 17 --env _ --trc {}.out -S $SERVER1 my_func3 {} ::: abc-file parallel -vv --workdir ... --nice 17 --env _ --trc {}.out -S $SERVER1 my_func3 {} ::: abc-file
( ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR;rsync --protocol 30 -rlDzR -essh\ -l\ parallel ./abc-file lo:./.TMPWORKDIR );ssh -l parallel lo -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; BASE64 BASE64;_EXIT_status=$?; mkdir -p ./.; rsync --protocol 30 --rsync-path=cd\ ./.TMPWORKDIR/./.\;\ rsync -rlDzR -essh\ -l\ parallel lo:./abc-file.out ./.;ssh -l parallel lo -- \(rm\ -f\ ./.TMPWORKDIR/abc-file\;\ sh\ -c\ \'rmdir\ ./.TMPWORKDIR/\ ./.parallel/tmp/\ ./.parallel/\ 2\>/dev/null\'\;rm\ -rf\ ./.TMPWORKDIR\;\);ssh -l parallel lo -- \(rm\ -f\ ./.TMPWORKDIR/abc-file.out\;\ sh\ -c\ \'rmdir\ ./.TMPWORKDIR/\ ./.parallel/tmp/\ ./.parallel/\ 2\>/dev/null\'\;rm\ -rf\ ./.TMPWORKDIR\;\);ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status; ( ssh -l parallel lo -- mkdir -p ./.TMPWORKDIR;rsync --protocol 30 -rlDzR -essh\ -l\ parallel ./abc-file lo:./.TMPWORKDIR );ssh -l parallel lo -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; BASE64 BASE64;_EXIT_status=$?; mkdir -p ./.; rsync --protocol 30 --rsync-path=cd\ ./.TMPWORKDIR/./.\;\ rsync -rlDzR -essh\ -l\ parallel lo:./abc-file.out ./.;ssh -l parallel lo -- \(rm\ -f\ ./.TMPWORKDIR/abc-file\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;\);ssh -l parallel lo -- \(rm\ -f\ ./.TMPWORKDIR/abc-file.out\;\ sh\ -c\ rmdir\\\ ./.TMPWORKDIR/\\\ ./.parallel/tmp/\\\ ./.parallel/\\\ 2\\\>/dev/null\\\;rm\\\ -rf\\\ ./.TMPWORKDIR\\\;\);ssh -l parallel lo -- rm -rf .TMPWORKDIR; exit $_EXIT_status;
parallel --sqlandworker csv:////%2Ftmp%2Flog.csv seq ::: 10 ::: 12 13 14 parallel --sqlandworker csv:////%2Ftmp%2Flog.csv seq ::: 10 ::: 12 13 14
cat /tmp/log.csv cat /tmp/log.csv
10 99
11 99
12 99
10 99
11 99
12 99
13 99
10 99
11 99
12 99
13 99
14 99
Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,_Signal,Command,V1,V2,Stdout,Stderr Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,_Signal,Command,V1,V2,Stdout,Stderr
1,:,000000000.000,0.000,0,9,0,0,"seq 10 12",10,12,"10 1,:,000000000.000,0.000,0,9,0,0,"seq 10 12",10,12,"10
11 99
12 99
", ",
2,:,000000000.000,0.000,0,12,0,0,"seq 10 13",10,13,"10 2,:,000000000.000,0.000,0,12,0,0,"seq 10 13",10,13,"10
11 99
12 99
13 99
", ",
3,:,000000000.000,0.000,0,15,0,0,"seq 10 14",10,14,"10 3,:,000000000.000,0.000,0,15,0,0,"seq 10 14",10,14,"10
11 99
12 99
13 99
14 99
", ",
parallel --results outdir --sqlandworker csv:////%2Ftmp%2Flog2.csv seq ::: 10 ::: 12 13 14 parallel --results outdir --sqlandworker csv:////%2Ftmp%2Flog2.csv seq ::: 10 ::: 12 13 14
cat /tmp/log2.csv cat /tmp/log2.csv
10 99
11 99
12 99
10 99
11 99
12 99
13 99
10 99
11 99
12 99
13 99
14 99
Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,_Signal,Command,V1,V2,Stdout,Stderr Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,_Signal,Command,V1,V2,Stdout,Stderr
1,:,000000000.000,0.000,0,9,0,0,"seq 10 12",10,12,outdir/1/10/2/12/stdout,outdir/1/10/2/12/stderr 1,:,000000000.000,0.000,0,9,0,0,"seq 10 12",10,12,outdir/1/10/2/12/stdout,outdir/1/10/2/12/stderr
2,:,000000000.000,0.000,0,12,0,0,"seq 10 13",10,13,outdir/1/10/2/13/stdout,outdir/1/10/2/13/stderr 2,:,000000000.000,0.000,0,12,0,0,"seq 10 13",10,13,outdir/1/10/2/13/stdout,outdir/1/10/2/13/stderr
@ -1014,48 +1007,48 @@ END
JOB1 JOB1
%head1 %head1
%head2 %head2
1 9
2 9
3 9
JOB2 JOB2
%head1 %head1
%head2 %head2
4 9
5 9
6 9
JOB3 JOB3
%head1 %head1
%head2 %head2
7 9
8 9
9 9
JOB4 JOB4
%head1 %head1
%head2 %head2
10 99
cat num_%header | parallel --header 2 --pipe -N3 echo JOB{#}\;cat cat num_%header | parallel --header 2 --pipe -N3 echo JOB{#}\;cat
JOB1 JOB1
%head1 %head1
%head2 %head2
1 9
2 9
3 9
JOB2 JOB2
%head1 %head1
%head2 %head2
4 9
5 9
6 9
JOB3 JOB3
%head1 %head1
%head2 %head2
7 9
8 9
9 9
JOB4 JOB4
%head1 %head1
%head2 %head2
10 99
parallel --pipepart -a num1000000 --block 3m wc parallel --pipepart -a num1000000 --block 3m wc
444444 444444 3000003 444444 444444 3000003
428572 428572 3000004 428572 428572 3000004
@ -1306,8 +1299,8 @@ mentioned in the release notes of next version of GNU Parallel.
parallel --number-of-cpus parallel --number-of-cpus
parallel --number-of-cores parallel --number-of-cores
1 9
8 9
echo '--nice 17' > ~/.parallel/nicetimeout echo '--nice 17' > ~/.parallel/nicetimeout
echo '--timeout 300%' >> ~/.parallel/nicetimeout echo '--timeout 300%' >> ~/.parallel/nicetimeout
parallel --profile nicetimeout echo ::: A B C parallel --profile nicetimeout echo ::: A B C

View file

@ -1,6 +1,9 @@
### Test -k ### Test -k
parallel: Warning: Only enough file handles to run 9 jobs in parallel. parallel: Warning: Only enough file handles to run 9 jobs in parallel.
Running 'parallel -j0 -N9 --pipe parallel -j0' or raising ulimit -n or /etc/security/limits.conf may help. parallel: Warning: Running 'parallel -j0 -N 9 --pipe parallel -j0' or
parallel: Warning: raising ulimit -n or /etc/security/limits.conf may help.
parallel: Warning: No more file handles.
parallel: Warning: Raising ulimit -n or /etc/security/limits.conf may help.
begin begin
1 1
2 2
@ -10,7 +13,6 @@ begin
6 6
7 7
8 8
parallel: Warning: No more file handles. Raising ulimit -n or /etc/security/limits.conf may help.
9 9
10 10
11 11
@ -59,10 +61,11 @@ job2
7 7
8 8
9 9
Running 'parallel -j0 -N8 --pipe parallel -j0' or raising ulimit -n or /etc/security/limits.conf may help.
parallel: SIGTERM received. No new jobs will be started. parallel: SIGTERM received. No new jobs will be started.
parallel: Waiting for these 8 jobs to finish. Send SIGTERM again to stop now. parallel: Waiting for these 8 jobs to finish. Send SIGTERM again to stop now.
parallel: Warning: Only enough file handles to run 8 jobs in parallel. parallel: Warning: Only enough file handles to run 8 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 8 --pipe parallel -j0' or
parallel: Warning: raising ulimit -n or /etc/security/limits.conf may help.
parallel: sleep 3; echo 10 parallel: sleep 3; echo 10
parallel: sleep 3; echo 11 parallel: sleep 3; echo 11
parallel: sleep 3; echo 12 parallel: sleep 3; echo 12

View file

@ -7,10 +7,10 @@ please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool, O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47. ;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; and it won't cost you a cent. 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.
Silence the citation notice: run 'parallel --bibtex' once or use '--will-cite'. To silence the citation notice: run 'parallel --citation'.
sleep 0.1; echo opt-p 1 ?...y sleep 0.1; echo opt-p 1 ?...y
sleep 0.1; echo opt-p 2 ?...n sleep 0.1; echo opt-p 2 ?...n
@ -24,10 +24,10 @@ please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool, O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47. ;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; and it won't cost you a cent. 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.
Silence the citation notice: run 'parallel --bibtex' once or use '--will-cite'. To silence the citation notice: run 'parallel --citation'.
sleep 0.1; echo opt--interactive 1 ?...y sleep 0.1; echo opt--interactive 1 ?...y
sleep 0.1; echo opt--interactive 2 ?...n sleep 0.1; echo opt--interactive 2 ?...n
@ -41,220 +41,6 @@ echo '### Test killing children with --timeout and exit value (failed if timed o
0 0 0 0 0 0
2 2
0 0 0 0 0 0
echo '### Test -L -l and --max-lines'
### Test -L -l and --max-lines
(echo a_b;echo c) | parallel -km -L2 echo
a_b
c
(echo a_b;echo c) | parallel -k -L2 echo
a_b c
(echo a_b;echo c) | xargs -L2 echo
a_b c
echo '### xargs -L1 echo'
### xargs -L1 echo
(echo a_b;echo c) | parallel -km -L1 echo
a_b
c
(echo a_b;echo c) | parallel -k -L1 echo
a_b
c
(echo a_b;echo c) | xargs -L1 echo
a_b
c
echo 'Lines ending in space should continue on next line'
Lines ending in space should continue on next line
echo '### xargs -L1 echo'
### xargs -L1 echo
(echo a_b' ';echo c;echo d) | parallel -km -L1 echo
a_b c
d
(echo a_b' ';echo c;echo d) | parallel -k -L1 echo
a_b c
d
(echo a_b' ';echo c;echo d) | xargs -L1 echo
a_b c
d
echo '### xargs -L2 echo'
### xargs -L2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -km -L2 echo
a_b c d
e
(echo a_b' ';echo c;echo d;echo e) | parallel -k -L2 echo
a_b c d
e
(echo a_b' ';echo c;echo d;echo e) | xargs -L2 echo
a_b c d
e
echo '### xargs -l echo'
### xargs -l echo
(echo a_b' ';echo c;echo d;echo e) | parallel -l -km echo # This behaves wrong
a_b c
d
e
(echo a_b' ';echo c;echo d;echo e) | parallel -l -k echo # This behaves wrong
a_b c
d
e
(echo a_b' ';echo c;echo d;echo e) | xargs -l echo
a_b c
d
e
echo '### xargs -l2 echo'
### xargs -l2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l2 echo
a_b c d
e
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l2 echo
a_b c d
e
(echo a_b' ';echo c;echo d;echo e) | xargs -l2 echo
a_b c d
e
echo '### xargs -l1 echo'
### xargs -l1 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -km -l1 echo
a_b c
d
e
(echo a_b' ';echo c;echo d;echo e) | parallel -k -l1 echo
a_b c
d
e
(echo a_b' ';echo c;echo d;echo e) | xargs -l1 echo
a_b c
d
e
echo '### xargs --max-lines=2 echo'
### xargs --max-lines=2 echo
(echo a_b' ';echo c;echo d;echo e) | parallel -km --max-lines 2 echo
a_b c d
e
(echo a_b' ';echo c;echo d;echo e) | parallel -k --max-lines 2 echo
a_b c d
e
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines=2 echo
a_b c d
e
echo '### xargs --max-lines echo'
### xargs --max-lines echo
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -km echo # This behaves wrong
a_b c
d
e
(echo a_b' ';echo c;echo d;echo e) | parallel --max-lines -k echo # This behaves wrong
a_b c
d
e
(echo a_b' ';echo c;echo d;echo e) | xargs --max-lines echo
a_b c
d
e
echo '### test too long args'
### test too long args
perl -e 'print "z"x1000000' | parallel echo 2>&1
parallel: Error: Command line too long (1000005 >= 131071) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
perl -e 'print "z"x1000000' | xargs echo 2>&1
xargs: argument line too long
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -km -s 10 echo
1 2
3 4
5 6
7 8
9 10
parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout xargs -s 10 echo
1 2
3 4
5 6
7 8
xargs: argument line too long
9 10
(seq 1 10; perl -e 'print "z"x1000000'; seq 12 15) | stdout parallel -j1 -kX -s 10 echo
1 2
3 4
5 6
7 8
9 10
parallel: Error: Command line too long (1000007 >= 10) at input 0: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...
echo '### Test -x'
### Test -x
(seq 1 10; echo 12345; seq 12 15) | stdout parallel -j1 -km -s 10 -x echo
1 2
3 4
5 6
7 8
9 10
parallel: Error: Command line too long (10 >= 10) at input 0: 12345
(seq 1 10; echo 12345; seq 12 15) | stdout parallel -j1 -kX -s 10 -x echo
1 2
3 4
5 6
7 8
9 10
parallel: Error: Command line too long (10 >= 10) at input 0: 12345
(seq 1 10; echo 12345; seq 12 15) | stdout xargs -s 10 -x echo
1 2
3 4
5 6
xargs: argument line too long
7 8
(seq 1 10; echo 1234; seq 12 15) | stdout parallel -j1 -km -s 10 -x echo
1 2
3 4
5 6
7 8
9 10
1234
12
13
14
15
(seq 1 10; echo 1234; seq 12 15) | stdout parallel -j1 -kX -s 10 -x echo
1 2
3 4
5 6
7 8
9 10
1234
12
13
14
15
(seq 1 10; echo 1234; seq 12 15) | stdout xargs -s 10 -x echo
1 2
3 4
5 6
7 8
9 10
1234
12
13
14
15
echo '### Test -a and --arg-file: Read input from file instead of stdin'
### Test -a and --arg-file: Read input from file instead of stdin
seq 1 10 >/tmp/parallel_$$-1; parallel -k -a /tmp/parallel_$$-1 echo; rm /tmp/parallel_$$-1
1
2
3
4
5
6
7
8
9
10
seq 1 10 >/tmp/parallel_$$-2; parallel -k --arg-file /tmp/parallel_$$-2 echo; rm /tmp/parallel_$$-2
1
2
3
4
5
6
7
8
9
10
xargs Expect: 3 1 2 xargs Expect: 3 1 2
3 3
1 1
@ -267,10 +53,10 @@ please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool, O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47. ;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; and it won't cost you a cent. 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.
Silence the citation notice: run 'parallel --bibtex' once or use '--will-cite'. To silence the citation notice: run 'parallel --citation'.
3 3
1 1
@ -288,10 +74,10 @@ please cite:
O. Tange (2011): GNU Parallel - The Command-Line Power Tool, O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
;login: The USENIX Magazine, February 2011:42-47. ;login: The USENIX Magazine, February 2011:42-47.
This helps funding further development; and it won't cost you a cent. 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.
Silence the citation notice: run 'parallel --bibtex' once or use '--will-cite'. To silence the citation notice: run 'parallel --citation'.
1 1
3 3
@ -301,625 +87,3 @@ via pseudotty
gzip /tmp/parallel_f1 gzip /tmp/parallel_f1
gzip /tmp/parallel_f2' gzip /tmp/parallel_f2'
' '
echo '### Test -i and --replace: Replace with argument'
### Test -i and --replace: Replace with argument
(echo a; echo END; echo b) | parallel -k -i -eEND echo repl{}ce
replace
(echo a; echo END; echo b) | parallel -k --replace -eEND echo repl{}ce
replace
(echo a; echo END; echo b) | parallel -k -i+ -eEND echo repl+ce
replace
(echo e; echo END; echo b) | parallel -k -i'*' -eEND echo r'*'plac'*'
replace
(echo a; echo END; echo b) | parallel -k --replace + -eEND echo repl+ce
replace
(echo a; echo END; echo b) | parallel -k --replace== -eEND echo repl=ce
replace
(echo a; echo END; echo b) | parallel -k --replace = -eEND echo repl=ce
replace
(echo a; echo END; echo b) | parallel -k --replace=^ -eEND echo repl^ce
replace
(echo a; echo END; echo b) | parallel -k -I^ -eEND echo repl^ce
replace
echo '### Test -E: Artificial end-of-file'
### Test -E: Artificial end-of-file
(echo include this; echo END; echo not this) | parallel -k -E END echo
include this
(echo include this; echo END; echo not this) | parallel -k -EEND echo
include this
echo '### Test -e and --eof: Artificial end-of-file'
### Test -e and --eof: Artificial end-of-file
(echo include this; echo END; echo not this) | parallel -k -e END echo
include this
(echo include this; echo END; echo not this) | parallel -k -eEND echo
include this
(echo include this; echo END; echo not this) | parallel -k --eof=END echo
include this
(echo include this; echo END; echo not this) | parallel -k --eof END echo
include this
echo '### Test -n and --max-args: Max number of args per line (only with -X and -m)'
### Test -n and --max-args: Max number of args per line (only with -X and -m)
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -m echo
line 1
line 2
line 3
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -m echo
line 1 line 1
line 2
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 -X echo
line 1
line 2
line 3
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 -X echo
line 1 line 1
line 2
(echo line 1;echo line 2;echo line 3) | parallel -k -n1 echo
line 1
line 2
line 3
(echo line 1;echo line 1;echo line 2) | parallel -k -n2 echo
line 1 line 1
line 2
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args=1 -X echo
line 1
line 2
line 3
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 -X echo
line 1
line 2
line 3
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args=2 -X echo
line 1 line 1
line 2
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 -X echo
line 1 line 1
line 2
(echo line 1;echo line 2;echo line 3) | parallel -k --max-args 1 echo
line 1
line 2
line 3
(echo line 1;echo line 1;echo line 2) | parallel -k --max-args 2 echo
line 1 line 1
line 2
echo '### Test --max-procs and -P: Number of processes'
### Test --max-procs and -P: Number of processes
seq 1 10 | parallel -k --max-procs +0 echo max proc
max proc 1
max proc 2
max proc 3
max proc 4
max proc 5
max proc 6
max proc 7
max proc 8
max proc 9
max proc 10
seq 1 10 | parallel -k -P 200% echo 200% proc
200% proc 1
200% proc 2
200% proc 3
200% proc 4
200% proc 5
200% proc 6
200% proc 7
200% proc 8
200% proc 9
200% proc 10
echo '### Test --delimiter and -d: Delimiter instead of newline'
### Test --delimiter and -d: Delimiter instead of newline
echo '# Yes there is supposed to be an extra newline for -d N'
# Yes there is supposed to be an extra newline for -d N
echo line 1Nline 2Nline 3 | parallel -k -d N echo This is
This is line 1
This is line 2
This is line 3
echo line 1Nline 2Nline 3 | parallel -k --delimiter N echo This is
This is line 1
This is line 2
This is line 3
printf "delimiter NUL line 1\0line 2\0line 3" | parallel -k -d '\0' echo
delimiter NUL line 1
line 2
line 3
printf "delimiter TAB line 1\tline 2\tline 3" | parallel -k --delimiter '\t' echo
delimiter TAB line 1
line 2
line 3
echo '### Test --max-chars and -s: Max number of chars in a line'
### Test --max-chars and -s: Max number of chars in a line
(echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo
line 1 line 1
line 2
(echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo
line 1 line 1
line 2
echo '### Test --no-run-if-empty and -r: This should give no output'
### Test --no-run-if-empty and -r: This should give no output
echo " " | parallel -r echo
echo " " | parallel --no-run-if-empty echo
echo '### Test --help and -h: Help output (just check we get the same amount of lines)'
### Test --help and -h: Help output (just check we get the same amount of lines)
echo Output from -h and --help
Output from -h and --help
parallel -h | wc -l
37
parallel --help | wc -l
37
echo '### Test --version: Version output (just check we get the same amount of lines)'
### Test --version: Version output (just check we get the same amount of lines)
parallel --version | wc -l
11
echo '### Test --verbose and -t'
### Test --verbose and -t
(echo b; echo c; echo f) | parallel -k -t echo {}ar 2>&1 >/dev/null
echo bar
echo car
echo far
(echo b; echo c; echo f) | parallel -k --verbose echo {}ar 2>&1 >/dev/null
echo bar
echo car
echo far
echo '### Test --show-limits'
### Test --show-limits
(echo b; echo c; echo f) | parallel -k --show-limits echo {}ar
Maximal size of command: 131071
Maximal used size of command: 131071
Execution of will continue now, and it will try to read its input
and run commands; if this is not what you wanted to happen, please
press CTRL-D or CTRL-C
bar
car
far
(echo b; echo c; echo f) | parallel -j1 -kX --show-limits -s 100 echo {}ar
Maximal size of command: 131071
Maximal used size of command: 100
Execution of will continue now, and it will try to read its input
and run commands; if this is not what you wanted to happen, please
press CTRL-D or CTRL-C
bar car far
echo '### Test empty line as input'
### Test empty line as input
echo | parallel echo empty input line
empty input line
echo '### Tests if (cat | sh) works'
### Tests if (cat | sh) works
perl -e 'for(1..25) {print "echo a $_; echo b $_\n"}' | parallel 2>&1 | sort
a 1
a 10
a 11
a 12
a 13
a 14
a 15
a 16
a 17
a 18
a 19
a 2
a 20
a 21
a 22
a 23
a 24
a 25
a 3
a 4
a 5
a 6
a 7
a 8
a 9
b 1
b 10
b 11
b 12
b 13
b 14
b 15
b 16
b 17
b 18
b 19
b 2
b 20
b 21
b 22
b 23
b 24
b 25
b 3
b 4
b 5
b 6
b 7
b 8
b 9
echo '### Test if xargs-mode works'
### Test if xargs-mode works
perl -e 'for(1..25) {print "a $_\nb $_\n"}' | parallel echo 2>&1 | sort
a 1
a 10
a 11
a 12
a 13
a 14
a 15
a 16
a 17
a 18
a 19
a 2
a 20
a 21
a 22
a 23
a 24
a 25
a 3
a 4
a 5
a 6
a 7
a 8
a 9
b 1
b 10
b 11
b 12
b 13
b 14
b 15
b 16
b 17
b 18
b 19
b 2
b 20
b 21
b 22
b 23
b 24
b 25
b 3
b 4
b 5
b 6
b 7
b 8
b 9
echo '### Test -q'
### Test -q
parallel -kq perl -e '$ARGV[0]=~/^\S+\s+\S+$/ and print $ARGV[0],"\n"' ::: "a b" c "d e f" g "h i"
a b
h i
echo '### Test -q {#}'
### Test -q {#}
parallel -kq echo {#} ::: a b
1
2
parallel -kq echo {\#} ::: a b
1
2
parallel -kq echo {\\#} ::: a b
{\#} a
{\#} b
echo '### Test long commands do not take up all memory'
### Test long commands do not take up all memory
seq 1 100 | parallel -j0 -qv perl -e '$r=rand(shift);for($f=0;$f<$r;$f++){$a="a"x100};print shift,"\n"' 10000 2>/dev/null | sort
1
10
100
11
12
13
14
15
16
17
18
19
2
20
21
22
23
24
25
26
27
28
29
3
30
31
32
33
34
35
36
37
38
39
4
40
41
42
43
44
45
46
47
48
49
5
50
51
52
53
54
55
56
57
58
59
6
60
61
62
63
64
65
66
67
68
69
7
70
71
72
73
74
75
76
77
78
79
8
80
81
82
83
84
85
86
87
88
89
9
90
91
92
93
94
95
96
97
98
99
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 1
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 10
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 100
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 11
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 12
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 13
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 14
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 15
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 16
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 17
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 18
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 19
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 2
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 20
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 21
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 22
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 23
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 24
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 25
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 26
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 27
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 28
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 29
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 3
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 30
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 31
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 32
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 33
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 34
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 35
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 36
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 37
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 38
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 39
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 4
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 40
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 41
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 42
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 43
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 44
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 45
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 46
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 47
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 48
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 49
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 5
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 50
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 51
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 52
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 53
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 54
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 55
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 56
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 57
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 58
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 59
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 6
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 60
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 61
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 62
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 63
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 64
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 65
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 66
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 67
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 68
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 69
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 7
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 70
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 71
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 72
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 73
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 74
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 75
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 76
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 77
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 78
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 79
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 8
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 80
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 81
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 82
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 83
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 84
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 85
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 86
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 87
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 88
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 89
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 9
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 90
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 91
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 92
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 93
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 94
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 95
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 96
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 97
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 98
perl -e \$r=rand\(shift\)\;for\(\$f=0\;\$f\<\$r\;\$f++\)\{\$a=\"a\"x100\}\;print\ shift,\"\\n\" 10000 99
echo '### Test 0-arguments'
### Test 0-arguments
seq 1 2 | parallel -k -n0 echo n0
n0
n0
seq 1 2 | parallel -k -L0 echo L0
L0
L0
seq 1 2 | parallel -k -N0 echo N0
N0
N0
echo '### Because of --tollef -l, then -l0 == -l1, sorry'
### Because of --tollef -l, then -l0 == -l1, sorry
seq 1 2 | parallel -k -l0 echo l0
l0 1
l0 2
echo '### Test replace {}'
### Test replace {}
seq 1 2 | parallel -k -N0 echo replace {} curlies
replace curlies
replace curlies
echo '### Test arguments on commandline'
### Test arguments on commandline
parallel -k -N0 echo args on cmdline ::: 1 2
args on cmdline
args on cmdline
echo '### Test --nice locally'
### Test --nice locally
parallel --nice 1 -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b
\nice -n1 /bin/bash -c PAR=a\ bash\ -c\ \"echo\ \ \\\$PAR\ b\"
a b
echo '### Test --nice remote'
### Test --nice remote
stdout parallel --nice 1 -S .. -vv 'PAR=a bash -c "echo \$PAR {}"' ::: b | perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;'
ssh one-server exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"1\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"\\\\\\\\nice\\\ -n1\\\ \\\\\\\$SHELL\\\ -c\\\ PAR=a\\\\\\\\\\\ bash\\\\\\\\\\\ -c\\\\\\\\\\\ \\\\\\\\\\\\\\\"echo\\\\\\\\\\\ \\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$PAR\\\\\\\\\\\ b\\\\\\\\\\\\\\\"\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\);
a b
echo '### Test distribute arguments at EOF to 2 jobslots'
### Test distribute arguments at EOF to 2 jobslots
seq 1 92 | parallel -j+0 -kX -s 100 echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
66 67 68 69
70 71 72 73
74 75 76 77
78 79 80 81
82 83 84 85
86 87 88 89
90 91 92
echo '### Test distribute arguments at EOF to 5 jobslots'
### Test distribute arguments at EOF to 5 jobslots
seq 1 92 | parallel -j+3 -kX -s 100 echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
66 67 68
69 70 71
72 73 74
75 76 77
78 79 80
81 82 83
84 85 86
87 88 89
90 91 92
echo '### Test distribute arguments at EOF to infinity jobslots'
### Test distribute arguments at EOF to infinity jobslots
seq 1 92 | parallel -j0 -kX -s 100 echo 2>/dev/null
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
echo '### Test -N is not broken by distribution - single line'
### Test -N is not broken by distribution - single line
seq 9 | parallel -N 10 echo
1 2 3 4 5 6 7 8 9
echo '### Test -N is not broken by distribution - two lines'
### Test -N is not broken by distribution - two lines
seq 19 | parallel -k -N 10 echo
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19
echo '### Test -N context replace'
### Test -N context replace
seq 19 | parallel -k -N 10 echo a{}b
a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
a11b a12b a13b a14b a15b a16b a17b a18b a19b
echo '### Test -L context replace'
### Test -L context replace
seq 19 | parallel -k -L 10 echo a{}b
a1b a2b a3b a4b a5b a6b a7b a8b a9b a10b
a11b a12b a13b a14b a15b a16b a17b a18b a19b

View file

@ -75,29 +75,29 @@ OK
ls: tmp/parallel.file*: No such file or directory ls: tmp/parallel.file*: No such file or directory
OK OK
Input for ssh Input for ssh
one-server mkdir -p ./. -l parallel one-server -- mkdir -p ./.
-l parallel one-server rsync --server -lDrRze.iLsfx . ./. -l parallel one-server rsync --server -lDrRze.iLs . ./.
one-server exec perl -e '@GNU_Parallel=("use","IPC::Open3;","use","MIME::Base64");eval"@GNU_Parallel";$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";my($in,$out,$eval);open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;eval$eval;' base64 -l parallel one-server -- exec perl -e @GNU_Parallel\=\(\"use\",\"IPC::Open3\;\",\"use\",\"MIME::Base64\"\)\;eval\"@GNU_Parallel\"\;my\$eval\=decode_base64\(join\"\",@ARGV\)\;eval\$eval\; base64
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLs . ./parallel.file.'
'newlineX.out 'newlineX.out
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLs . ./parallel.file.'
'newlineX.out2 'newlineX.out2
one-server (rm -f ./tmp/parallel.file.' -l parallel one-server -- (rm -f ./tmp/parallel.file.'
'newlineX; rmdir ./tmp/ ./ >&/dev/null;) 'newlineX; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;)
one-server (rm -f ./tmp/parallel.file.' -l parallel one-server -- (rm -f ./tmp/parallel.file.'
'newlineX.out; rmdir ./tmp/ ./ >&/dev/null;) 'newlineX.out; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;)
one-server (rm -f ./tmp/parallel.file.' -l parallel one-server -- (rm -f ./tmp/parallel.file.'
'newlineX.out2; rmdir ./tmp/ ./ >&/dev/null;) 'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;)
one-server mkdir -p ./. -l parallel one-server -- mkdir -p ./.
-l parallel one-server rsync --server -lDrRze.iLsfx . ./. -l parallel one-server rsync --server -lDrRze.iLs . ./.
one-server exec perl -e '@GNU_Parallel=("use","IPC::Open3;","use","MIME::Base64");eval"@GNU_Parallel";$SIG{CHLD}="IGNORE";my$zip=(grep{-x$_}"/usr/local/bin/bzip2")[0]||"bzip2";my($in,$out,$eval);open3($in,$out,">&STDERR",$zip,"-dc");if(my$perlpid=fork){close$in;$eval=join"",<$out>;close$out;}else{close$out;print$in(decode_base64(join"",@ARGV));close$in;exit;}wait;eval$eval;' base64 -l parallel one-server -- exec perl -e @GNU_Parallel\=\(\"use\",\"IPC::Open3\;\",\"use\",\"MIME::Base64\"\)\;eval\"@GNU_Parallel\"\;my\$eval\=decode_base64\(join\"\",@ARGV\)\;eval\$eval\; base64
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLs . ./parallel.file.'
'newlineX.out 'newlineX.out
-l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLsfx . ./parallel.file.' -l parallel one-server cd ././tmp; rsync --server --sender -lDrRze.iLs . ./parallel.file.'
'newlineX.out2 'newlineX.out2
one-server (rm -f ./tmp/parallel.file.' -l parallel one-server -- (rm -f ./tmp/parallel.file.'
'newlineX; rmdir ./tmp/ ./ >&/dev/null;) 'newlineX; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;)
one-server (rm -f ./tmp/parallel.file.' -l parallel one-server -- (rm -f ./tmp/parallel.file.'
'newlineX.out; rmdir ./tmp/ ./ >&/dev/null;) 'newlineX.out; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;)
one-server (rm -f ./tmp/parallel.file.' -l parallel one-server -- (rm -f ./tmp/parallel.file.'
'newlineX.out2; rmdir ./tmp/ ./ >&/dev/null;) 'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;)

View file

@ -20,26 +20,9 @@ echo '### Test of --progress with no jobs'
Computers / CPU cores / Max jobs to run Computers / CPU cores / Max jobs to run
1:local / 8 / 1 1:local / 8 / 1
0 0
echo '### bug #34422: parallel -X --eta crashes with div by zero'
### bug #34422: parallel -X --eta crashes with div by zero
# We do not care how long it took
seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG'
Computers / CPU cores / Max jobs to run
1:local / 8 / 1
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed' echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed ### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed
parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $? parallel -j0 --timeout 6 --onall -S localhost,parallel@parallel-server1 'sleep {}; echo slept {}' ::: 1 8 9 ; echo jobs failed: $?
slept 1 slept 1
slept 1 slept 1
jobs failed: 2 jobs failed: 2
echo '### --pipe without command'
### --pipe without command
seq -w 10 | stdout parallel --pipe
parallel: Error: --pipe must have a command to pipe into (e.g. 'cat').
echo '### bug #36260: {n} expansion in --colsep files fails for empty fields if all following fields are also empty'
### bug #36260: {n} expansion in --colsep files fails for empty fields if all following fields are also empty
echo A,B,, | parallel --colsep , echo {1}{3}{2}
AB

View file

@ -1,16 +1,3 @@
echo "### BUG: The length for -X is not close to max (131072)"; seq 1 60000 | nice parallel -X echo {.} aa {}{.} {}{}d{} {}dd{}d{.} |head -n 1 |wc
### BUG: The length for -X is not close to max (131072)
1 12821 131060
seq 1 60000 | nice parallel -X echo a{}b{}c |head -n 1 |wc
1 10948 131060
seq 1 60000 | nice parallel -X echo |head -n 1 |wc
1 23695 131064
seq 1 60000 | nice parallel -X echo a{}b{}c {} |head -n 1 |wc
1 15810 131064
seq 1 60000 | nice parallel -X echo {}aa{} |head -n 1 |wc
1 11790 131058
seq 1 60000 | nice parallel -X echo {} aa {} |head -n 1 |wc
1 25545 131055
echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin' echo '### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin'
### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin ### bug #32191: Deep recursion on subroutine main::get_job_with_sshlogin
seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null" seq 1 150 | stdout nice parallel -j9 --retries 2 -S localhost,: "/bin/non-existant 2>/dev/null"
@ -20,11 +7,6 @@ echo '### Test --load locally - should take >10s'
# This will run 10 processes in parallel for 10s # This will run 10 processes in parallel for 10s
sleep 2; stdout /usr/bin/time -f %e parallel --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"' sleep 2; stdout /usr/bin/time -f %e parallel --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
OK OK
echo '### Test --load remote'
### Test --load remote
ssh parallel@parallel-server1 'seq 10 | parallel --nice 19 --timeout 10 -j0 -N0 "gzip < /dev/zero > /dev/null"' &
stdout /usr/bin/time -f %e parallel -S parallel@parallel-server1 --load 10 sleep ::: 1 | perl -ne '$_ > 10 and print "OK\n"'
OK
echo '### Test --load read from a file - more than 3s' echo '### Test --load read from a file - more than 3s'
### Test --load read from a file - more than 3s ### Test --load read from a file - more than 3s
echo '# This will run 10 processes in parallel for 10s'; seq 10 | parallel --nice 19 --timeout 10 -j0 -N0 "gzip < /dev/zero > /dev/null" & ( echo 8 > /tmp/parallel_load_file; sleep 10; echo 1000 > /tmp/parallel_load_file ) & sleep 1; stdout /usr/bin/time -f %e parallel --load /tmp/parallel_load_file sleep ::: 1 | perl -ne '$_ > 9 and print "OK\n"'; rm /tmp/parallel_load_file echo '# This will run 10 processes in parallel for 10s'; seq 10 | parallel --nice 19 --timeout 10 -j0 -N0 "gzip < /dev/zero > /dev/null" & ( echo 8 > /tmp/parallel_load_file; sleep 10; echo 1000 > /tmp/parallel_load_file ) & sleep 1; stdout /usr/bin/time -f %e parallel --load /tmp/parallel_load_file sleep ::: 1 | perl -ne '$_ > 9 and print "OK\n"'; rm /tmp/parallel_load_file

View file

@ -1,73 +1,13 @@
echo '### Test --return of weirdly named file' echo '### Test --return of weirdly named file'
### Test --return of weirdly named file ### Test --return of weirdly named file
stdout parallel --return {} -vv -S parallel\@parallel-server3 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;'; rm 'aa<${#}" b' stdout parallel --return {} -vv -S parallel\@parallel-server3 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
ssh one-server exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"1\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"echo\\\ \\\>aa\\\\\\\\\\\<\\\\\\\\\\\\\\\$\\\\\\\\\\\{\\\\\\\\\\\#\\\\\\\\\\\}\\\\\\\\\\\\\\\"\\\\\\\\\\\ b\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\);_EXIT_status=$?; mkdir -p ./.; rsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzR -essh parallel@parallel-server3:./aa\\\<\\\$\\\{\\\#\\\}\\\"\\\ b ./.; exit $_EXIT_status; ssh -l parallel one-server -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; base64;_EXIT_status=$?; mkdir -p ./.; rsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzR -essh\ -l\ parallel parallel-server3:./aa\\\<\\\$\\\{\\\#\\\}\\\"\\\ b ./.; exit $_EXIT_status;
echo '### Test if remote login shell is csh' echo '### Test if remote login shell is csh'
### Test if remote login shell is csh ### Test if remote login shell is csh
stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | perl -pe 's/\S*parallel-server\S*/one-server/;s/[a-f0-9]{500,}/hex/;s/\d{5,8}/pId/g;' stdout parallel -k -vv -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a b c | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'
ssh csh@localhost exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"1\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"echo\\\ \\\\\\\$PARALLEL_PID\\\ \\\\\\\$PARALLEL_SEQ\\\ a\\\|\\\ wc\\\ -w\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\); ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; base64;
3 3
ssh csh@localhost exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"2\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"echo\\\ \\\\\\\$PARALLEL_PID\\\ \\\\\\\$PARALLEL_SEQ\\\ b\\\|\\\ wc\\\ -w\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\); ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; base64;
3 3
ssh csh@localhost exec perl\ -e\ \\\$ENV\\\{\\\"PARALLEL_PID\\\"\\\}=\\\"pId\\\"\\\;\\\$ENV\\\{\\\"PARALLEL_SEQ\\\"\\\}=\\\"3\\\"\\\;\\\$bashfunc\\\ =\\\ \\\"\\\"\\\;@ARGV=\\\"echo\\\ \\\\\\\$PARALLEL_PID\\\ \\\\\\\$PARALLEL_SEQ\\\ c\\\|\\\ wc\\\ -w\\\"\\\;\\\$SIG\\\{CHLD\\\}=sub\\\{\\\$done=1\\\;\\\}\\\;\\\$pid=fork\\\;unless\\\(\\\$pid\\\)\\\{setpgrp\\\;exec\\\$ENV\\\{SHELL\\\},\\\"-c\\\",\\\(\\\$bashfunc.\\\"@ARGV\\\"\\\)\\\;die\\\"exec:\\\$\\\!\\\\n\\\"\\\;\\\}do\\\{\\\$s=\\\$s\\\<1\\\?0.001+\\\$s\\\*1.03:\\\$s\\\;select\\\(undef,undef,undef,\\\$s\\\)\\\;\\\}until\\\(\\\$done\\\|\\\|getppid==1\\\)\\\;kill\\\(SIGHUP,-\\\$\\\{pid\\\}\\\)unless\\\$done\\\;wait\\\;exit\\\(\\\$\\\?\\\&127\\\?128+\\\(\\\$\\\?\\\&127\\\):1+\\\$\\\?\\\>\\\>8\\\); ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=\\\(\\\"use\\\",\\\"IPC::Open3\\\;\\\",\\\"use\\\",\\\"MIME::Base64\\\"\\\)\\\;eval\\\"@GNU_Parallel\\\"\\\;my\\\$eval\\\=decode_base64\\\(join\\\"\\\",@ARGV\\\)\\\;eval\\\$eval\\\; base64;
3 3
echo '### Test {} multiple times in different commands'
### Test {} multiple times in different commands
seq 10 | parallel -v -Xj1 echo {} \; echo {}
echo 1 2 3 4 5 6 7 8 9 10 ; echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
echo '### Test of -X {1}-{2} with multiple input sources'
### Test of -X {1}-{2} with multiple input sources
parallel -j1 -kX echo {1}-{2} ::: a ::: b
a-b
parallel -j2 -kX echo {1}-{2} ::: a b ::: c d
a-c
b-c
parallel -j2 -kX echo {1}-{2} ::: a b c ::: d e f
a-d
b-f
parallel -j0 -kX echo {1}-{2} ::: a b c ::: d e f
a-d
a-e
a-f
b-d
b-e
b-f
c-d
c-e
c-f
echo '### Test of -X {}-{.} with multiple input sources'
### Test of -X {}-{.} with multiple input sources
parallel -j1 -kX echo {}-{.} ::: a ::: b
a-a b-b
parallel -j2 -kX echo {}-{.} ::: a b ::: c d
a-a c-c a-a d-d
b-b c-c b-b d-d
parallel -j2 -kX echo {}-{.} ::: a b c ::: d e f
a-a d-d a-a e-e a-a f-f b-b d-d b-b e-e
b-b f-f c-c d-d c-c e-e c-c f-f
parallel -j0 -kX echo {}-{.} ::: a b c ::: d e f
a-a d-d
a-a e-e
a-a f-f
b-b d-d
b-b e-e
b-b f-f
c-c d-d
c-c e-e
c-c f-f
echo '### Test of -r with --pipe - the first should give an empty line. The second should not.'
### Test of -r with --pipe - the first should give an empty line. The second should not.
echo | parallel -j2 -N1 --pipe cat | wc -l
1
echo | parallel -r -j2 -N1 --pipe cat | wc -l
0
echo '### Test --tty'
### Test --tty
seq 0.1 0.1 0.5 | parallel -j1 --tty tty\;sleep
/dev/tty
/dev/tty
/dev/tty
/dev/tty
/dev/tty

View file

@ -1,11 +0,0 @@
echo "### Test memory consumption stays (almost) the same for 30 and 300 jobs"
### Test memory consumption stays (almost) the same for 30 and 300 jobs
mem30=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x100000;for(1..30){print $a,"\n"}') ); mem300=$( stdout time -f %M parallel -j2 true :::: <(perl -e '$a="x"x100000;for(1..300){print $a,"\n"}') ); echo "Memory use should not depend very much on the total number of jobs run\n"; echo "Test if memory consumption(300 jobs) < memory consumption(30 jobs) * 110% "; echo $(($mem300*100 < $mem30 * 110))
Memory use should not depend very much on the total number of jobs run\n
Test if memory consumption(300 jobs) < memory consumption(30 jobs) * 110%
1
echo '### Test --shellquote'
### Test --shellquote
perl -e 'print pack("c*",1..255)' | parallel -0 --shellquote
\\\\\\\\ '
'\ \ \ \\\\\\\\\\\\\\ \!\"\#\$%\&\'\(\)\*+,-./0123456789:\;\<=\>\?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]\^_\`abcdefghijklmnopqrstuvwxyz\{\|\}\~<7F>\\ƒ\„\…\†\‡\ˆ\‰\Š\\Œ\<5C>\Ž\<5C>\<5C>\\\“\”\•\\—\˜\™\š\\œ\<5C>\ž\Ÿ\ \¡\¢\£\¤\¥\¦\§\¨\©\ª\«\¬\­\®\¯\°\±\²\³\´\µ\¶\·\¸\¹\º\»\¼\½\¾\¿\À\Á\Â\Ã\Ä\Å\Æ\Ç\È\É\Ê\Ë\Ì\Í\Î\Ï\Ð\Ñ\Ò\Ó\Ô\Õ\Ö\×\Ø\Ù\Ú\Û\Ü\Ý\Þ\ß\à\á\â\ã\ä\å\æ\ç\è\é\ê\ë\ì\í\î\ï\ð\ñ\ò\ó\ô\õ\ö\÷\ø\ù\ú\û\ü\ý\þ\ÿ