diff --git a/src/parallel b/src/parallel index 839f85a5..90763865 100755 --- a/src/parallel +++ b/src/parallel @@ -118,7 +118,7 @@ if($opt::filter_hosts and (@opt::sshlogin or @opt::sshloginfile)) { my ($fh, $tmpfile) = ::tempfile(SUFFIX => ".ssh"); print $fh @cores, @cpus, @maxline, @echo; close $fh; - my $cmd = "cat $tmpfile | $0 -j0 -s 1000 --joblog - --plain --tag --tagstring {1} --colsep '\t' -k eval {2} 2>/dev/null"; + my $cmd = "cat $tmpfile | $0 -j0 --timeout 5 -s 1000 --joblog - --plain --tag --tagstring {1} --colsep '\t' -k eval {2} 2>/dev/null"; ::debug($cmd."\n"); open(my $host_fh, "-|", $cmd) || ::die_bug("parallel host check: $cmd"); my (%ncores, %ncpus, %time_to_login, %maxlen, %echo); @@ -135,18 +135,21 @@ if($opt::filter_hosts and (@opt::sshlogin or @opt::sshloginfile)) { # Get server from: eval true server\; $col[8] =~ /eval true..([^;]+).;/ or ::die_bug("col8 does not contain host: $col[8]"); my $host = $1; - if($col[6] eq "255") { - # signal == 255: ssh failed + $host =~ s/\\//g; + $Global::host{$host} or next; + if($col[6] eq "255" or $col[7] eq "15") { + # exit == 255 or signal == 15: ssh failed # Remove sshlogin - delete $Global::host{$col[1]}; + ::debug("--filtered $host\n"); + delete $Global::host{$host}; } elsif($col[6] eq "127") { # signal == 127: parallel not installed remote # Set ncpus and ncores = 1 ::warning("Could not figure out ", - "number of cpus on $col[1]. Using 1.\n"); - $ncores{$col[1]} = 1; - $ncpus{$col[1]} = 1; - $maxlen{$col[1]} = Limits::Command::max_length(); + "number of cpus on $host. Using 1.\n"); + $ncores{$host} = 1; + $ncpus{$host} = 1; + $maxlen{$host} = Limits::Command::max_length(); } elsif($col[0] =~ /^\d+$/ and $Global::host{$host}) { # Remember how log it took to log in # 2 : 1372607672.654 0.675 0 0 0 0 eval true\ m\;ssh\ m\ echo @@ -728,7 +731,7 @@ sub get_options_from_array { sub parse_options { # Returns: N/A # Defaults: - $Global::version = 20130815; + $Global::version = 20130816; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -1852,8 +1855,12 @@ sub read_sshloginfile { $close = 0; } else { if(not open($in_fh, "<", $file)) { - ::error("Cannot open $file.\n"); - ::wait_and_exit(255); + # Try the filename + if(not open($in_fh, "<", $ENV{'HOME'}."/.parallel/".$file)) { + # Try prepending ~/.parallel + ::error("Cannot open $file.\n"); + ::wait_and_exit(255); + } } } while(<$in_fh>) { @@ -3831,9 +3838,9 @@ sub runtime { sub endtime { # Returns: # UNIX-timestamp this job ended - # now if not ended yet + # 0 if not ended yet my $self = shift; - return ($self->{'endtime'} || ::now()); + return ($self->{'endtime'} || 0); } sub set_endtime { @@ -3853,7 +3860,7 @@ sub kill { my $self = shift; my @family_pids = $self->family_pids(); # Record this jobs as failed - $self->set_exitstatus(1); + $self->set_exitstatus(-1); # Send two TERMs to give time to clean up for my $signal ("TERM", "TERM", "KILL") { my $alive = 0; @@ -3864,8 +3871,15 @@ sub kill { $alive = 1; } } - # Wait 200 ms between TERMs - but only if any pids are alive - if($signal eq "TERM" and $alive) { ::usleep(200); } + + if($signal eq "TERM" and $alive) { + # Wait up to 200 ms between TERMs - but only if any pids are alive + my $sleep = 1; + for (my $sleepsum = 0; kill 0, $family_pids[0] and $sleepsum < 200; + $sleepsum += $sleep) { + $sleep = ::reap_usleep($sleep); + } + } } } @@ -5895,7 +5909,11 @@ sub process_timeouts { # $self->{'queue'} is sorted by start time while (@{$self->{'queue'}}) { my $job = $self->{'queue'}[0]; - if($job->timedout($self->{'delta_time'})) { + if($job->endtime()) { + # Job already finished. No need to timeout the job + # This could be because of --keep-order + shift @{$self->{'queue'}}; + } elsif($job->timedout($self->{'delta_time'})) { # Need to shift off queue before kill # because kill calls usleep that calls process_timeouts shift @{$self->{'queue'}}; diff --git a/testsuite/tests-to-run/parallel-local-ssh1.sh b/testsuite/tests-to-run/parallel-local-ssh1.sh index 1f2a1bd0..f77b4338 100644 --- a/testsuite/tests-to-run/parallel-local-ssh1.sh +++ b/testsuite/tests-to-run/parallel-local-ssh1.sh @@ -9,4 +9,7 @@ echo '### --env _' echo '### --env _ with explicit mentioning of normally ignored var $PATH' fUbAr="OK FUBAR" parallel -S csh@lo --env PATH,_ echo '$fUbAr $PATH' ::: test +echo '### --filter-hosts --slf <()' + parallel --nonall --filter-hosts --slf <(echo localhost) echo OK + EOF diff --git a/testsuite/tests-to-run/parallel-local23.sh b/testsuite/tests-to-run/parallel-local23.sh index 2d9f24d7..44950a70 100755 --- a/testsuite/tests-to-run/parallel-local23.sh +++ b/testsuite/tests-to-run/parallel-local23.sh @@ -27,8 +27,11 @@ echo '### bug #39787: --xargs broken' perl -e 'for(1..30000){print "$_\n"}' | nice parallel --xargs -k echo | perl -ne 'print length $_,"\n"' echo '### --delay should grow by 2 sec per arg' -stdout /usr/bin/time -f %e parallel --delay 2 true ::: 1 2 | perl -ne '$_ >= 2 and $_ <= 4 and print "OK\n"' -stdout /usr/bin/time -f %e parallel --delay 2 true ::: 1 2 3 | perl -ne '$_ >= 4 and $_ <= 6 and print "OK\n"' +stdout /usr/bin/time -f %e parallel --delay 2 true ::: 1 2 | perl -ne '$_ >= 2 and $_ <= 5 and print "OK\n"' +stdout /usr/bin/time -f %e parallel --delay 2 true ::: 1 2 3 | perl -ne '$_ >= 4 and $_ <= 7 and print "OK\n"' + +echo '### Exit value should not be affected if an earlier job times out' + parallel -j2 --timeout 1 --joblog - -k ::: "sleep 10" "exit 255" | field 7 EOF diff --git a/testsuite/tests-to-run/parallel-local6.sh b/testsuite/tests-to-run/parallel-local6.sh index 55e1c857..acf13257 100755 --- a/testsuite/tests-to-run/parallel-local6.sh +++ b/testsuite/tests-to-run/parallel-local6.sh @@ -5,7 +5,7 @@ parallel --joblog /tmp/parallel_joblog_exitval 'sleep {} && echo sleep was not k parallel --joblog /tmp/parallel_joblog_signal 'sleep {}' ::: 100 2>/dev/null & sleep 1 killall -6 sleep -sleep 1.5 +sleep 2 grep -q 134 /tmp/parallel_joblog_exitval && echo exitval OK grep -q '[^0-9]6[^0-9]' /tmp/parallel_joblog_signal && echo signal OK diff --git a/testsuite/tests-to-run/parallel-polarhome.sh b/testsuite/tests-to-run/parallel-polarhome.sh index d4a0a55e..5fc7317a 100644 --- a/testsuite/tests-to-run/parallel-polarhome.sh +++ b/testsuite/tests-to-run/parallel-polarhome.sh @@ -2,9 +2,9 @@ P_ALL="vax freebsd solaris openbsd netbsd debian alpha aix redhat hpux ultrix qnx irix tru64 openindiana suse openstep mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi" P_NOTWORKING="vax alpha openstep" -P_NOTWORKING_YET="ultrix tru64" +P_NOTWORKING_YET="ultrix tru64 irix" -P_WORKING="freebsd solaris openbsd netbsd debian aix redhat hpux qnx irix openindiana suse mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi" +P_WORKING="freebsd solaris openbsd netbsd debian aix redhat hpux qnx openindiana suse mandriva ubuntu scosysv unixware dragonfly centos miros hurd minix raspberrypi" P="$P_WORKING" POLAR=`parallel -k echo {}.polarhome.com ::: $P` diff --git a/testsuite/tests-to-run/parallel-remote1.sh b/testsuite/tests-to-run/parallel-remote1.sh index 7b9a0622..718e6d3a 100644 --- a/testsuite/tests-to-run/parallel-remote1.sh +++ b/testsuite/tests-to-run/parallel-remote1.sh @@ -11,3 +11,6 @@ echo 'ssh "$@"; echo "$@" >>/tmp/myssh2-run' >/tmp/myssh2 chmod 755 /tmp/myssh1 /tmp/myssh2 seq 1 100 | parallel --sshlogin "/tmp/myssh1 $SSHLOGIN1, /tmp/myssh2 $SSHLOGIN2" \ -j10000% -k echo + +echo '### --filter-hosts - OK, non-such-user, connection refused, wrong host' + parallel --nonall --filter-hosts -S localhost,NoUser@localhost,154.54.72.206,"ssh 5.5.5.5" hostname diff --git a/testsuite/tests-to-run/test17.sh b/testsuite/tests-to-run/test17.sh index a7e76928..abee4136 100755 --- a/testsuite/tests-to-run/test17.sh +++ b/testsuite/tests-to-run/test17.sh @@ -5,7 +5,8 @@ SERVER2=parallel-server2 SSHLOGIN1=parallel@$SERVER1 SSHLOGIN2=parallel@$SERVER2 -export PARALLEL=-j8 +export PARALLEL=-j0 +#export PARALLEL="--sshdelay 0.3" # Make sure sort order is the same export LANG=C @@ -14,7 +15,8 @@ echo '### Test --transfer --return --cleanup' rm -rf /tmp/parallel.file* stdout ssh $SSHLOGIN1 rm -rf 'tmp/parallel.file*' '/tmp/parallel.file*' stdout ssh $SSHLOGIN2 rm -rf 'tmp/parallel.file*' '/tmp/parallel.file*' -(seq 1 3;echo '>fire';seq 5 10; /bin/echo ' : & ) \n*.jpg'; echo '/./sub dir'; seq 13 20) >/tmp/test17 +# (seq 1 3;echo '>fire';seq 5 10; /bin/echo ' : & ) \n*.jpg'; echo '/./sub dir'; seq 13 20) >/tmp/test17 +(echo '>fire';/bin/echo ' : & ) \n*.jpg'; echo '/./sub dir') >/tmp/test17 echo '# Create some weirdly files in /tmp' mkdir -p /tmp/parallel.file cat /tmp/test17 | parallel -k /bin/echo file{} '>'/tmp/parallel.file{}.file diff --git a/testsuite/wanted-results/parallel-local-ssh1 b/testsuite/wanted-results/parallel-local-ssh1 index d5852d90..5278c302 100644 --- a/testsuite/wanted-results/parallel-local-ssh1 +++ b/testsuite/wanted-results/parallel-local-ssh1 @@ -10,3 +10,5 @@ Block_end OK FUBAR /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games test ### --env _ with explicit mentioning of normally ignored var $PATH OK FUBAR /home/tange/bin:/home/tange/bin:/home/tange/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/sbin:/usr/sbin:/home/tange/terminals/data-import:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin:/home/tange/bin:/sbin:/usr/sbin:/home/tange/terminals/data-import:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin:/home/tange/bin test +### --filter-hosts --slf <() +OK diff --git a/testsuite/wanted-results/parallel-local1 b/testsuite/wanted-results/parallel-local1 index 33c1fe0f..8ebee8b7 100644 --- a/testsuite/wanted-results/parallel-local1 +++ b/testsuite/wanted-results/parallel-local1 @@ -265,7 +265,7 @@ o 1 1 130001 1 1 130001 1 1 130001 -parallel: Command line too long (260009 >= 131071) at number 9: 10... +parallel: Error: Command line too long (260009 >= 131071) at number 9: 10... ### bug #37042: -J foo is taken from the whole command line - not just the part before the command foo tag_with_foo a tag_with_a diff --git a/testsuite/wanted-results/parallel-local13 b/testsuite/wanted-results/parallel-local13 index 0055e266..fd73f9a2 100644 --- a/testsuite/wanted-results/parallel-local13 +++ b/testsuite/wanted-results/parallel-local13 @@ -71,7 +71,7 @@ y ### -i -s26 -0 echo from \{\} to x{}y < items-0.xi xargs: argument list too long from one to xoney -parallel: Command line too long (42 >= 26) at number 2: +parallel: Error: Command line too long (42 >= 26) at number 2: ... ### -l -0 echo < ldata-0.xi 1 22 333 4444 @@ -808,7 +808,7 @@ with 'single quotes' as well. /src/gnu/autoconf-1.11/texinfo.tex ### -s6 echo < files.xi xargs: argument line too long -parallel: Command line too long (27 >= 6) at number 1: /src/gnu/autoconf-1.11... +parallel: Error: Command line too long (27 >= 6) at number 1: /src/gnu/autoconf-1.11... ### -iARG -s86 echo ARG is xARGx < files.xi /src/gnu/autoconf-1.11 is x/src/gnu/autoconf-1.11x /src/gnu/autoconf-1.11/README is x/src/gnu/autoconf-1.11/READMEx @@ -974,7 +974,7 @@ from: can't read /var/mail/{} ### -i -s26 echo from \{\} to x{}y < items.xi xargs: argument list too long from dumb to xdumby -parallel: Command line too long (36 >= 26) at number 1: ... +parallel: Error: Command line too long (36 >= 26) at number 1: ... ### -i__ echo FIRST __ IS OK < quotes.xi FIRST this is IS OK FIRST quoted stuff IS OK diff --git a/testsuite/wanted-results/parallel-local23 b/testsuite/wanted-results/parallel-local23 index f8d41e44..a0efb091 100644 --- a/testsuite/wanted-results/parallel-local23 +++ b/testsuite/wanted-results/parallel-local23 @@ -48,3 +48,7 @@ O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ### --delay should grow by 2 sec per arg OK OK +### Exit value should not be affected if an earlier job times out +Exitval +-1 +255 diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index 50c09554..3cd53b04 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -9,7 +9,6 @@ copy_to_host aix.polarhome.com copy_to_host redhat.polarhome.com copy_to_host hpux.polarhome.com copy_to_host qnx.polarhome.com -copy_to_host irix.polarhome.com copy_to_host openindiana.polarhome.com copy_to_host suse.polarhome.com copy_to_host mandriva.polarhome.com @@ -33,7 +32,6 @@ redhat.polarhome.com Works on redhat.polarhome.com hpux.polarhome.com Works on hpux.polarhome.com qnx.polarhome.com Works on qnx.polarhome.com qnx.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1. -irix.polarhome.com Unknown open() mode '>&=' at bin/parallel line 1346. openindiana.polarhome.com Works on openindiana.polarhome.com openindiana.polarhome.com parallel: Warning: Cannot figure out number of CPU cores. Using 1. suse.polarhome.com Works on suse.polarhome.com diff --git a/testsuite/wanted-results/parallel-remote1 b/testsuite/wanted-results/parallel-remote1 index beb653df..8f93cac9 100644 --- a/testsuite/wanted-results/parallel-remote1 +++ b/testsuite/wanted-results/parallel-remote1 @@ -99,3 +99,5 @@ 98 99 100 +### --filter-hosts - OK, non-such-user, connection refused, wrong host +hk diff --git a/testsuite/wanted-results/test15 b/testsuite/wanted-results/test15 index b4455217..9327271e 100644 --- a/testsuite/wanted-results/test15 +++ b/testsuite/wanted-results/test15 @@ -83,14 +83,14 @@ a_b c d e ### test too long args -parallel: Command line too long (1000005 >= 131071) at number 1: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... +parallel: Error: Command line too long (1000005 >= 131071) at number 1: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... xargs: argument line too long 1 2 3 4 5 6 7 8 9 10 -parallel: Command line too long (1000007 >= 10) at number 5: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... +parallel: Error: Command line too long (1000007 >= 10) at number 5: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... 1 2 3 4 5 6 @@ -102,20 +102,20 @@ xargs: argument line too long 5 6 7 8 9 10 -parallel: Command line too long (1000007 >= 10) at number 5: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... +parallel: Error: Command line too long (1000007 >= 10) at number 5: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz... ### Test -x 1 2 3 4 5 6 7 8 9 10 -parallel: Command line too long (10 >= 10) at number 5: 12345... +parallel: Error: Command line too long (10 >= 10) at number 5: 12345... 1 2 3 4 5 6 7 8 9 10 -parallel: Command line too long (10 >= 10) at number 5: 12345... +parallel: Error: Command line too long (10 >= 10) at number 5: 12345... 1 2 3 4 5 6 diff --git a/testsuite/wanted-results/test17 b/testsuite/wanted-results/test17 index 7e492aa3..fcde2d56 100644 --- a/testsuite/wanted-results/test17 +++ b/testsuite/wanted-results/test17 @@ -1,95 +1,27 @@ ### Test --transfer --return --cleanup # Create some weirdly files in /tmp ### --transfer - abspath -file1 -file2 -file3 file>fire -file5 -file6 -file7 -file8 -file9 -file10 file : & ) \n*.jpg file/./sub dir -file13 -file14 -file15 -file16 -file17 -file18 -file19 -file20 good if no file ls: /tmp/parallel.file*: No such file or directory ### --transfer - relpath -file1 -file2 -file3 file>fire -file5 -file6 -file7 -file8 -file9 -file10 file : & ) \n*.jpg file/./sub dir -file13 -file14 -file15 -file16 -file17 -file18 -file19 -file20 good if no file ls: tmp/parallel.file*: No such file or directory ### --transfer --cleanup - abspath -file1 -file2 -file3 file>fire -file5 -file6 -file7 -file8 -file9 -file10 file : & ) \n*.jpg file/./sub dir -file13 -file14 -file15 -file16 -file17 -file18 -file19 -file20 good if no file ls: /tmp/parallel.file*: No such file or directory ### --transfer --cleanup - relpath -file1 -file2 -file3 file>fire -file5 -file6 -file7 -file8 -file9 -file10 file : & ) \n*.jpg file/./sub dir -file13 -file14 -file15 -file16 -file17 -file18 -file19 -file20 good if no file ls: tmp/parallel.file*: No such file or directory OK @@ -98,84 +30,16 @@ OK ### --return - abspath /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.out -/tmp/parallel.file10.out -/tmp/parallel.file13.out -/tmp/parallel.file14.out -/tmp/parallel.file15.out -/tmp/parallel.file16.out -/tmp/parallel.file17.out -/tmp/parallel.file18.out -/tmp/parallel.file19.out -/tmp/parallel.file2.out -/tmp/parallel.file20.out -/tmp/parallel.file3.out -/tmp/parallel.file5.out -/tmp/parallel.file6.out -/tmp/parallel.file7.out -/tmp/parallel.file8.out -/tmp/parallel.file9.out /tmp/parallel.file>fire.out ### --return - relpath tmp/parallel.file : & ) \n*.jpg.out tmp/parallel.file/sub dir.out -tmp/parallel.file1.out -tmp/parallel.file10.out -tmp/parallel.file13.out -tmp/parallel.file14.out -tmp/parallel.file15.out -tmp/parallel.file16.out -tmp/parallel.file17.out -tmp/parallel.file18.out -tmp/parallel.file19.out -tmp/parallel.file2.out -tmp/parallel.file20.out -tmp/parallel.file3.out -tmp/parallel.file5.out -tmp/parallel.file6.out -tmp/parallel.file7.out -tmp/parallel.file8.out -tmp/parallel.file9.out tmp/parallel.file>fire.out ### --return - multiple files tmp/parallel.file : & ) \n*.jpg.file.done tmp/parallel.file : & ) \n*.jpg.out tmp/parallel.file/sub dir.file.done tmp/parallel.file/sub dir.out -tmp/parallel.file1.file.done -tmp/parallel.file1.out -tmp/parallel.file10.file.done -tmp/parallel.file10.out -tmp/parallel.file13.file.done -tmp/parallel.file13.out -tmp/parallel.file14.file.done -tmp/parallel.file14.out -tmp/parallel.file15.file.done -tmp/parallel.file15.out -tmp/parallel.file16.file.done -tmp/parallel.file16.out -tmp/parallel.file17.file.done -tmp/parallel.file17.out -tmp/parallel.file18.file.done -tmp/parallel.file18.out -tmp/parallel.file19.file.done -tmp/parallel.file19.out -tmp/parallel.file2.file.done -tmp/parallel.file2.out -tmp/parallel.file20.file.done -tmp/parallel.file20.out -tmp/parallel.file3.file.done -tmp/parallel.file3.out -tmp/parallel.file5.file.done -tmp/parallel.file5.out -tmp/parallel.file6.file.done -tmp/parallel.file6.out -tmp/parallel.file7.file.done -tmp/parallel.file7.out -tmp/parallel.file8.file.done -tmp/parallel.file8.out -tmp/parallel.file9.file.done -tmp/parallel.file9.out tmp/parallel.file>fire.file.done tmp/parallel.file>fire.out ### --return --cleanup - abspath @@ -183,40 +47,6 @@ tmp/parallel.file>fire.out /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out good if no file @@ -225,40 +55,6 @@ tmp/parallel.file : & ) \n*.jpg.file.done tmp/parallel.file : & ) \n*.jpg.out tmp/parallel.file/sub dir.file.done tmp/parallel.file/sub dir.out -tmp/parallel.file1.file.done -tmp/parallel.file1.out -tmp/parallel.file10.file.done -tmp/parallel.file10.out -tmp/parallel.file13.file.done -tmp/parallel.file13.out -tmp/parallel.file14.file.done -tmp/parallel.file14.out -tmp/parallel.file15.file.done -tmp/parallel.file15.out -tmp/parallel.file16.file.done -tmp/parallel.file16.out -tmp/parallel.file17.file.done -tmp/parallel.file17.out -tmp/parallel.file18.file.done -tmp/parallel.file18.out -tmp/parallel.file19.file.done -tmp/parallel.file19.out -tmp/parallel.file2.file.done -tmp/parallel.file2.out -tmp/parallel.file20.file.done -tmp/parallel.file20.out -tmp/parallel.file3.file.done -tmp/parallel.file3.out -tmp/parallel.file5.file.done -tmp/parallel.file5.out -tmp/parallel.file6.file.done -tmp/parallel.file6.out -tmp/parallel.file7.file.done -tmp/parallel.file7.out -tmp/parallel.file8.file.done -tmp/parallel.file8.out -tmp/parallel.file9.file.done -tmp/parallel.file9.out tmp/parallel.file>fire.file.done tmp/parallel.file>fire.out good if no file @@ -269,40 +65,6 @@ OK /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out good if no file @@ -313,40 +75,6 @@ OK /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out good if no file @@ -357,40 +85,6 @@ OK /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out good if no file @@ -403,40 +97,6 @@ OK /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out ls: tmp/parallel.file*: No such file or directory @@ -448,40 +108,6 @@ OK /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out good if no file @@ -492,40 +118,6 @@ tmp/parallel.file : & ) \n*.jpg.file.done tmp/parallel.file : & ) \n*.jpg.out tmp/parallel.file/sub dir.file.done tmp/parallel.file/sub dir.out -tmp/parallel.file1.file.done -tmp/parallel.file1.out -tmp/parallel.file10.file.done -tmp/parallel.file10.out -tmp/parallel.file13.file.done -tmp/parallel.file13.out -tmp/parallel.file14.file.done -tmp/parallel.file14.out -tmp/parallel.file15.file.done -tmp/parallel.file15.out -tmp/parallel.file16.file.done -tmp/parallel.file16.out -tmp/parallel.file17.file.done -tmp/parallel.file17.out -tmp/parallel.file18.file.done -tmp/parallel.file18.out -tmp/parallel.file19.file.done -tmp/parallel.file19.out -tmp/parallel.file2.file.done -tmp/parallel.file2.out -tmp/parallel.file20.file.done -tmp/parallel.file20.out -tmp/parallel.file3.file.done -tmp/parallel.file3.out -tmp/parallel.file5.file.done -tmp/parallel.file5.out -tmp/parallel.file6.file.done -tmp/parallel.file6.out -tmp/parallel.file7.file.done -tmp/parallel.file7.out -tmp/parallel.file8.file.done -tmp/parallel.file8.out -tmp/parallel.file9.file.done -tmp/parallel.file9.out tmp/parallel.file>fire.file.done tmp/parallel.file>fire.out good if no file @@ -538,103 +130,18 @@ OK /tmp/parallel.file : & ) \n*.jpg.out /tmp/parallel.file/sub dir.file.done /tmp/parallel.file/sub dir.out -/tmp/parallel.file1.file.done -/tmp/parallel.file1.out -/tmp/parallel.file10.file.done -/tmp/parallel.file10.out -/tmp/parallel.file13.file.done -/tmp/parallel.file13.out -/tmp/parallel.file14.file.done -/tmp/parallel.file14.out -/tmp/parallel.file15.file.done -/tmp/parallel.file15.out -/tmp/parallel.file16.file.done -/tmp/parallel.file16.out -/tmp/parallel.file17.file.done -/tmp/parallel.file17.out -/tmp/parallel.file18.file.done -/tmp/parallel.file18.out -/tmp/parallel.file19.file.done -/tmp/parallel.file19.out -/tmp/parallel.file2.file.done -/tmp/parallel.file2.out -/tmp/parallel.file20.file.done -/tmp/parallel.file20.out -/tmp/parallel.file3.file.done -/tmp/parallel.file3.out -/tmp/parallel.file5.file.done -/tmp/parallel.file5.out -/tmp/parallel.file6.file.done -/tmp/parallel.file6.out -/tmp/parallel.file7.file.done -/tmp/parallel.file7.out -/tmp/parallel.file8.file.done -/tmp/parallel.file8.out -/tmp/parallel.file9.file.done -/tmp/parallel.file9.out /tmp/parallel.file>fire.file.done /tmp/parallel.file>fire.out good if no file ls: /tmp/parallel.file*: No such file or directory OK ### --transfer --cleanup - multiple argument files -cat /tmp/parallel.file\>fire.file tmp/parallel.file1.file +cat /tmp/parallel.file\>fire.file tmp/parallel.file\>fire.file file>fire -file1 -cat /tmp/parallel.file9.file tmp/parallel.file2.file -file9 -file2 -cat /tmp/parallel.file8.file tmp/parallel.file3.file -file8 -file3 -cat /tmp/parallel.file7.file tmp/parallel.file\>fire.file -file7 file>fire -cat /tmp/parallel.file6.file tmp/parallel.file5.file -file6 -file5 -cat /tmp/parallel.file5.file tmp/parallel.file6.file -file5 -file6 -cat /tmp/parallel.file3.file tmp/parallel.file7.file -file3 -file7 -cat /tmp/parallel.file20.file tmp/parallel.file8.file -file20 -file8 -cat /tmp/parallel.file2.file tmp/parallel.file9.file -file2 -file9 -cat /tmp/parallel.file19.file tmp/parallel.file10.file -file19 -file10 -cat /tmp/parallel.file18.file tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file -file18 -file : & ) \n*.jpg -cat /tmp/parallel.file17.file tmp/parallel.file/./sub\ dir.file -file17 +cat /tmp/parallel.file/./sub\ dir.file tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file file/./sub dir -cat /tmp/parallel.file16.file tmp/parallel.file13.file -file16 -file13 -cat /tmp/parallel.file15.file tmp/parallel.file14.file -file15 -file14 -cat /tmp/parallel.file14.file tmp/parallel.file15.file -file14 -file15 -cat /tmp/parallel.file13.file tmp/parallel.file16.file -file13 -file16 -cat /tmp/parallel.file10.file tmp/parallel.file17.file -file10 -file17 -cat /tmp/parallel.file1.file tmp/parallel.file18.file -file1 -file18 -cat /tmp/parallel.file/./sub\ dir.file tmp/parallel.file19.file -file/./sub dir -file19 -cat /tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file tmp/parallel.file20.file file : & ) \n*.jpg -file20 +cat /tmp/parallel.file\ :\ \&\ \)\ \\n\*.jpg.file tmp/parallel.file/./sub\ dir.file +file : & ) \n*.jpg +file/./sub dir