From 4e3e0867b9a8345c8b11b68a211465f728944f79 Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Thu, 23 Apr 2015 00:15:23 +0200 Subject: [PATCH] parallel: Make tmpname() not create a file. That can cause permission problems if you ssh to a shared filesystem as a different user. --- README | 12 +-- configure.ac | 2 +- doc/release_new_version | 10 +-- src/niceload | 2 +- src/parallel | 85 +++++-------------- src/parallel_design.pod | 11 ++- src/sql | 2 +- testsuite/tests-to-run/parallel-local-ssh2.sh | 4 +- testsuite/tests-to-run/parallel-local22.sh | 6 +- testsuite/tests-to-run/parallel-local7.sh | 7 +- testsuite/tests-to-run/parallel-tutorial.sh | 9 +- testsuite/wanted-results/parallel-local-ssh2 | 38 ++++----- testsuite/wanted-results/parallel-local157 | 1 - testsuite/wanted-results/parallel-local22 | 42 ++++----- testsuite/wanted-results/parallel-local7 | 66 +++++++------- testsuite/wanted-results/parallel-tutorial | 6 +- 16 files changed, 133 insertions(+), 170 deletions(-) diff --git a/README b/README index 0cb356e3..884daecc 100644 --- a/README +++ b/README @@ -40,9 +40,9 @@ document. Full installation of GNU Parallel is as simple as: - wget http://ftpmirror.gnu.org/parallel/parallel-20150322.tar.bz2 - bzip2 -dc parallel-20150322.tar.bz2 | tar xvf - - cd parallel-20150322 + wget http://ftpmirror.gnu.org/parallel/parallel-20150422.tar.bz2 + bzip2 -dc parallel-20150422.tar.bz2 | tar xvf - + cd parallel-20150422 ./configure && make && make install @@ -51,9 +51,9 @@ Full installation of GNU Parallel is as simple as: If you are not root you can add ~/bin to your path and install in ~/bin and ~/share: - wget http://ftpmirror.gnu.org/parallel/parallel-20150322.tar.bz2 - bzip2 -dc parallel-20150322.tar.bz2 | tar xvf - - cd parallel-20150322 + wget http://ftpmirror.gnu.org/parallel/parallel-20150422.tar.bz2 + bzip2 -dc parallel-20150422.tar.bz2 | tar xvf - + cd parallel-20150422 ./configure --prefix=$HOME && make && make install Or if your system lacks 'make' you can simply copy src/parallel diff --git a/configure.ac b/configure.ac index 73fcbcbe..c334fda2 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20150322], [bug-parallel@gnu.org]) +AC_INIT([parallel], [20150422], [bug-parallel@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff --git a/doc/release_new_version b/doc/release_new_version index 3875d02c..97c0779b 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -222,11 +222,7 @@ Haiku of the month: New in this release: -* Security fix. An attacker on the local system could make you overwrite one of your own files with a single byte. The problem requires: - - - you using --compress or --tmux - - the attacker must figure out the randomly chosen file name - - the attacker to create a symlink within a time window of 15 ms +* Security fix. An attacker on the local system could make you overwrite one of your own files with a single byte. The problem exist when you use --compress or --tmux or --pipe or --cat or --fifo. The attacker must figure out the randomly chosen file name and create a symlink within a time window of 15 ms. * GNU Parallel now has a DOI: https://dx.doi.org/10.5281/zenodo.16303 @@ -248,6 +244,8 @@ New in this release: taxator-tk http://algbio.cs.uni-duesseldorf.de/webapps/wa-download/ (check it) +* << afventer svar fra Rachel >> GNU Parallel was used in: SISRS: Site Identification from Short Read Sequences https://github.com/rachelss/SISRS/ + * GNU Parallel was used in: landsat-gifworks https://github.com/KAPPS-/landsat-gifworks * GNU Parallel was used in: https://github.com/exascience/elprep @@ -258,8 +256,6 @@ taxator-tk http://algbio.cs.uni-duesseldorf.de/webapps/wa-download/ (check it) * GNU Parallel was used in: Rapid haploid SNP calling https://github.com/tseemann/snippy -* << afventer svar fra Rachel >> GNU Parallel was used in: SISRS: Site Identification from Short Read Sequences https://github.com/rachelss/SISRS/ - * Pictures and Metadata http://www.ozzy.no/2015/02/05/pictures-and-metadata/ * Task automation with bash and parallel https://biowize.wordpress.com/2015/03/23/task-automation-with-bash-and-parallel/ diff --git a/src/niceload b/src/niceload index 0138e5b0..4a00cb1c 100755 --- a/src/niceload +++ b/src/niceload @@ -24,7 +24,7 @@ use strict; use Getopt::Long; $Global::progname="niceload"; -$Global::version = 20150322; +$Global::version = 20150422; Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV) || die_usage(); if($opt::version) { diff --git a/src/parallel b/src/parallel index df0b1253..c31a0f8f 100755 --- a/src/parallel +++ b/src/parallel @@ -1053,7 +1053,7 @@ sub parse_options { sub init_globals { # Defaults: - $Global::version = 20150419; + $Global::version = 20150422; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -3341,43 +3341,25 @@ sub tmpfile { return ::tempfile(DIR=>$ENV{'TMPDIR'}, TEMPLATE => 'parXXXXX', @_); } +sub tmpname { + # Select a name that does not exist + # Do not create the file as that may cause problems + # if you ssh to localhost (or a shared file system) under a different name + my $name = shift; + my($tmpname); + do { + $tmpname = $ENV{'TMPDIR'}."/".$name. + join"", map { (0..9,"a".."z","A".."Z")[rand(62)] } (1..5); + } while($Global::unlink{$tmpname}++ or -e $tmpname); + return $tmpname; +} -{ - my($tmpdir,$fifo); - - sub tmpname { - # Select a name that does not exist - # Do not create the file as that may cause problems - # if you ssh to localhost (or a shared file system) under a different name - my $name = shift; - my($tmpname); - do { - $tmpname = $ENV{'TMPDIR'}."/".$name.int(rand(9999)); - } while($Global::unlink{$tmpname}++ or -e $tmpname); -# $Global::unlink{$tmpdir} ||= 1; - return $tmpname; - } - - sub rmtmpname { - # Clean up mktmpname - my $tmpname = shift; - delete $Global::unlink{$tmpname}; - unlink $tmpname; - rmdir $tmpdir; - } - - sub tmpfifo { - # Securely make a fifo by securely making a dir with a fifo in it - use POSIX qw(mkfifo); - my $tmpfifo = tmpname("fifo",@_); - mkfifo($tmpfifo,0600); - return $tmpfifo; - } - - sub rmtmpfifo { - # Clean up mktmpfifo - rmtmpname(@_); - } +sub tmpfifo { + # Securely make a fifo by securely making a dir with a fifo in it + use POSIX qw(mkfifo); + my $tmpfifo = tmpname("fif",@_); + mkfifo($tmpfifo,0600); + return $tmpfifo; } sub uniq { @@ -5554,7 +5536,7 @@ sub total_jobs { my $start = time; while($job = $self->get()) { if(time - $start > 10) { - ::warning("Reading all arguments takes longer than 10 seconds.\n"); + ::warning("Reading ".scalar(@queue)." arguments took longer than 10 seconds.\n"); $opt::eta && ::warning("Consider removing --eta.\n"); $opt::bar && ::warning("Consider removing --bar.\n"); $opt::shuf && ::warning("Consider removing --shuf.\n"); @@ -7001,10 +6983,7 @@ sub print_dryrun_and_verbose { my $tmux; $ENV{'TMUX'} ||= "tmux"; if(not $tmuxsocket) { -# $tmuxsocket = ::tmpname("tmux"); - (undef, $tmuxsocket) = ::tmpfile(SUFFIX => ".tms"); - $Global::unlink{$tmuxsocket} = 1; - unlink $tmuxsocket; + $tmuxsocket = ::tmpname("tms"); ::status("See output with: $ENV{'TMUX'} -S $tmuxsocket attach\n"); } # TODO sh -c wrapper for >& @@ -7595,7 +7574,7 @@ sub populate { if($opt::fifo) { # Generate a tempfile name that will be used as {} $Global::JobQueue->{'commandlinequeue'}->{'arg_queue'}-> - unget([Arg->new(::tmpname("fifo"))]); + unget([Arg->new(::tmpname("fif"))]); } while (not $self->{'arg_queue'}->empty()) { $next_arg = $self->{'arg_queue'}->get(); @@ -8324,22 +8303,6 @@ sub quote_args { return $self->{'command'}; } -sub size { - my $self = shift; - if(not $self->{'size'}) { - my @all_lines = (); - while(not $self->{'arg_queue'}->empty()) { - push @all_lines, CommandLine->new($self->{'command'}, - $self->{'arg_queue'}, - $self->{'context_replace'}, - $self->{'max_number_of_args'}); - } - $self->{'size'} = @all_lines; - $self->unget(@all_lines); - } - return $self->{'size'}; -} - package Limits::Command; @@ -8440,9 +8403,7 @@ sub tmux_length { } my @out; for my $l (1, 2020, 16320, 100000, $len) { - my ($fh, $tmpfile) = ::tmpfile(SUFFIX => ".tmb"); - close $fh; - unlink $tmpfile; + my $tmpfile = ::tmpname("tms"); my $tmuxcmd = "sh -c '".$ENV{'TMUX'}." -S $tmpfile new-session -d -n echo $l". ("x"x$l). " 2>/dev/null' && echo $l; rm -f $tmpfile"; push @out, qx{ $tmuxcmd }; diff --git a/src/parallel_design.pod b/src/parallel_design.pod index ed367019..5b19c4be 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -231,10 +231,15 @@ are added to the title to force it to be outside the limits. You can map the bad limits using: -perl -e 'map { $a=$_; print map { "$a,$_\n" } (1..17000) } (1..17000)' | shuf > ab; -cat ab | parallel --colsep , --tagstring '{1}{=$_="\t"=}{2}' -tmux -S /tmp/p{%}-'{=1 $_="O"x(rand(200)) =}' new-session -d -n '{=1 $_="O"x$_ =}' true'\ {=2 $_="O"x$_ =};echo $?;rm /tmp/p{%}-O*' +perl -e 'sub r { int(rand(shift)).($_[0] && "\t".r(@_)) } print map { r(@ARGV)."\n" } 1..10000' 1600 1500 90 | + perl -ane '$F[0]+$F[1]+$F[2] < 2037 and print ' | + parallel --colsep '\t' --tagstring '{1}\t{2}\t{3}' tmux -S /tmp/p{%}-'{=3 $_="O"x$_ =}' \ + new-session -d -n '{=1 $_="O"x$_ =}' true'\ {=2 $_="O"x$_ =};echo $?;rm -f /tmp/p{%}-O*' + +perl -e 'sub r { int(rand(shift)).($_[0] && "\t".r(@_)) } print map { r(@ARGV)."\n" } 1..10000' 17000 17000 90 | + parallel --colsep '\t' --tagstring '{1}\t{2}\t{3}' \ +tmux -S /tmp/p{%}-'{=3 $_="O"x$_ =}' new-session -d -n '{=1 $_="O"x$_ =}' true'\ {=2 $_="O"x$_ =};echo $?;rm /tmp/p{%}-O*' > value.csv 2>/dev/null R -e 'a<-read.table("value.csv");X11();plot(a[,1],a[,2],col=a[,3]+5,cex=0.1);Sys.sleep(1000)' diff --git a/src/sql b/src/sql index 0a271936..ff976e59 100755 --- a/src/sql +++ b/src/sql @@ -566,7 +566,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20150322; + $Global::version = 20150422; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/tests-to-run/parallel-local-ssh2.sh b/testsuite/tests-to-run/parallel-local-ssh2.sh index c4ce0f7c..ec173d53 100644 --- a/testsuite/tests-to-run/parallel-local-ssh2.sh +++ b/testsuite/tests-to-run/parallel-local-ssh2.sh @@ -45,8 +45,8 @@ echo '2bug #43358: shellshock breaks exporting functions using --env' echo '### bug #42999: --pipepart with remote does not work' seq 100 > /tmp/bug42999; chmod 600 /tmp/bug42999; parallel --sshdelay 0.3 --pipepart --block 31 -a /tmp/bug42999 -k -S parallel@lo wc; - parallel --sshdelay 0.2 --pipepart --block 31 -a /tmp/bug42999 -k --fifo -S parallel@lo wc | perl -pe 's:(/tmp\S+fifo)\d+:${1}0000:' ; - parallel --sshdelay 0.1 --pipepart --block 31 -a /tmp/bug42999 -k --cat -S parallel@lo wc | perl -pe 's:(/tmp\S+cat)\d+:${1}0000:' ; + parallel --sshdelay 0.2 --pipepart --block 31 -a /tmp/bug42999 -k --fifo -S parallel@lo wc | perl -pe 's:(/tmp\S+fif)\S+:${1}XXXXX:' ; + parallel --sshdelay 0.1 --pipepart --block 31 -a /tmp/bug42999 -k --cat -S parallel@lo wc | perl -pe 's:(/tmp\S+cat)\S+:${1}XXXXX:' ; rm /tmp/bug42999 echo '### --cat gives incorrect exit value in csh' diff --git a/testsuite/tests-to-run/parallel-local22.sh b/testsuite/tests-to-run/parallel-local22.sh index 19eeac18..5dc67ddd 100755 --- a/testsuite/tests-to-run/parallel-local22.sh +++ b/testsuite/tests-to-run/parallel-local22.sh @@ -46,8 +46,8 @@ echo '### bug #42041: Implement $PARALLEL_JOBSLOT' echo '### 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+fifo)\d+:${1}0000:'; - parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp\S+cat)\d+:${1}0000:'; + parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp\S+fif).....:${1}XXXXX:'; + parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp\S+cat).....:${1}XXXXX:'; rm /tmp/bug42363 echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile' @@ -120,7 +120,7 @@ echo '### added transfersize/returnsize to local jobs' echo '### --tmux test - check termination' perl -e 'map {printf "$_%o%c\n",$_,$_}1..255' | stdout parallel --tmux echo {} :::: - ::: a b | - perl -pe 's:(/tmp\S+par)......tms:$1XXXXX.tms:;' + perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;' EOF diff --git a/testsuite/tests-to-run/parallel-local7.sh b/testsuite/tests-to-run/parallel-local7.sh index 31d33f8c..7ed68ead 100755 --- a/testsuite/tests-to-run/parallel-local7.sh +++ b/testsuite/tests-to-run/parallel-local7.sh @@ -1,7 +1,8 @@ #!/bin/bash par_tmux_filter() { - perl -pe 's/par......tms/parXXXXX.tms/;s/ p\d+/pID/;' + # /tmp/parallel-local7/tmsOU2Ig + perl -pe 's:(/tmp\S+/tms).....:$1XXXXX:;s/ p\d+/pID/;' } export -f par_tmux_filter @@ -9,7 +10,7 @@ par_tmux() { (stdout parallel --timeout 3 --tmux --delay .3 echo '{}{=$_="\\"x$_=}'; echo $?) | par_tmux_filter } export -f par_tmux -cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1 +cat <<'EOF' | sed -e 's/;$/; /;s/$SERVER1/'$SERVER1'/;s/$SERVER2/'$SERVER2'/' | stdout parallel -vj0 --timeout 60 --retries 2 -k --joblog /tmp/jl-`basename $0` -L1 echo '### tmux1.9' seq 000 100 | TMUX=tmux1.9 par_tmux seq 100 200 | TMUX=tmux1.9 par_tmux @@ -72,4 +73,4 @@ echo '### Test critical lengths. Must not block' EOF -rm -f /tmp/paralocal7*; \ No newline at end of file +rm -f /tmp/paralocal7* diff --git a/testsuite/tests-to-run/parallel-tutorial.sh b/testsuite/tests-to-run/parallel-tutorial.sh index 82d0740a..f295b232 100644 --- a/testsuite/tests-to-run/parallel-tutorial.sh +++ b/testsuite/tests-to-run/parallel-tutorial.sh @@ -1,5 +1,6 @@ #!/bin/bash +find {$TMPDIR,/var/tmp,/tmp}/{fif,tms,par[^a]}* -mmin -10 2>/dev/null | parallel rm cd testsuite 2>/dev/null rm -rf tmp mkdir tmp @@ -23,9 +24,9 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/ stdout parallel -j7 -vd'\n\n' | perl -pe '$|=1; # --tmux - s:(/tmp\S+par).....(/tms):$1XXXXX$2:; + s:(/tmp\S+)(/tms).....:$1XXXXX$2:; # --files - s:(/tmp\S+par).....(....):$1XXXXX$2:; + s:(/tmp\S+par).....(\....):$1XXXXX$2:; # --eta --progress s/ETA.*//g; s/local:.*//g; # Sat Apr 4 11:55:40 CEST 2015 @@ -54,5 +55,5 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/ s/tried 2\n//; ' # 3+3 .par files (from --files), 1 .tms-file from tmux attach -ls /tmp/par*.par /var/tmp/par*.par /tmp/*.tms /tmp/*.tmx 2>/dev/null | wc -l -find /tmp/par*.par /var/tmp/par*.par /tmp/*.tms /tmp/*.tmx -mmin -10 2>/dev/null | parallel rm +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 | parallel rm diff --git a/testsuite/wanted-results/parallel-local-ssh2 b/testsuite/wanted-results/parallel-local-ssh2 index 56b9439c..a739c98e 100644 --- a/testsuite/wanted-results/parallel-local-ssh2 +++ b/testsuite/wanted-results/parallel-local-ssh2 @@ -44,7 +44,7 @@ shellshock-hardened to non-shellshock-hardened Function non-shellshock-hardened echo '### bug #42999: --pipepart with remote does not work' ### bug #42999: --pipepart with remote does not work - seq 100 > /tmp/bug42999; chmod 600 /tmp/bug42999; parallel --sshdelay 0.3 --pipepart --block 31 -a /tmp/bug42999 -k -S parallel@lo wc; parallel --sshdelay 0.2 --pipepart --block 31 -a /tmp/bug42999 -k --fifo -S parallel@lo wc | perl -pe 's:(/tmp\S+fifo)\d+:${1}0000:' ; parallel --sshdelay 0.1 --pipepart --block 31 -a /tmp/bug42999 -k --cat -S parallel@lo wc | perl -pe 's:(/tmp\S+cat)\d+:${1}0000:' ; rm /tmp/bug42999 + seq 100 > /tmp/bug42999; chmod 600 /tmp/bug42999; parallel --sshdelay 0.3 --pipepart --block 31 -a /tmp/bug42999 -k -S parallel@lo wc; parallel --sshdelay 0.2 --pipepart --block 31 -a /tmp/bug42999 -k --fifo -S parallel@lo wc | perl -pe 's:(/tmp\S+fif)\S+:${1}XXXXX:' ; parallel --sshdelay 0.1 --pipepart --block 31 -a /tmp/bug42999 -k --cat -S parallel@lo wc | perl -pe 's:(/tmp\S+cat)\S+:${1}XXXXX:' ; rm /tmp/bug42999 14 14 33 11 11 33 11 11 33 @@ -54,24 +54,24 @@ echo '### bug #42999: --pipepart with remote does not work' 11 11 33 11 11 33 9 9 28 - 14 14 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 11 11 33 /tmp/parallel-local-ssh2/fifo0000 - 9 9 28 /tmp/parallel-local-ssh2/fifo0000 -14 14 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 -11 11 33 /tmp/parallel-local-ssh2/cat0000 - 9 9 28 /tmp/parallel-local-ssh2/cat0000 + 14 14 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 11 11 33 /tmp/parallel-local-ssh2/fifXXXXX + 9 9 28 /tmp/parallel-local-ssh2/fifXXXXX +14 14 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX +11 11 33 /tmp/parallel-local-ssh2/catXXXXX + 9 9 28 /tmp/parallel-local-ssh2/catXXXXX echo '### --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' diff --git a/testsuite/wanted-results/parallel-local157 b/testsuite/wanted-results/parallel-local157 index 2a02d41c..e69de29b 100644 --- a/testsuite/wanted-results/parallel-local157 +++ b/testsuite/wanted-results/parallel-local157 @@ -1 +0,0 @@ -TEST diff --git a/testsuite/wanted-results/parallel-local22 b/testsuite/wanted-results/parallel-local22 index 9be34068..d6a5d841 100644 --- a/testsuite/wanted-results/parallel-local22 +++ b/testsuite/wanted-results/parallel-local22 @@ -43,25 +43,25 @@ echo '### bug #42041: Implement $PARALLEL_JOBSLOT' 2 echo '### 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+fifo)\d+:${1}0000:'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp\S+cat)\d+:${1}0000:'; rm /tmp/bug42363 - 14 14 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 11 11 33 /tmp/parallel-local22/fifo0000 - 9 9 28 /tmp/parallel-local22/fifo0000 -14 14 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 -11 11 33 /tmp/parallel-local22/cat0000 - 9 9 28 /tmp/parallel-local22/cat0000 + seq 100 > /tmp/bug42363; parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp\S+fif).....:${1}XXXXX:'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp\S+cat).....:${1}XXXXX:'; rm /tmp/bug42363 + 14 14 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 11 11 33 /tmp/parallel-local22/fifXXXXX + 9 9 28 /tmp/parallel-local22/fifXXXXX +14 14 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX +11 11 33 /tmp/parallel-local22/catXXXXX + 9 9 28 /tmp/parallel-local22/catXXXXX 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 parallel --pipepart -a /etc/passwd -L 1 should not be run @@ -353,5 +353,5 @@ Send Receive Exitval Send Receive Exitval echo '### --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+par)......tms:$1XXXXX.tms:;' -See output with: tmux -S /tmp/parallel-local22/parXXXXX.tms attach + 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 diff --git a/testsuite/wanted-results/parallel-local7 b/testsuite/wanted-results/parallel-local7 index 575c6272..31f70302 100644 --- a/testsuite/wanted-results/parallel-local7 +++ b/testsuite/wanted-results/parallel-local7 @@ -1,67 +1,67 @@ echo '### tmux1.9' ### tmux1.9 seq 000 100 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 100 200 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 200 300 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 300 400 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 400 500 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 500 600 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 600 700 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 700 800 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 800 900 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 900 1000 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1000 1100 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1100 1200 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1200 1300 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1300 1400 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1400 1500 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1500 1600 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1600 1700 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1700 1800 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1800 1900 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 1900 2000 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 2000 2018 | TMUX=tmux1.9 par_tmux -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 echo '### tmux1.9 fails' ### tmux1.9 fails @@ -80,19 +80,19 @@ parallel: Error: Command line too long (4053 >= 4047) at input 0: 2022 echo '### tmux1.8' ### tmux1.8 seq 1 50 | TMUX=tmux1.8 par_tmux -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 51 100 | TMUX=tmux1.8 par_tmux -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 101 150 | TMUX=tmux1.8 par_tmux -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 151 200 | TMUX=tmux1.8 par_tmux -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach 0 seq 201 231 | TMUX=tmux1.8 par_tmux -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach 0 echo '### tmux1.8 fails' ### tmux1.8 fails @@ -114,25 +114,25 @@ parallel: Error: Command line too long (480 >= 472) at input 0: 236 echo '### 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 $? -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach 0 echo '### 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 $? -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach 0 echo '### Test output ascii' ### Test output ascii rm -f /tmp/paralocal7*; perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_!=10 } 1..$_),"\n" } 1..255' | stdout parallel --tmux echo {}'>>/tmp/paralocal7{%}' | par_tmux_filter; sort /tmp/paralocal7* | md5sum -See output with: tmux -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux -S /tmp/parallel-local7/tmsXXXXX attach a7ee232967c8aab2edf227169e8cdce0 - echo '### 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 -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach seq 70 130 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach seq 280 425 | TMUX=tmux1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter -See output with: tmux1.8 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.8 -S /tmp/parallel-local7/tmsXXXXX attach seq 280 425 | TMUX=tmux1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter -See output with: tmux1.9 -S /tmp/parallel-local7/parXXXXX.tms attach +See output with: tmux1.9 -S /tmp/parallel-local7/tmsXXXXX attach diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index 0b14b072..a43af627 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -406,7 +406,7 @@ B D parallel --use-cpus-instead-of-cores -N0 sleep 1 :::: num8 seq 10 20 | parallel --tmux 'echo start {}; sleep {}; echo done {}' -See output with: tmux -S /tmp/parallel-tutorial/parXXXXX.tms attach +See output with: tmux -S /tmp/parallel-tutorialXXXXX/tms attach tmux -S /tmp/parXXXXX.tms attach no sessions parallel --delay 2.5 echo Starting {}\;date ::: 1 2 3 @@ -931,7 +931,7 @@ 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. parallel --version -GNU parallel 20150416 +GNU parallel 20150419 Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015 Ole Tange and Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later @@ -943,7 +943,7 @@ Web site: http://www.gnu.org/software/parallel When using programs that use GNU Parallel to process data for publication please cite as described in 'parallel --bibtex'. parallel --minversion 20130722 && echo Your version is at least 20130722. -20150416 +20150419 Your version is at least 20130722. parallel --bibtex Academic tradition requires you to cite works you base your article on.