diff --git a/doc/haikus b/doc/haikus index d9abead2..7a7617da 100644 --- a/doc/haikus +++ b/doc/haikus @@ -5,6 +5,7 @@ Quote of the month: + --line-buffer, a flag parallel, now more precise Output is in sync @@ -13,6 +14,9 @@ Output is in sync write a haiku about gnu parallel and the :::+ option + Praise GNU parallel, though. That gets me pretty far. + -- Your Obed. Servant, J. B. @Jeffinatorator + Got around to using GNU parallel for the first time from a suggestion by @jdwasmuth ... now I'm wishing I started using this years ago -- Stefan Gavriliuc @GavriliucStefan@twitter diff --git a/doc/release_new_version b/doc/release_new_version index cafd0846..5b622c7d 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -262,7 +262,7 @@ from:tange@gnu.org to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20230222 ('Paludan/Leopard/Monterrey Park/Peru<<>>') released +Subject: GNU Parallel 20230222 ('(Turkey/Syria/Gaziantep)Balloon/Paludan/Leopard/Peru<<>>') released GNU Parallel 20230222 ('<<>>') has been released. It is available for download at: lbry://@GnuParallel:4 @@ -280,6 +280,8 @@ News about GNU Parallel: https://www.redhat.com/sysadmin/perl-scripts +https://bioinformaticsworkbook.org/Appendix/GNUparallel/GNU_parallel_examples.html#gsc.tab=0 + <<>> GNU Parallel - For people who live life in the parallel lane. diff --git a/src/parallel b/src/parallel index a8457ea9..df65692e 100755 --- a/src/parallel +++ b/src/parallel @@ -2609,7 +2609,8 @@ sub parse_options(@) { parse_sshlogin(); if(defined $opt::show_limits) { show_limits(); } - if(remote_hosts() and ($opt::X or $opt::m or $opt::xargs)) { + if(remote_hosts() and + (defined $opt::X or defined $opt::m or defined $opt::xargs)) { # As we do not know the max line length on the remote machine # long commands generated by xargs may fail # If $opt::max_replace_args is set, it is probably safe @@ -2619,15 +2620,17 @@ sub parse_options(@) { if(not defined $opt::jobs) { $opt::jobs = "100%"; } open_joblog(); open_json_csv(); - if($opt::sqlmaster or $opt::sqlworker) { + if(defined $opt::sqlmaster or defined $opt::sqlworker) { $Global::sql = SQL->new($opt::sqlmaster || $opt::sqlworker); } - if($opt::sqlworker) { $Global::membuffer ||= 1; } + if(defined $opt::sqlworker) { $Global::membuffer ||= 1; } # The sqlmaster groups the arguments, so the should just read one - if($opt::sqlworker and not $opt::sqlmaster) { + if(defined $opt::sqlworker and not defined $opt::sqlmaster) { $Global::max_number_of_args = 1; } - if($Global::color or $opt::colorfailed) { Job::init_color(); } + if(defined $Global::color or defined $opt::colorfailed) { + Job::init_color(); + } } sub check_invalid_option_combinations() { @@ -2651,19 +2654,19 @@ sub check_invalid_option_combinations() { "--max-lines, and -L."); wait_and_exit(255); } - if(defined $opt::group and $opt::ungroup) { + if(defined $opt::group and defined $opt::ungroup) { ::error("--group cannot be combined with --ungroup."); ::wait_and_exit(255); } - if(defined $opt::group and $opt::linebuffer) { + if(defined $opt::group and defined $opt::linebuffer) { ::error("--group cannot be combined with --line-buffer."); ::wait_and_exit(255); } - if(defined $opt::ungroup and $opt::linebuffer) { + if(defined $opt::ungroup and defined $opt::linebuffer) { ::error("--ungroup cannot be combined with --line-buffer."); ::wait_and_exit(255); } - if(defined $opt::tollef and not $opt::gnu) { + if(defined $opt::tollef and not defined $opt::gnu) { ::error("--tollef has been retired.", "Remove --tollef or use --gnu to override --tollef."); ::wait_and_exit(255); @@ -2681,15 +2684,15 @@ sub check_invalid_option_combinations() { "--noctrlc has been retired."); ::wait_and_exit(255); } - if($opt::groupby) { - if(not $opt::pipe and not $opt::pipepart) { + if(defined $opt::groupby) { + if(not defined $opt::pipe and not defined $opt::pipepart) { $opt::pipe = 1; } - if($opt::remove_rec_sep) { + if(defined $opt::remove_rec_sep) { ::error("--remove-rec-sep is not compatible with --groupby"); ::wait_and_exit(255); } - if($opt::recstart) { + if(defined $opt::recstart) { ::error("--recstart is not compatible with --groupby"); ::wait_and_exit(255); } @@ -2698,6 +2701,16 @@ sub check_invalid_option_combinations() { ::wait_and_exit(255); } } + if($ENV{'TMPDIR'} =~ /\n/) { + if(defined $opt::files) { + ::warning("--files do not work if \$TMPDIR contains newline."); + } elsif($Global::cshell + and + (defined $opt::cat or defined $opt::fifo)) { + ::warning("--cat/--fifo fails under csh ". + "if \$TMPDIR contains newline."); + } + } } sub init_globals() { @@ -5249,6 +5262,7 @@ sub onall($@) { my @joblogs; for my $host (sort keys %Global::host) { my $sshlogin = $Global::host{$host}; + my $qsshlogin = Q($sshlogin->string()); my $joblog = tmp_joblog($opt::joblog); if($joblog) { push @joblogs, $joblog; @@ -5259,15 +5273,18 @@ sub onall($@) { my $penv=$Global::parallel_env ? "PARALLEL_ENV=".Q($Global::parallel_env) : ''; - my $qsshlogin = Q($sshlogin->string()); + my $results; + if(defined $opt::results) { + $results = Q($opt::results) . $qsshlogin; + } ::debug("init", "$penv $0 $suboptions -j1 $joblog ", - ((defined $opt::tag) ? - "--tagstring ".$qsshlogin : ""), + ((defined $opt::tag) ? "--tagstring ".$qsshlogin : ""), + ((defined $opt::results) ? "--results ".$results : ""), " -S $qsshlogin ", join(" ",shell_quote(@command,$quad,@argfiles)),"\n"); print $parallel_fh "$penv $0 $suboptions -j1 $joblog ", - ((defined $opt::tag) ? - "--tagstring ".$qsshlogin : ""), + ((defined $opt::tag) ? "--tagstring ".$qsshlogin : ""), + ((defined $opt::results) ? "--results ".$results : ""), " -S $qsshlogin ", join(" ",shell_quote(@command,$quad,@argfiles)),"\0"; } @@ -8738,9 +8755,10 @@ sub control_path_dir($) { if(not defined $self->{'control_path_dir'}) { $self->{'control_path_dir'} = # Use $ENV{'TMPDIR'} as that is typically not - # NFS mounted + # NFS mounted. + # The file system must support UNIX domain sockets File::Temp::tempdir($ENV{'TMPDIR'} - . "/control_path_dir-XXXX", + . "/ctrlpath-XXXX", CLEANUP => 1); } return $self->{'control_path_dir'}; @@ -12402,7 +12420,7 @@ sub results_out($) { } $out .="/"; } else { - if($out =~ m:/$:) { + if($out =~ m:/$:s) { # / = dir if(-d $out or eval{ File::Path::mkpath($out); }) { # OK @@ -12411,7 +12429,7 @@ sub results_out($) { ::wait_and_exit(255); } } else { - $out =~ m:(.*)/:; + $out =~ m:(.*)/:s; File::Path::mkpath($1); } } @@ -12520,7 +12538,7 @@ sub results_out($) { $Global::input_source_header{$n}, $quote ? ( - map { + grep { $_ ne "\0noarg" } map { my $s = $_; # Quote + as ++ $s =~ s/(.)/$map{$1}/gs; @@ -12533,7 +12551,7 @@ sub results_out($) { $rec_ref->[$n-1]->orig() ) : ( - map { + grep { $_ ne "\0noarg" } map { my $s = $_; # Quote / as +z and + as ++ $s =~ s/($sep|\+)/$map{$1}/gos; diff --git a/src/parallel.pod b/src/parallel.pod index 5b0ea47e..dcd48b15 100644 --- a/src/parallel.pod +++ b/src/parallel.pod @@ -1881,11 +1881,16 @@ Spread input to jobs on stdin (standard input). Read a block of data from stdin (standard input) and give one block of data as input to one job. -The block size is determined by B<--block> (default: 1M). The strings -B<--recstart> and B<--recend> tell GNU B how a record starts -and/or ends. The block read will have the final partial record removed -before the block is passed on to the job. The partial record will be -prepended to next block. +The block size is determined by B<--block> (default: 1M). + +Except for the first and last record GNU B only passes full +records to the job. The strings B<--recstart> and B<--recend> +determine where a record starts and ends: The border between two +records is defined as B<--recend> immediately followed by +B<--recstart>. GNU B splits exactly after B<--recend> and +before B<--recstart>. The block will have the last partial record +removed before the block is passed on to the job. The partial record +will be prepended to next block. You can limit the number of records to be passed with B<-N>, and set the record size with B<-L>. @@ -1911,7 +1916,8 @@ B<--fifo> B<--cat> B<--pipe-part> B<-N> B<-L> B<--round-robin> Pipe parts of a physical file. -B<--pipe-part> works similar to B<--pipe>, but is much faster. +B<--pipe-part> works similar to B<--pipe>, but is much faster. 5 GB/s +can easily be delivered. B<--pipe-part> has a few limitations: diff --git a/testsuite/Start.sh b/testsuite/Start.sh index 558de987..8509a5a1 100755 --- a/testsuite/Start.sh +++ b/testsuite/Start.sh @@ -35,7 +35,7 @@ run_test() { base=`basename "$script" .sh` # Force spaces and < into TMPDIR - this will expose bugs export TMPDIR=/tmp/"$base-tmp"/' - <'/tmp + `touch /tmp/tripwire` <"'"'"/tmp rm -rf "$TMPDIR" mkdir -p "$TMPDIR" # Clean before. May be owned by other users @@ -49,6 +49,12 @@ run_test() { run_once $script fi run_once $script + if [ -e /tmp/tripwire ] ; then + echo '!!!' + echo '!!! /tmp/tripwire TRIPPED !!!' + echo '!!!' + exit 1 + fi diff -Naur wanted-results/"$base" actual-results/"$base" || (touch "$script" && echo touch "$script") diff --git a/testsuite/tests-to-run/parallel-centos3.sh b/testsuite/tests-to-run/parallel-centos3.sh index b9fa2b43..7b535ef3 100644 --- a/testsuite/tests-to-run/parallel-centos3.sh +++ b/testsuite/tests-to-run/parallel-centos3.sh @@ -52,7 +52,7 @@ start_centos3 pwd=$(pwd) # If not run in dir parallel/testsuite: set testsuitedir to path of testsuite testsuitedir=${testsuitedir:-$pwd} - cd $testsuitedir + cd $testsuitedir # Copy binaries to server cd testsuite/vagrant/tange/centos3/ 2>/dev/null cd vagrant/tange/centos3/ 2>/dev/null diff --git a/testsuite/tests-to-run/parallel-local-0.3s.sh b/testsuite/tests-to-run/parallel-local-0.3s.sh index 677e2409..1651b231 100644 --- a/testsuite/tests-to-run/parallel-local-0.3s.sh +++ b/testsuite/tests-to-run/parallel-local-0.3s.sh @@ -660,7 +660,8 @@ par_pipepart_block_bigger_2G() { par_retries_replacement_string() { tmp=$(mktemp) - parallel --retries {//} "echo {/} >>'$tmp';exit {/}" ::: 1/11 2/22 3/33 + qtmp=$(parallel -0 --shellquote ::: "$tmp") + parallel --retries {//} "echo {/} >>$qtmp;exit {/}" ::: 1/11 2/22 3/33 sort "$tmp" rm "$tmp" } @@ -696,11 +697,13 @@ par_basic_halt() { echo "eval{setpriority(0,0,9)}; while(1){}") > "$cpuburn" chmod 700 "$cpuburn" cp -a "$cpuburn" "$cpuburn2" - - parallel -0 -j4 --halt 2 ::: 'sleep 1' "'$cpuburn'" false; + qcpuburn=$(parallel -0 --shellquote ::: "$cpuburn") + qcpuburn2=$(parallel -0 --shellquote ::: "$cpuburn2") + + parallel -0 -j4 --halt 2 ::: 'sleep 1' "$qcpuburn" false; killall $(basename "$cpuburn") 2>/dev/null && echo ERROR: cpuburn should already have been killed - parallel -0 -j4 --halt -2 ::: 'sleep 1' "'$cpuburn2'" true; + parallel -0 -j4 --halt -2 ::: 'sleep 1' "$qcpuburn2" true; killall $(basename "$cpuburn2") 2>/dev/null && echo ERROR: cpuburn2 should already have been killed rm "$cpuburn" "$cpuburn2" diff --git a/testsuite/tests-to-run/parallel-local-10s.sh b/testsuite/tests-to-run/parallel-local-10s.sh index 8b73620b..333d17d6 100644 --- a/testsuite/tests-to-run/parallel-local-10s.sh +++ b/testsuite/tests-to-run/parallel-local-10s.sh @@ -303,10 +303,14 @@ par_failing_compressor() { par_fifo_under_csh() { echo '### Test --fifo under csh' + doit() { + csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'" + echo exit $? + } # csh does not seem to work with TMPDIR containing \n + doit TMPDIR=/tmp - csh -c "seq 3000000 | parallel -k --pipe --fifo 'sleep .{#};cat {}|wc -c ; false; echo \$status; false'" - echo exit $? + doit } par_parset() { @@ -659,7 +663,8 @@ par_results_csv() { echo "bug #: --results csv" doit() { - parallel -k $@ --results -.csv echo ::: H2 22 23 ::: H1 11 12; + parallel -k $@ --results -.csv echo ::: H2 22 23 ::: H1 11 12 \ + 2> >(grep -v TMPDIR) } export -f doit parallel -k --tag doit ::: '--header :' '' \ diff --git a/testsuite/tests-to-run/parallel-local-3s.sh b/testsuite/tests-to-run/parallel-local-3s.sh index 0f4f9fcd..1d3c1d17 100644 --- a/testsuite/tests-to-run/parallel-local-3s.sh +++ b/testsuite/tests-to-run/parallel-local-3s.sh @@ -22,7 +22,8 @@ par_retries_0() { echo '--retries 0 = inf' echo this wraps at 256 and should retry until it wraps tmp=$(mktemp) - parallel --retries 0 -u 'printf {} >> '"'$tmp'"';a=`stat -c %s '"'$tmp'"'`; echo -n " $a"; exit $a' ::: a + qtmp=$(parallel -0 --shellquote ::: "$tmp") + parallel --retries 0 -u 'printf {} >> '"$qtmp"';a=$(stat -c %s '"$qtmp"'); echo -n " $a"; exit $a' ::: a echo rm -f "$tmp" } diff --git a/testsuite/tests-to-run/parallel-local-ssh4.sh b/testsuite/tests-to-run/parallel-local-ssh4.sh index c9554f45..a1240408 100644 --- a/testsuite/tests-to-run/parallel-local-ssh4.sh +++ b/testsuite/tests-to-run/parallel-local-ssh4.sh @@ -21,6 +21,31 @@ par_sshloginfile() { rm -f "$tmp" } +par_nonall_results() { + echo '### --results --onall' + tmp="$TMPDIR"/onall + mkdir -p "$tmp" + parallel --results "$tmp"/noslash --onall -Scsh@lo,sh@lo ::: id pwd + parallel --results "$tmp"/slash/ --onall -Scsh@lo,sh@lo ::: id pwd + parallel --results "$tmp"/rplslash/{}/ --onall -Scsh@lo,sh@lo ::: id pwd + parallel --results "$tmp"/rplnoslash/{} --onall -Scsh@lo,sh@lo ::: id pwd + parallel --results "$tmp"/rpl1slash/{1}/ --onall -Scsh@lo,sh@lo ::: id pwd + parallel --results "$tmp"/rpl1noslash/{1} --onall -Scsh@lo,sh@lo ::: id pwd + find "$tmp" + rm -r "$tmp" + echo '### --results --nonall' + tmp="$TMPDIR"/nonall + mkdir -p "$tmp" + parallel --results "$tmp"/noslash --nonall -Scsh@lo,sh@lo pwd + parallel --results "$tmp"/slash/ --nonall -Scsh@lo,sh@lo pwd + parallel --results "$tmp"/rplslash/{}/ --nonall -Scsh@lo,sh@lo pwd + parallel --results "$tmp"/rplnoslash/{} --nonall -Scsh@lo,sh@lo pwd + parallel --results "$tmp"/rpl1slash/{1}/ --nonall -Scsh@lo,sh@lo pwd + parallel --results "$tmp"/rpl1noslash/{1} --nonall -Scsh@lo,sh@lo pwd + find "$tmp" + rm -r "$tmp" +} + par_env_underscore() { echo '### --env _' echo ignored_var >> ~/.parallel/ignored_vars diff --git a/testsuite/tests-to-run/parallel-local-ssh5.sh b/testsuite/tests-to-run/parallel-local-ssh5.sh index 028515ab..30d50d6e 100644 --- a/testsuite/tests-to-run/parallel-local-ssh5.sh +++ b/testsuite/tests-to-run/parallel-local-ssh5.sh @@ -11,7 +11,8 @@ par_ssh_cmd_with_newline() { echo '### Check --ssh with \n works' ssh=$(mktemp) cp -a /usr/bin/ssh "$ssh" - parallel --ssh "'$ssh'" -S sh@lo ::: id + qssh=$(parallel -0 --shellquote "$ssh") + parallel --ssh "$qssh" -S sh@lo ::: id } par_controlmaster() { @@ -55,7 +56,7 @@ par_input_loss_pipe() { par_controlmaster_eats() { echo 'bug #36707: --controlmaster eats jobs' - seq 2 | parallel -k --controlmaster --sshlogin localhost echo OK{} + seq 2 | parallel -k --controlmaster --sshlogin lo echo OK{} } par_lsh() { diff --git a/testsuite/tests-to-run/parallel-local2.sh b/testsuite/tests-to-run/parallel-local2.sh index 07f21ec3..69b762b0 100644 --- a/testsuite/tests-to-run/parallel-local2.sh +++ b/testsuite/tests-to-run/parallel-local2.sh @@ -5,6 +5,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later cpuburn=$(mktemp) +qcpuburn=$(parallel -0 --shellquote ::: "$cpuburn") (echo '#!/usr/bin/perl' echo "eval{setpriority(0,0,9)}; while(1){}") > "$cpuburn" chmod 700 "$cpuburn" @@ -14,7 +15,7 @@ forceload () { # Force load LOAD=$1 # Start 10 times as many cpuburn - seq 0 0.1 $1 | parallel -j0 timeout 20 "'$cpuburn'" 2>/dev/null & + seq 0 0.1 $1 | parallel -j0 timeout 20 "$qcpuburn" 2>/dev/null & PID=$! # Give GNU Parallel 1 second to startup sleep 1 @@ -42,7 +43,7 @@ killall "$basename" 2>/dev/null echo '### Test too slow spawning' # Let the commands below run during high load -seq 1000 | timeout 20 parallel -j400% -N0 "'$cpuburn'" 2>/dev/null & +seq 1000 | timeout 20 parallel -j400% -N0 "$qcpuburn" 2>/dev/null & PID=$! seq 1 1000 | stdout nice nice parallel --halt 1 -uj0 -N0 kill $PID | perl -pe '/parallel: Warning: Starting \d+ processes took/ and do {close STDIN; `kill '$PID';killall "$basename"`; print "OK\n"; exit }'; diff --git a/testsuite/tests-to-run/parallel-local21.sh b/testsuite/tests-to-run/parallel-local21.sh index 2e327f43..71e8f1f6 100644 --- a/testsuite/tests-to-run/parallel-local21.sh +++ b/testsuite/tests-to-run/parallel-local21.sh @@ -13,6 +13,7 @@ mkdir -p "$TMPDIR" par_basic_shebang_wrap() { echo "### Test basic --shebang-wrap" script="$TMPDIR"/basic--shebang-wrap + qscript=$(parallel -0 --shellquote ::: "$script") cat < "$script" #!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl @@ -23,11 +24,11 @@ EOF args() { echo arg1; echo arg2; echo "arg3.1 arg3.2"; } "$script" "$(args)" echo "### Test basic --shebang-wrap Same as" - parallel -k /usr/bin/perl "'$script'" ::: "$(args)" + parallel -k /usr/bin/perl "$qscript" ::: "$(args)" echo "### Test basic --shebang-wrap stdin" args | "$script" echo "### Test basic --shebang-wrap Same as" - args | parallel -k /usr/bin/perl "'$script'" + args | parallel -k /usr/bin/perl "$qscript" rm "$script" } @@ -37,6 +38,7 @@ par_shebang_with_parser_options() { echo "### Test --shebang-wrap with parser options" script="$TMPDIR"/with-parser--shebang-wrap + qscript=$(parallel -0 --shellquote ::: "$script") cat < "$script" #!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/perl -p @@ -46,15 +48,16 @@ EOF chmod 755 "$script" "$script" /tmp/in12 /tmp/in45 echo "### Test --shebang-wrap with parser options Same as" - parallel -k /usr/bin/perl -p "'$script'" ::: /tmp/in12 /tmp/in45 + parallel -k /usr/bin/perl -p "$qscript" ::: /tmp/in12 /tmp/in45 echo "### Test --shebang-wrap with parser options stdin" (echo /tmp/in12; echo /tmp/in45) | "$script" echo "### Test --shebang-wrap with parser options Same as" - (echo /tmp/in12; echo /tmp/in45) | parallel -k /usr/bin/perl "'$script'" + (echo /tmp/in12; echo /tmp/in45) | parallel -k /usr/bin/perl "$qscript" rm "$script" echo "### Test --shebang-wrap --pipe with parser options" script="$TMPDIR"/pipe--shebang-wrap + qscript=$(parallel -0 --shellquote ::: "$script") cat < "$script" #!/usr/local/bin/parallel --shebang-wrap -k --pipe /usr/bin/perl -p @@ -65,7 +68,7 @@ EOF echo "### Test --shebang-wrap --pipe with parser options stdin" cat /tmp/in12 /tmp/in45 | "$script" echo "### Test --shebang-wrap --pipe with parser options Same as" - cat /tmp/in12 /tmp/in45 | parallel -k --pipe /usr/bin/perl\ -p "'$script'" + cat /tmp/in12 /tmp/in45 | parallel -k --pipe /usr/bin/perl\ -p "$qscript" rm "$script" rm /tmp/in12 diff --git a/testsuite/wanted-results/parallel-local-0.3s b/testsuite/wanted-results/parallel-local-0.3s index f27aa6b6..370c4196 100644 --- a/testsuite/wanted-results/parallel-local-0.3s +++ b/testsuite/wanted-results/parallel-local-0.3s @@ -319,7 +319,7 @@ par_l0_is_l1 ### Because of --tollef -l, then -l0 == -l1, sorry par_l0_is_l1 l0 1 par_l0_is_l1 l0 2 par_linebuffer_files ### bug #48658: --linebuffer --files -par_linebuffer_files 20 +par_linebuffer_files 21 par_link_files_as_only_arg bug #50685: single ::::+ does not work par_link_files_as_only_arg 1 1 1 par_link_files_as_only_arg 2 2 2 @@ -692,8 +692,9 @@ par_pipe_tag_v foo cat par_pipe_tag_v foo 1 par_pipe_tag_v foo 2 par_pipe_tag_v foo 3 +par_pipe_tag_v parallel: Warning: --files do not work if $TMPDIR contains newline. par_pipe_tag_v foo /tmp/parallel-local-0.3s-tmp/ -par_pipe_tag_v > par_parset /tmp/parallel-local-10s-tmp/ -par_parset /tmp/bug42363; parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:'; rm /tmp/bug42363 - 14 14 33 '/tmp/parallel-local22-tmp/'$'\n'' &1 >/dev/null | cut -f 5-7 | sort @@ -182,6 +183,7 @@ Send Receive Exitval 0 332 0 0 336 0 Send Receive Exitval +parallel: Warning: --files do not work if $TMPDIR contains newline. echo '### --pipe' ### --pipe seq 1000 | parallel --joblog /dev/stderr --block 1111 --pipe pv -qL300 2>&1 >/dev/null | cut -f 5-7 | sort @@ -222,6 +224,7 @@ Send Receive Exitval 1108 1108 0 569 569 0 Send Receive Exitval +parallel: Warning: --files do not work if $TMPDIR contains newline. echo '### --files --pipe --tag' ### --files --pipe --tag seq 1000 | parallel --joblog /dev/stderr --block 1111 --files --pipe --tag pv -qL300 2>&1 >/dev/null | cut -f 5-7 | sort @@ -230,6 +233,7 @@ Send Receive Exitval 1108 1108 0 569 569 0 Send Receive Exitval +parallel: Warning: --files do not work if $TMPDIR contains newline. echo '### --pipe --round-robin' ### --pipe --round-robin seq 1000 | parallel --joblog /dev/stderr --block 1111 -j2 --pipe --round-robin pv -qL300 2>&1 >/dev/null | cut -f 5-7 | sort diff --git a/testsuite/wanted-results/parallel-local7 b/testsuite/wanted-results/parallel-local7 index 191184e3..c20144e1 100644 --- a/testsuite/wanted-results/parallel-local7 +++ b/testsuite/wanted-results/parallel-local7 @@ -2,15 +2,15 @@ echo '### tmux-1.9' ### tmux-1.9 seq 510 512 | PARALLEL_TMUX=tmux-1.9 par_tmux See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/ - = 523) at input 0: 2001 @@ -66,13 +66,13 @@ echo '### tmux-1.9 0..255 ascii' ### tmux-1.9 0..255 ascii perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux --timeout 5 echo | par_tmux_filter; echo $? See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/ - =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-tmp/ - = -1264) at input 0: 140 seq 140 260 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/ - = -1264) at input 0: 560 seq 560 850 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index 9aad6f37..1343ebef 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -151,7 +151,7 @@ num8 tsv-file.tsv foo /tmp/parallel-tutorial-tmp/ -