parallel: If --results includes a replacement string, no tree structure with args will be generated.

This commit is contained in:
Ole Tange 2017-01-06 19:10:20 +01:00
parent 9f7eaa5f93
commit da705d03b6
31 changed files with 434 additions and 263 deletions

View file

@ -230,6 +230,8 @@ Haiku of the month:
-- Ole Tange -- Ole Tange
New in this release: New in this release:
http://www.slideshare.net/AmazonWebServices/aws-reinvent-2016-deep-dive-on-amazon-elastic-file-system-stg202
https://www.youtube.com/watch?v=PlTuJx4VnGw slide 45 of the deck and 30:16
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-212.pdf https://www2.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-212.pdf
http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0168456#references http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0168456#references
http://people.inf.ethz.ch/trayteld/papers/aerial/aerial.pdf http://people.inf.ethz.ch/trayteld/papers/aerial/aerial.pdf

View file

@ -6534,24 +6534,7 @@ sub openoutputfiles {
my ($outfhw, $errfhw, $outname, $errname); my ($outfhw, $errfhw, $outname, $errname);
if($opt::results and not $Global::csv) { if($opt::results and not $Global::csv) {
# Results as dir my $dir = $self->{'commandline'}->resultsdir();
my $args_as_dirname = $self->{'commandline'}->args_as_dirname();
# Output in: prefix/name1/val1/name2/val2/stdout
my $dir = $self->{'commandline'}->
replace_placeholders([$opt::results],0,0) .
"/".$args_as_dirname;
if(eval{ File::Path::mkpath($dir); }) {
# OK
} else {
# mkpath failed: Argument probably too long.
# Set $Global::max_file_length, which will keep the individual
# dir names shorter than the max length
max_file_name_length($opt::results);
$args_as_dirname = $self->{'commandline'}->args_as_dirname();
# prefix/name1/val1/name2/val2/
$dir = $opt::results."/".$args_as_dirname;
File::Path::mkpath($dir);
}
# prefix/name1/val1/name2/val2/seq # prefix/name1/val1/name2/val2/seq
my $seqname = "$dir/seq"; my $seqname = "$dir/seq";
my $seqfhw; my $seqfhw;
@ -6722,43 +6705,7 @@ sub filter_through_compress {
} }
} }
sub max_file_name_length {
# Figure out the max length of a subdir
# TODO and the max total length
# Ext4 = 255,130816
# Uses:
# $Global::max_file_length is set
# Returns:
# $Global::max_file_length
my $testdir = shift;
my $upper = 8_000_000;
# Dir length of 8 chars is supported everywhere
my $len = 8;
my $dir = "x"x$len;
do {
rmdir($testdir."/".$dir);
$len *= 16;
$dir = "x"x$len;
} while ($len < $upper and mkdir $testdir."/".$dir);
# Then search for the actual max length between $len/16 and $len
my $min = $len/16;
my $max = $len;
while($max-$min > 5) {
# If we are within 5 chars of the exact value:
# it is not worth the extra time to find the exact value
my $test = int(($min+$max)/2);
$dir = "x"x$test;
if(mkdir $testdir."/".$dir) {
rmdir($testdir."/".$dir);
$min = $test;
} else {
$max = $test;
}
}
$Global::max_file_length = $min;
return $min;
}
sub set_fh { sub set_fh {
# Set file handle # Set file handle
@ -8081,9 +8028,7 @@ sub is_already_in_results {
# Returns: # Returns:
# $job_already_run = bool whether there is output for this or not # $job_already_run = bool whether there is output for this or not
my $job = $_[0]; my $job = $_[0];
my $args_as_dirname = $job->{'commandline'}->args_as_dirname(); my $dir = $job->{'commandline'}->resultsdir();
# prefix/name1/val1/name2/val2/
my $dir = $opt::results."/".$args_as_dirname;
::debug("run", "Test $dir/stdout", -e "$dir/stdout", "\n"); ::debug("run", "Test $dir/stdout", -e "$dir/stdout", "\n");
return -e "$dir/stdout"; return -e "$dir/stdout";
} }
@ -8951,6 +8896,75 @@ sub args_as_string {
map { @$_ } @{$self->{'arg_list'}}); map { @$_ } @{$self->{'arg_list'}});
} }
sub resultsdir {
sub max_file_name_length {
# Figure out the max length of a subdir
# TODO and the max total length
# Ext4 = 255,130816
# Uses:
# $Global::max_file_length is set
# Returns:
# $Global::max_file_length
my $testdir = shift;
my $upper = 8_000_000;
# Dir length of 8 chars is supported everywhere
my $len = 8;
my $dir = "x"x$len;
do {
rmdir($testdir."/".$dir);
$len *= 16;
$dir = "x"x$len;
} while ($len < $upper and mkdir $testdir."/".$dir);
# Then search for the actual max length between $len/16 and $len
my $min = $len/16;
my $max = $len;
while($max-$min > 5) {
# If we are within 5 chars of the exact value:
# it is not worth the extra time to find the exact value
my $test = int(($min+$max)/2);
$dir = "x"x$test;
if(mkdir $testdir."/".$dir) {
rmdir($testdir."/".$dir);
$min = $test;
} else {
$max = $test;
}
}
$Global::max_file_length = $min;
return $min;
}
my $self = shift;
my $dir = $self->replace_placeholders([$opt::results],0,0);
if($dir eq $opt::results) {
# $opt::results simple string: Append args_as_dirname
my $args_as_dirname = $self->args_as_dirname();
# Output in: prefix/name1/val1/name2/val2/stdout
$dir = $opt::results."/".$args_as_dirname;
if(-d $dir or eval{ File::Path::mkpath($dir); }) {
# OK
} else {
# mkpath failed: Argument probably too long.
# Set $Global::max_file_length, which will keep the individual
# dir names shorter than the max length
max_file_name_length($opt::results);
$args_as_dirname = $self->args_as_dirname();
# prefix/name1/val1/name2/val2/
$dir = $opt::results."/".$args_as_dirname;
File::Path::mkpath($dir);
}
} else {
if(-d $dir or eval{ File::Path::mkpath($dir); }) {
# OK
} else {
::error("Cannot make dir '$dir'.");
::wait_and_exit(255);
}
}
return $dir;
}
sub args_as_dirname { sub args_as_dirname {
# Returns: # Returns:
# all unmodified arguments joined with '/' (similar to {}) # all unmodified arguments joined with '/' (similar to {})

View file

@ -1448,9 +1448,9 @@ it to the command.
Only used with B<--pipe>. Only used with B<--pipe>.
=item B<--results> I<name> (beta testing) =item B<--results> I<name> (prealpha testing)
=item B<--res> I<name> (beta testing) =item B<--res> I<name> (prealpha testing)
Save the output into files. Save the output into files.
@ -1470,15 +1470,33 @@ B<Dir structure output>
If I<name> does not end in B<.csv>/B<.tsv> will be treated as a dir. If I<name> does not end in B<.csv>/B<.tsv> will be treated as a dir.
The files will be stored in a directory tree rooted at I<name>. If I<name> contains replacement strings output files will be stored in
Within this directory tree, each command will result in two files: the resulting dir.
I<name>/<ARGS>/stdout and I<name>/<ARGS>/stderr, where <ARGS> is a
E.g.
parallel --results my_{} echo ::: foo bar baz
will generate the files:
my_bar/seq
my_bar/stderr
my_bar/stdout
my_baz/seq
my_baz/stderr
my_baz/stdout
my_foo/seq
my_foo/stderr
my_foo/stdout
If I<name> does not contain replacement strings the files will be
stored in a directory tree rooted at I<name>. Within this directory
tree, each command will result in three files: I<name>/<ARGS>/stdout
and I<name>/<ARGS>/stderr, I<name>/<ARGS>/seq, where <ARGS> is a
sequence of directories representing the header of the input source sequence of directories representing the header of the input source
(if using B<--header :>) or the number of the input source and (if using B<--header :>) or the number of the input source and
corresponding values. corresponding values.
I<name> can contain replacement strings.
E.g: E.g:
parallel --header : --results foo echo {a} {b} \ parallel --header : --results foo echo {a} {b} \
@ -1486,14 +1504,18 @@ E.g:
will generate the files: will generate the files:
foo/a/I/b/III/stderr foo/a/II/b/III/seq
foo/a/I/b/III/stdout
foo/a/I/b/IIII/stderr
foo/a/I/b/IIII/stdout
foo/a/II/b/III/stderr foo/a/II/b/III/stderr
foo/a/II/b/III/stdout foo/a/II/b/III/stdout
foo/a/II/b/IIII/seq
foo/a/II/b/IIII/stderr foo/a/II/b/IIII/stderr
foo/a/II/b/IIII/stdout foo/a/II/b/IIII/stdout
foo/a/I/b/III/seq
foo/a/I/b/III/stderr
foo/a/I/b/III/stdout
foo/a/I/b/IIII/seq
foo/a/I/b/IIII/stderr
foo/a/I/b/IIII/stdout
and and
@ -1501,14 +1523,18 @@ and
will generate the files: will generate the files:
foo/1/I/2/III/stderr foo/1/II/2/III/seq
foo/1/I/2/III/stdout
foo/1/I/2/IIII/stderr
foo/1/I/2/IIII/stdout
foo/1/II/2/III/stderr foo/1/II/2/III/stderr
foo/1/II/2/III/stdout foo/1/II/2/III/stdout
foo/1/II/2/IIII/seq
foo/1/II/2/IIII/stderr foo/1/II/2/IIII/stderr
foo/1/II/2/IIII/stdout foo/1/II/2/IIII/stdout
foo/1/I/2/III/seq
foo/1/I/2/III/stderr
foo/1/I/2/III/stdout
foo/1/I/2/IIII/seq
foo/1/I/2/IIII/stderr
foo/1/I/2/IIII/stdout
and and

View file

@ -857,6 +857,12 @@ If /tmp/parallel runs full during the run, Rust parallel does not
report this, but finishes with success - thereby risking data loss. report this, but finishes with success - thereby risking data loss.
=head2 DIFFERENCES BETWEEN Rush AND GNU Parallel
Rush (https://github.com/shenwei356/rush) is written in Go and based
on gargs.
=head2 DIFFERENCES BETWEEN ClusterSSH AND GNU Parallel =head2 DIFFERENCES BETWEEN ClusterSSH AND GNU Parallel
ClusterSSH solves a different problem than GNU B<parallel>. ClusterSSH solves a different problem than GNU B<parallel>.

View file

@ -2306,7 +2306,9 @@ Output: Same as above.
B<--pipe> is not very efficient. It maxes out at around 500 B<--pipe> is not very efficient. It maxes out at around 500
MB/s. B<--pipepart> can easily deliver 5 GB/s. But there are a few MB/s. B<--pipepart> can easily deliver 5 GB/s. But there are a few
limitations. The input has to be a normal file (not a pipe) given by limitations. The input has to be a normal file (not a pipe) given by
B<-a> or B<::::> and B<-L>/B<-l>/B<-N> do not work. B<-a> or B<::::> and B<-L>/B<-l>/B<-N> do not work. B<--recend> and
B<--recstart>, however, I<do> work, and records can often be split on
that alone.
parallel --pipepart -a num1000000 --block 3m wc parallel --pipepart -a num1000000 --block 3m wc

View file

@ -603,14 +603,6 @@ echo '### bug #34422: parallel -X --eta crashes with div by zero'
# We do not care how long it took # We do not care how long it took
seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG' seq 2 | stdout parallel -X --eta echo | grep -E -v 'ETA:.*AVG'
echo '**'
echo '### bug #48295: --results should be dynamic like --wd'
rm -rf /tmp/parallel-48295;
parallel --results /tmp/parallel-48295/{1} -k echo ::: A B ::: a b;
find /tmp/parallel-48295 -type f | sort
echo '**' echo '**'
bash -O extglob -c '. `which env_parallel.bash`; bash -O extglob -c '. `which env_parallel.bash`;
@ -697,8 +689,29 @@ par_python_children() {
echo '### bug #49970: Python child process dies if --env is used' echo '### bug #49970: Python child process dies if --env is used'
fu() { echo joe; } fu() { echo joe; }
export -f fu export -f fu
stdout parallel --env fu python -c \""import os;f = os.popen('uname -p');output = f.read();rc = f.close()"\" ::: 1 echo foo | stdout parallel --env fu python -c \
\""import os; f = os.popen('uname -p'); output = f.read(); rc = f.close()"\"
}
par_result_replace() {
echo '### bug #49983: --results with {1}'
parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz
find /tmp/par_*_49983 | sort
rm -rf /tmp/par_*_49983
parallel --results /tmp/par_{}_49983 -k echo ::: foo bar baz ::: A B C
find /tmp/par_*_49983 | sort
rm -rf /tmp/par_*_49983
parallel --results /tmp/par_{1}-{2}_49983 -k echo ::: foo bar baz ::: A B C
find /tmp/par_*_49983 | sort
rm -rf /tmp/par_*_49983
parallel --results /tmp/par__49983 -k echo ::: foo bar baz ::: A B C
find /tmp/par_*_49983 | sort
rm -rf /tmp/par_*_49983
parallel --results /tmp/par__49983 --header : -k echo ::: foo bar baz ::: A B C
find /tmp/par_*_49983 | sort
rm -rf /tmp/par_*_49983
} }
export -f $(compgen -A function | grep par_) export -f $(compgen -A function | grep par_)
compgen -A function | grep par_ | sort | parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1' compgen -A function | grep par_ | sort |
parallel -j6 --tag -k --joblog +/tmp/jl-`basename $0` '{} 2>&1'

View file

@ -87,3 +87,39 @@ echo '### bug #49404: "Max jobs to run" does not equal the number of jobs specif
echo should give 10 running jobs echo should give 10 running jobs
stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10 stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10
EOF EOF
par_trc_with_space() {
SERVER1=parallel-server1
echo '### Test --trc with space added in filename'
echo original > '/tmp/parallel space file'
echo '/tmp/parallel space file' | stdout parallel --trc "{} more space" -S parallel@$SERVER1 cat {} ">{}\\ more\\ space"
cat '/tmp/parallel space file more space'
rm '/tmp/parallel space file' '/tmp/parallel space file more space'
}
par_trc_with_special_chars() {
SERVER1=parallel-server1
echo '### Test --trc with >|< added in filename'
echo original > '/tmp/parallel space file2'
echo '/tmp/parallel space file2' | stdout parallel --trc "{} >|<" -S parallel@$SERVER1 cat {} ">{}\\ \\>\\|\\<"
cat '/tmp/parallel space file2 >|<'
rm '/tmp/parallel space file2' '/tmp/parallel space file2 >|<'
}
par_return_with_fixedstring() {
echo '### Test --return with fixed string (Gave undef warnings)'
touch a
echo a | stdout parallel --return b -S parallel@lo echo ">b" && echo OK
rm a b
}
par_quoting_for_onall() {
echo '### bug #35427: quoting of {2} broken for --onall'
echo foo: /bin/ls | parallel --colsep ' ' -S lo --onall ls {2}
}
export -f $(compgen -A function | grep par_)
# Tested with -j1..8
# -j6 was fastest
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
compgen -A function | grep par_ | sort | parallel --delay 0.1 -j2 --tag -k '{} 2>&1'

View file

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
SERVER1=parallel-server3 SERVER1=parallel-server1
SERVER2=lo SERVER2=lo
SSHLOGIN1=parallel@parallel-server3 SSHLOGIN1=parallel@parallel-server1
SSHLOGIN2=parallel@lo SSHLOGIN2=parallel@lo
SSHLOGIN3=parallel@parallel-server2 SSHLOGIN3=parallel@parallel-server2

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
SERVER1=parallel-server3 SERVER1=parallel-server1
SERVER2=parallel-server2 SERVER2=parallel-server2
echo '### Test $PARALLEL - single line' echo '### Test $PARALLEL - single line'

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
SERVER1=parallel-server3 SERVER1=parallel-server1
SERVER2=parallel-server2 SERVER2=parallel-server2
echo '### Test $PARALLEL_SEQ - local' echo '### Test $PARALLEL_SEQ - local'

View file

@ -1,24 +1,6 @@
#!/bin/bash #!/bin/bash
SERVER1=parallel-server3 SERVER1=parallel-server1
SERVER2=parallel-server2 SERVER2=parallel-server2
echo '### Test --trc with space added in filename'
echo original > '/tmp/parallel space file'
echo '/tmp/parallel space file' | stdout parallel --trc "{} more space" -S parallel@$SERVER1 cat {} ">{}\\ more\\ space"
cat '/tmp/parallel space file more space'
rm '/tmp/parallel space file more space'
echo '### Test --trc with >|< added in filename'
echo original > '/tmp/parallel space file'
echo '/tmp/parallel space file' | stdout parallel --trc "{} >|<" -S parallel@$SERVER1 cat {} ">{}\\ \\>\\|\\<"
cat '/tmp/parallel space file >|<'
rm '/tmp/parallel space file >|<'
echo '### Test --return with fixed string (Gave undef warnings)'
touch a
echo a | stdout parallel --return b -S .. echo ">b" && echo OK
rm a b
echo '### bug #35427: quoting of {2} broken for --onall'
echo foo: /bin/ls | parallel --colsep ' ' -S localhost --onall ls {2}

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
SERVER1=parallel-server3 SERVER1=parallel-server1
SERVER2=parallel-server2 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

View file

@ -1629,27 +1629,6 @@ Computers / CPU cores / Max jobs to run
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
echo '**' echo '**'
**
echo '### bug #48295: --results should be dynamic like --wd'
### bug #48295: --results should be dynamic like --wd
rm -rf /tmp/parallel-48295; parallel --results /tmp/parallel-48295/{1} -k echo ::: A B ::: a b; find /tmp/parallel-48295 -type f | sort
A a
A b
B a
B b
/tmp/parallel-48295/A/1/A/2/a/seq
/tmp/parallel-48295/A/1/A/2/a/stderr
/tmp/parallel-48295/A/1/A/2/a/stdout
/tmp/parallel-48295/A/1/A/2/b/seq
/tmp/parallel-48295/A/1/A/2/b/stderr
/tmp/parallel-48295/A/1/A/2/b/stdout
/tmp/parallel-48295/B/1/B/2/a/seq
/tmp/parallel-48295/B/1/B/2/a/stderr
/tmp/parallel-48295/B/1/B/2/a/stdout
/tmp/parallel-48295/B/1/B/2/b/seq
/tmp/parallel-48295/B/1/B/2/b/stderr
/tmp/parallel-48295/B/1/B/2/b/stdout
echo '**'
** **
bash -O extglob -c '. `which env_parallel.bash`; _longopt () { case "$prev" in --+([-a-z0-9_])) echo foo;; esac; }; env_parallel echo ::: env_parallel 2>&1 ' bash -O extglob -c '. `which env_parallel.bash`; _longopt () { case "$prev" in --+([-a-z0-9_])) echo foo;; esac; }; env_parallel echo ::: env_parallel 2>&1 '
env_parallel env_parallel
@ -1773,3 +1752,188 @@ par_file_ending_in_newline gzip /tmp/parallel_f1
par_file_ending_in_newline gzip /tmp/parallel_f2' par_file_ending_in_newline gzip /tmp/parallel_f2'
par_file_ending_in_newline ' par_file_ending_in_newline '
par_python_children ### bug #49970: Python child process dies if --env is used par_python_children ### bug #49970: Python child process dies if --env is used
par_result_replace ### bug #49983: --results with {1}
par_result_replace foo
par_result_replace bar
par_result_replace baz
par_result_replace /tmp/par_bar_49983
par_result_replace /tmp/par_bar_49983/seq
par_result_replace /tmp/par_bar_49983/stderr
par_result_replace /tmp/par_bar_49983/stdout
par_result_replace /tmp/par_baz_49983
par_result_replace /tmp/par_baz_49983/seq
par_result_replace /tmp/par_baz_49983/stderr
par_result_replace /tmp/par_baz_49983/stdout
par_result_replace /tmp/par_foo_49983
par_result_replace /tmp/par_foo_49983/seq
par_result_replace /tmp/par_foo_49983/stderr
par_result_replace /tmp/par_foo_49983/stdout
par_result_replace foo A
par_result_replace foo B
par_result_replace foo C
par_result_replace bar A
par_result_replace bar B
par_result_replace bar C
par_result_replace baz A
par_result_replace baz B
par_result_replace baz C
par_result_replace /tmp/par_bar A_49983
par_result_replace /tmp/par_bar A_49983/seq
par_result_replace /tmp/par_bar A_49983/stderr
par_result_replace /tmp/par_bar A_49983/stdout
par_result_replace /tmp/par_bar B_49983
par_result_replace /tmp/par_bar B_49983/seq
par_result_replace /tmp/par_bar B_49983/stderr
par_result_replace /tmp/par_bar B_49983/stdout
par_result_replace /tmp/par_bar C_49983
par_result_replace /tmp/par_bar C_49983/seq
par_result_replace /tmp/par_bar C_49983/stderr
par_result_replace /tmp/par_bar C_49983/stdout
par_result_replace /tmp/par_baz A_49983
par_result_replace /tmp/par_baz A_49983/seq
par_result_replace /tmp/par_baz A_49983/stderr
par_result_replace /tmp/par_baz A_49983/stdout
par_result_replace /tmp/par_baz B_49983
par_result_replace /tmp/par_baz B_49983/seq
par_result_replace /tmp/par_baz B_49983/stderr
par_result_replace /tmp/par_baz B_49983/stdout
par_result_replace /tmp/par_baz C_49983
par_result_replace /tmp/par_baz C_49983/seq
par_result_replace /tmp/par_baz C_49983/stderr
par_result_replace /tmp/par_baz C_49983/stdout
par_result_replace /tmp/par_foo A_49983
par_result_replace /tmp/par_foo A_49983/seq
par_result_replace /tmp/par_foo A_49983/stderr
par_result_replace /tmp/par_foo A_49983/stdout
par_result_replace /tmp/par_foo B_49983
par_result_replace /tmp/par_foo B_49983/seq
par_result_replace /tmp/par_foo B_49983/stderr
par_result_replace /tmp/par_foo B_49983/stdout
par_result_replace /tmp/par_foo C_49983
par_result_replace /tmp/par_foo C_49983/seq
par_result_replace /tmp/par_foo C_49983/stderr
par_result_replace /tmp/par_foo C_49983/stdout
par_result_replace foo A
par_result_replace foo B
par_result_replace foo C
par_result_replace bar A
par_result_replace bar B
par_result_replace bar C
par_result_replace baz A
par_result_replace baz B
par_result_replace baz C
par_result_replace /tmp/par_bar-A_49983
par_result_replace /tmp/par_bar-A_49983/seq
par_result_replace /tmp/par_bar-A_49983/stderr
par_result_replace /tmp/par_bar-A_49983/stdout
par_result_replace /tmp/par_bar-B_49983
par_result_replace /tmp/par_bar-B_49983/seq
par_result_replace /tmp/par_bar-B_49983/stderr
par_result_replace /tmp/par_bar-B_49983/stdout
par_result_replace /tmp/par_bar-C_49983
par_result_replace /tmp/par_bar-C_49983/seq
par_result_replace /tmp/par_bar-C_49983/stderr
par_result_replace /tmp/par_bar-C_49983/stdout
par_result_replace /tmp/par_baz-A_49983
par_result_replace /tmp/par_baz-A_49983/seq
par_result_replace /tmp/par_baz-A_49983/stderr
par_result_replace /tmp/par_baz-A_49983/stdout
par_result_replace /tmp/par_baz-B_49983
par_result_replace /tmp/par_baz-B_49983/seq
par_result_replace /tmp/par_baz-B_49983/stderr
par_result_replace /tmp/par_baz-B_49983/stdout
par_result_replace /tmp/par_baz-C_49983
par_result_replace /tmp/par_baz-C_49983/seq
par_result_replace /tmp/par_baz-C_49983/stderr
par_result_replace /tmp/par_baz-C_49983/stdout
par_result_replace /tmp/par_foo-A_49983
par_result_replace /tmp/par_foo-A_49983/seq
par_result_replace /tmp/par_foo-A_49983/stderr
par_result_replace /tmp/par_foo-A_49983/stdout
par_result_replace /tmp/par_foo-B_49983
par_result_replace /tmp/par_foo-B_49983/seq
par_result_replace /tmp/par_foo-B_49983/stderr
par_result_replace /tmp/par_foo-B_49983/stdout
par_result_replace /tmp/par_foo-C_49983
par_result_replace /tmp/par_foo-C_49983/seq
par_result_replace /tmp/par_foo-C_49983/stderr
par_result_replace /tmp/par_foo-C_49983/stdout
par_result_replace foo A
par_result_replace foo B
par_result_replace foo C
par_result_replace bar A
par_result_replace bar B
par_result_replace bar C
par_result_replace baz A
par_result_replace baz B
par_result_replace baz C
par_result_replace /tmp/par__49983
par_result_replace /tmp/par__49983/1
par_result_replace /tmp/par__49983/1/bar
par_result_replace /tmp/par__49983/1/bar/2
par_result_replace /tmp/par__49983/1/bar/2/A
par_result_replace /tmp/par__49983/1/bar/2/A/seq
par_result_replace /tmp/par__49983/1/bar/2/A/stderr
par_result_replace /tmp/par__49983/1/bar/2/A/stdout
par_result_replace /tmp/par__49983/1/bar/2/B
par_result_replace /tmp/par__49983/1/bar/2/B/seq
par_result_replace /tmp/par__49983/1/bar/2/B/stderr
par_result_replace /tmp/par__49983/1/bar/2/B/stdout
par_result_replace /tmp/par__49983/1/bar/2/C
par_result_replace /tmp/par__49983/1/bar/2/C/seq
par_result_replace /tmp/par__49983/1/bar/2/C/stderr
par_result_replace /tmp/par__49983/1/bar/2/C/stdout
par_result_replace /tmp/par__49983/1/baz
par_result_replace /tmp/par__49983/1/baz/2
par_result_replace /tmp/par__49983/1/baz/2/A
par_result_replace /tmp/par__49983/1/baz/2/A/seq
par_result_replace /tmp/par__49983/1/baz/2/A/stderr
par_result_replace /tmp/par__49983/1/baz/2/A/stdout
par_result_replace /tmp/par__49983/1/baz/2/B
par_result_replace /tmp/par__49983/1/baz/2/B/seq
par_result_replace /tmp/par__49983/1/baz/2/B/stderr
par_result_replace /tmp/par__49983/1/baz/2/B/stdout
par_result_replace /tmp/par__49983/1/baz/2/C
par_result_replace /tmp/par__49983/1/baz/2/C/seq
par_result_replace /tmp/par__49983/1/baz/2/C/stderr
par_result_replace /tmp/par__49983/1/baz/2/C/stdout
par_result_replace /tmp/par__49983/1/foo
par_result_replace /tmp/par__49983/1/foo/2
par_result_replace /tmp/par__49983/1/foo/2/A
par_result_replace /tmp/par__49983/1/foo/2/A/seq
par_result_replace /tmp/par__49983/1/foo/2/A/stderr
par_result_replace /tmp/par__49983/1/foo/2/A/stdout
par_result_replace /tmp/par__49983/1/foo/2/B
par_result_replace /tmp/par__49983/1/foo/2/B/seq
par_result_replace /tmp/par__49983/1/foo/2/B/stderr
par_result_replace /tmp/par__49983/1/foo/2/B/stdout
par_result_replace /tmp/par__49983/1/foo/2/C
par_result_replace /tmp/par__49983/1/foo/2/C/seq
par_result_replace /tmp/par__49983/1/foo/2/C/stderr
par_result_replace /tmp/par__49983/1/foo/2/C/stdout
par_result_replace bar B
par_result_replace bar C
par_result_replace baz B
par_result_replace baz C
par_result_replace /tmp/par__49983
par_result_replace /tmp/par__49983/A
par_result_replace /tmp/par__49983/A/B
par_result_replace /tmp/par__49983/A/B/foo
par_result_replace /tmp/par__49983/A/B/foo/bar
par_result_replace /tmp/par__49983/A/B/foo/bar/seq
par_result_replace /tmp/par__49983/A/B/foo/bar/stderr
par_result_replace /tmp/par__49983/A/B/foo/bar/stdout
par_result_replace /tmp/par__49983/A/B/foo/baz
par_result_replace /tmp/par__49983/A/B/foo/baz/seq
par_result_replace /tmp/par__49983/A/B/foo/baz/stderr
par_result_replace /tmp/par__49983/A/B/foo/baz/stdout
par_result_replace /tmp/par__49983/A/C
par_result_replace /tmp/par__49983/A/C/foo
par_result_replace /tmp/par__49983/A/C/foo/bar
par_result_replace /tmp/par__49983/A/C/foo/bar/seq
par_result_replace /tmp/par__49983/A/C/foo/bar/stderr
par_result_replace /tmp/par__49983/A/C/foo/bar/stdout
par_result_replace /tmp/par__49983/A/C/foo/baz
par_result_replace /tmp/par__49983/A/C/foo/baz/seq
par_result_replace /tmp/par__49983/A/C/foo/baz/stderr
par_result_replace /tmp/par__49983/A/C/foo/baz/stdout

View file

@ -482,10 +482,10 @@ par_kill_children_timeout 0 0 0
par_kill_children_timeout 2 par_kill_children_timeout 2
par_kill_children_timeout 0 0 0 par_kill_children_timeout 0 0 0
par_maxlinelen_X_I ### Test max line length -X -I par_maxlinelen_X_I ### Test max line length -X -I
par_maxlinelen_X_I 47ec7550232044dc1e7a504705a45184 - par_maxlinelen_X_I 81c0a85162c989c07f666b827a30ce52 -
par_maxlinelen_X_I Chars per line (817788/13): 62906 par_maxlinelen_X_I Chars per line (817788/13): 62906
par_maxlinelen_m_I ### Test max line length -m -I par_maxlinelen_m_I ### Test max line length -m -I
par_maxlinelen_m_I d10d5c84fc4716b21d90afa92cf44d73 - par_maxlinelen_m_I 14bacad229d8b0d32be0a2339c2a6af7 -
par_maxlinelen_m_I Chars per line (697810/11): 63437 par_maxlinelen_m_I Chars per line (697810/11): 63437
par_memleak ### Test memory consumption stays (almost) the same for 30 and 300 jobs par_memleak ### Test memory consumption stays (almost) the same for 30 and 300 jobs
par_memleak should give 1 == true par_memleak should give 1 == true
@ -946,17 +946,7 @@ par_round_robin_blocks 8
par_sigterm ### Test SIGTERM par_sigterm ### Test SIGTERM
par_sigterm 1 par_sigterm 1
par_sigterm 10 par_sigterm 10
par_sigterm 11
par_sigterm 12
par_sigterm 13
par_sigterm 14
par_sigterm 15
par_sigterm 16
par_sigterm 17
par_sigterm 18
par_sigterm 19
par_sigterm 2 par_sigterm 2
par_sigterm 20
par_sigterm 3 par_sigterm 3
par_sigterm 4 par_sigterm 4
par_sigterm 5 par_sigterm 5
@ -965,23 +955,8 @@ par_sigterm 7
par_sigterm 8 par_sigterm 8
par_sigterm 9 par_sigterm 9
par_sigterm parallel: SIGTERM received. No new jobs will be started. par_sigterm parallel: SIGTERM received. No new jobs will be started.
par_sigterm parallel: Waiting for these 20 jobs to finish. Send SIGTERM again to stop now. par_sigterm parallel: Waiting for these 5 jobs to finish. Send SIGTERM again to stop now.
par_sigterm parallel: sleep 3; echo 1
par_sigterm parallel: sleep 3; echo 10 par_sigterm parallel: sleep 3; echo 10
par_sigterm parallel: sleep 3; echo 11
par_sigterm parallel: sleep 3; echo 12
par_sigterm parallel: sleep 3; echo 13
par_sigterm parallel: sleep 3; echo 14
par_sigterm parallel: sleep 3; echo 15
par_sigterm parallel: sleep 3; echo 16
par_sigterm parallel: sleep 3; echo 17
par_sigterm parallel: sleep 3; echo 18
par_sigterm parallel: sleep 3; echo 19
par_sigterm parallel: sleep 3; echo 2
par_sigterm parallel: sleep 3; echo 20
par_sigterm parallel: sleep 3; echo 3
par_sigterm parallel: sleep 3; echo 4
par_sigterm parallel: sleep 3; echo 5
par_sigterm parallel: sleep 3; echo 6 par_sigterm parallel: sleep 3; echo 6
par_sigterm parallel: sleep 3; echo 7 par_sigterm parallel: sleep 3; echo 7
par_sigterm parallel: sleep 3; echo 8 par_sigterm parallel: sleep 3; echo 8

View file

@ -192,7 +192,7 @@ ls: cannot access 'bug46519.ccc': No such file or directory
echo '### Test --nice remote' echo '### Test --nice remote'
### 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;' 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\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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; ssh lo -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64;
a b a b
echo '**' echo '**'
** **

View file

@ -128,3 +128,11 @@ echo '### bug #49404: "Max jobs to run" does not equal the number of jobs specif
should give 10 running jobs should give 10 running jobs
stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10 stdout parallel -S 16/lo --progress true ::: {1..10} | grep /.10
1:lo / 16 / 10 1:lo / 16 / 10
par_quoting_for_onall ### bug #35427: quoting of {2} broken for --onall
par_quoting_for_onall /bin/ls
par_return_with_fixedstring ### Test --return with fixed string (Gave undef warnings)
par_return_with_fixedstring OK
par_trc_with_space ### Test --trc with space added in filename
par_trc_with_space original
par_trc_with_special_chars ### Test --trc with >|< added in filename
par_trc_with_special_chars original

View file

@ -34,7 +34,7 @@ Environment variables are:
stderr stderr
rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0] rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
/usr/lib/autossh/autossh: invalid option -- '-' /usr/lib/autossh/autossh: invalid option -- '-'
usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS] usage: autossh [-V] [-M monitor_port[:echo_port]] [-f] [SSH_OPTIONS]
@ -66,14 +66,14 @@ Environment variables are:
stderr stderr
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.0] rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]
echo '### bug #46520: --basefile cleans up without --cleanup' echo '### bug #46520: --basefile cleans up without --cleanup'
### bug #46520: --basefile cleans up without --cleanup ### bug #46520: --basefile cleans up without --cleanup
touch bug_46520; parallel -S parallel@lo --bf bug_46520 ls ::: bug_46520; ssh parallel@lo ls bug_46520; parallel -S parallel@lo --cleanup --bf bug_46520 ls ::: bug_46520; stdout ssh parallel@lo ls bug_46520 # should not exist touch bug_46520; parallel -S parallel@lo --bf bug_46520 ls ::: bug_46520; ssh parallel@lo ls bug_46520; parallel -S parallel@lo --cleanup --bf bug_46520 ls ::: bug_46520; stdout ssh parallel@lo ls bug_46520 # should not exist
bug_46520 bug_46520
bug_46520 bug_46520
bug_46520 bug_46520
ls: cannot access bug_46520: No such file or directory ls: cannot access 'bug_46520': No such file or directory
echo '### bug #36595: silent loss of input with --pipe and --sshlogin' echo '### bug #36595: silent loss of input with --pipe and --sshlogin'
### bug #36595: silent loss of input with --pipe and --sshlogin ### bug #36595: silent loss of input with --pipe and --sshlogin
seq 10000 | xargs | parallel --pipe -S 8/localhost cat 2>/dev/null | wc seq 10000 | xargs | parallel --pipe -S 8/localhost cat 2>/dev/null | wc

View file

@ -54,21 +54,21 @@ echo '### Test --onall -u'; parallel --onall -S parallel@lo,csh@lo -u '(echo {
3 3
echo '### Test --nonall'; parallel --nonall -k -S parallel@lo,csh@lo pwd | sort echo '### Test --nonall'; parallel --nonall -k -S parallel@lo,csh@lo pwd | sort
### Test --nonall ### Test --nonall
/home/csh /mnt/4tb/home/csh
/home/parallel /mnt/4tb/home/parallel
echo '### Test --nonall -u - should be interleaved x y x y'; parallel --nonall -S parallel@lo,csh@lo -u 'pwd|grep -q csh && sleep 3; pwd;sleep 12;pwd;' echo '### Test --nonall -u - should be interleaved x y x y'; parallel --nonall -S parallel@lo,csh@lo -u 'pwd|grep -q csh && sleep 3; pwd;sleep 12;pwd;'
### Test --nonall -u - should be interleaved x y x y ### Test --nonall -u - should be interleaved x y x y
/home/parallel /mnt/4tb/home/parallel
/home/csh /mnt/4tb/home/csh
/home/parallel /mnt/4tb/home/parallel
/home/csh /mnt/4tb/home/csh
echo '### Test read sshloginfile from STDIN'; echo parallel@lo,csh@lo | parallel -S - -k --nonall pwd; echo parallel@lo,csh@lo | parallel --sshloginfile - -k --onall pwd\; echo ::: foo echo '### Test read sshloginfile from STDIN'; echo parallel@lo,csh@lo | parallel -S - -k --nonall pwd; echo parallel@lo,csh@lo | parallel --sshloginfile - -k --onall pwd\; echo ::: foo
### Test read sshloginfile from STDIN ### Test read sshloginfile from STDIN
/home/csh /mnt/4tb/home/csh
/home/parallel /mnt/4tb/home/parallel
/home/csh /mnt/4tb/home/csh
foo foo
/home/parallel /mnt/4tb/home/parallel
foo foo
echo '**' echo '**'
** **
@ -88,24 +88,24 @@ echo '### Test --nonall --basefile --cleanup (rm should fail)'; touch tmp/nona
### Test --nonall --basefile --cleanup (rm should fail) ### Test --nonall --basefile --cleanup (rm should fail)
tmp/nonall--basefile--clean tmp/nonall--basefile--clean
tmp/nonall--basefile--clean tmp/nonall--basefile--clean
rm: cannot remove tmp/nonall--basefile--clean: No such file or directory rm: cannot remove 'tmp/nonall--basefile--clean': No such file or directory
rm: cannot remove tmp/nonall--basefile--clean: No such file or directory rm: cannot remove 'tmp/nonall--basefile--clean': No such file or directory
echo '**' echo '**'
** **
echo '### Test --onall --basefile --cleanup (rm should fail)'; touch tmp/onall--basefile--clean; stdout parallel --onall --basefile tmp/onall--basefile--clean --cleanup -S parallel@lo,csh@lo ls {} ::: tmp/onall--basefile--clean; stdout parallel --onall -S parallel@lo,csh@lo rm {} ::: tmp/onall--basefile--clean; stdout rm tmp/onall--basefile--clean echo '### Test --onall --basefile --cleanup (rm should fail)'; touch tmp/onall--basefile--clean; stdout parallel --onall --basefile tmp/onall--basefile--clean --cleanup -S parallel@lo,csh@lo ls {} ::: tmp/onall--basefile--clean; stdout parallel --onall -S parallel@lo,csh@lo rm {} ::: tmp/onall--basefile--clean; stdout rm tmp/onall--basefile--clean
### Test --onall --basefile --cleanup (rm should fail) ### Test --onall --basefile --cleanup (rm should fail)
tmp/onall--basefile--clean tmp/onall--basefile--clean
tmp/onall--basefile--clean tmp/onall--basefile--clean
rm: cannot remove tmp/onall--basefile--clean: No such file or directory rm: cannot remove 'tmp/onall--basefile--clean': No such file or directory
rm: cannot remove tmp/onall--basefile--clean: No such file or directory rm: cannot remove 'tmp/onall--basefile--clean': No such file or directory
echo '**' echo '**'
** **
echo '### Test --workdir .'; ssh parallel@lo mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S parallel@lo ::: pwd echo '### Test --workdir .'; ssh parallel@lo mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S parallel@lo ::: pwd
### Test --workdir . ### Test --workdir .
/home/parallel/mydir /mnt/4tb/home/parallel/mydir
echo '### Test --wd .'; ssh csh@lo mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S csh@lo ::: pwd echo '### Test --wd .'; ssh csh@lo mkdir -p mydir; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir . -S csh@lo ::: pwd
### Test --wd . ### Test --wd .
/home/csh/mydir /mnt/4tb/home/csh/mydir
echo '### Test --wd {}'; ssh csh@lo rm -rf wd1 wd2; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir {} -S csh@lo touch ::: wd1 wd2; ssh csh@lo ls -d wd1 wd2 echo '### Test --wd {}'; ssh csh@lo rm -rf wd1 wd2; mkdir -p $HOME/mydir; cd $HOME/mydir; parallel --workdir {} -S csh@lo touch ::: wd1 wd2; ssh csh@lo ls -d wd1 wd2
### Test --wd {} ### Test --wd {}
wd1 wd1

View file

@ -32,6 +32,8 @@ rld
echo '### -E_ -0 echo < eof_-0.xi' echo '### -E_ -0 echo < eof_-0.xi'
### -E_ -0 echo < eof_-0.xi ### -E_ -0 echo < eof_-0.xi
stdout xargs -E_ -0 echo < eof_-0.xi stdout xargs -E_ -0 echo < eof_-0.xi
xargs: warning: the -E option has no effect if -0 or -d is used.
one two _ three four one two _ three four
stdout parallel -X -k -E_ -0 echo < eof_-0.xi stdout parallel -X -k -E_ -0 echo < eof_-0.xi
one one
@ -456,7 +458,7 @@ echo '### true < 32767-ys.xi'
### true < 32767-ys.xi ### true < 32767-ys.xi
stdout xargs true < 32767-ys.xi stdout xargs true < 32767-ys.xi
stdout parallel -k true < 32767-ys.xi stdout parallel -k true < 32767-ys.xi
parallel: Error: Command line too long (98306 >= 65524) at input 0: y y y y y y y y y y y y y y y y y y y y y y y y y ... parallel: Error: Command line too long (98306 >= 65528) at input 0: y y y y y y y y y y y y y y y y y y y y y y y y y ...
echo '### true < 16383-ys.xi' echo '### true < 16383-ys.xi'
### true < 16383-ys.xi ### true < 16383-ys.xi
stdout xargs true < 16383-ys.xi stdout xargs true < 16383-ys.xi

View file

@ -111,7 +111,7 @@ echo '### Test -m with 60000 args'; seq 1 60000 | perl -pe 's/$/.gif/' | par
20 179960 1286702 20 179960 1286702
echo '### Test -X with 60000 args'; seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | tee >(wc; sleep 1) >(md5sum; sleep 1) >/dev/null; wait; sleep 1 echo '### Test -X with 60000 args'; seq 1 60000 | perl -pe 's/$/.gif/' | parallel -j1 -kX echo a{}b{.}c{.} | tee >(wc; sleep 1) >(md5sum; sleep 1) >/dev/null; wait; sleep 1
### Test -X with 60000 args ### Test -X with 60000 args
8646e0f7fd5f8795e4b1a831ede50e85 - 97715240fa65309902932877d24273db -
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

View file

@ -95,56 +95,8 @@ par_shebang_wrap_lua Arguments arg3
par_shebang_wrap_nodejs Arguments [ 'arg1' ] par_shebang_wrap_nodejs Arguments [ 'arg1' ]
par_shebang_wrap_nodejs Arguments [ 'arg2' ] par_shebang_wrap_nodejs Arguments [ 'arg2' ]
par_shebang_wrap_nodejs Arguments [ 'arg3' ] par_shebang_wrap_nodejs Arguments [ 'arg3' ]
par_shebang_wrap_octave GNU Octave, version 3.8.1
par_shebang_wrap_octave Copyright (C) 2014 John W. Eaton and others.
par_shebang_wrap_octave This is free software; see the source code for copying conditions.
par_shebang_wrap_octave There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
par_shebang_wrap_octave FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'.
par_shebang_wrap_octave
par_shebang_wrap_octave Octave was configured for "x86_64-pc-linux-gnu".
par_shebang_wrap_octave
par_shebang_wrap_octave Additional information about Octave is available at http://www.octave.org.
par_shebang_wrap_octave
par_shebang_wrap_octave Please contribute if you find this software useful.
par_shebang_wrap_octave For more information, visit http://www.octave.org/get-involved.html
par_shebang_wrap_octave
par_shebang_wrap_octave Read http://www.octave.org/bugs.html to learn how to submit bug reports.
par_shebang_wrap_octave For information about changes from previous versions, type 'news'.
par_shebang_wrap_octave
par_shebang_wrap_octave Arguments arg1 par_shebang_wrap_octave Arguments arg1
par_shebang_wrap_octave GNU Octave, version 3.8.1
par_shebang_wrap_octave Copyright (C) 2014 John W. Eaton and others.
par_shebang_wrap_octave This is free software; see the source code for copying conditions.
par_shebang_wrap_octave There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
par_shebang_wrap_octave FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'.
par_shebang_wrap_octave
par_shebang_wrap_octave Octave was configured for "x86_64-pc-linux-gnu".
par_shebang_wrap_octave
par_shebang_wrap_octave Additional information about Octave is available at http://www.octave.org.
par_shebang_wrap_octave
par_shebang_wrap_octave Please contribute if you find this software useful.
par_shebang_wrap_octave For more information, visit http://www.octave.org/get-involved.html
par_shebang_wrap_octave
par_shebang_wrap_octave Read http://www.octave.org/bugs.html to learn how to submit bug reports.
par_shebang_wrap_octave For information about changes from previous versions, type 'news'.
par_shebang_wrap_octave
par_shebang_wrap_octave Arguments arg2 par_shebang_wrap_octave Arguments arg2
par_shebang_wrap_octave GNU Octave, version 3.8.1
par_shebang_wrap_octave Copyright (C) 2014 John W. Eaton and others.
par_shebang_wrap_octave This is free software; see the source code for copying conditions.
par_shebang_wrap_octave There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
par_shebang_wrap_octave FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'.
par_shebang_wrap_octave
par_shebang_wrap_octave Octave was configured for "x86_64-pc-linux-gnu".
par_shebang_wrap_octave
par_shebang_wrap_octave Additional information about Octave is available at http://www.octave.org.
par_shebang_wrap_octave
par_shebang_wrap_octave Please contribute if you find this software useful.
par_shebang_wrap_octave For more information, visit http://www.octave.org/get-involved.html
par_shebang_wrap_octave
par_shebang_wrap_octave Read http://www.octave.org/bugs.html to learn how to submit bug reports.
par_shebang_wrap_octave For information about changes from previous versions, type 'news'.
par_shebang_wrap_octave
par_shebang_wrap_octave Arguments arg3 par_shebang_wrap_octave Arguments arg3
par_shebang_wrap_perl Arguments arg1 par_shebang_wrap_perl Arguments arg1
par_shebang_wrap_perl Arguments arg2 par_shebang_wrap_perl Arguments arg2

View file

@ -61,7 +61,7 @@ echo '### Check that 4 processes are really used'
echo '### --version must have higher priority than retired options' echo '### --version must have higher priority than retired options'
### --version must have higher priority than retired options ### --version must have higher priority than retired options
$NICEPAR --version -g -Y -U -W -T | tail $NICEPAR --version -g -Y -U -W -T | tail
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017
Ole Tange and Free Software Foundation, Inc. Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it. This is free software: you are free to change and redistribute it.
@ -74,9 +74,9 @@ please cite as described in 'parallel --citation'.
echo '### bug #39787: --xargs broken' echo '### bug #39787: --xargs broken'
### bug #39787: --xargs broken ### bug #39787: --xargs broken
nice perl -e 'for(1..30000){print "$_\n"}' | $NICEPAR --xargs -k echo | perl -ne 'print length $_,"\n"' nice perl -e 'for(1..30000){print "$_\n"}' | $NICEPAR --xargs -k echo | perl -ne 'print length $_,"\n"'
65514 65520
65514 65520
37866 37854
echo '### --delay should grow by 3 sec per arg' echo '### --delay should grow by 3 sec per arg'
### --delay should grow by 3 sec per arg ### --delay should grow by 3 sec per arg
stdout /usr/bin/time -f %e parallel --delay 3 true ::: 1 2 | perl -ne '$_ >= 3 and $_ <= 8 and print "OK\n"' stdout /usr/bin/time -f %e parallel --delay 3 true ::: 1 2 | perl -ne '$_ >= 3 and $_ <= 8 and print "OK\n"'

View file

@ -63,7 +63,7 @@ echo '### Test --number-of-cpus'; stdout $NICEPAR --number-of-cpus
1 1
echo '### Test --number-of-cores'; stdout $NICEPAR --number-of-cores echo '### Test --number-of-cores'; stdout $NICEPAR --number-of-cores
### Test --number-of-cores ### Test --number-of-cores
2 8
echo '### Test --use-cpus-instead-of-cores'; (seq 1 8 | stdout parallel --use-cpus-instead-of-cores -j100% sleep) && echo CPUs done & (seq 1 8 | stdout parallel -j100% sleep) && echo cores done & echo 'Cores should complete first on machines with less than 8 physical CPUs'; wait echo '### Test --use-cpus-instead-of-cores'; (seq 1 8 | stdout parallel --use-cpus-instead-of-cores -j100% sleep) && echo CPUs done & (seq 1 8 | stdout parallel -j100% sleep) && echo cores done & echo 'Cores should complete first on machines with less than 8 physical CPUs'; wait
### Test --use-cpus-instead-of-cores ### Test --use-cpus-instead-of-cores
Cores should complete first on machines with less than 8 physical CPUs Cores should complete first on machines with less than 8 physical CPUs
@ -400,7 +400,7 @@ 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: 131049 Maximal size of command: 131049
Maximal used size of command: 65524 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
and run commands; if this is not what you wanted to happen, please and run commands; if this is not what you wanted to happen, please

View file

@ -102,16 +102,16 @@ TODO test ssh with > 9 simultaneous
100 100
echo '### test --timeout --retries' echo '### test --timeout --retries'
### test --timeout --retries ### test --timeout --retries
parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 parallel@parallel-server3 parallel@lo parallel@parallel-server2 parallel -j0 --timeout 5 --retries 3 -k ssh {} echo {} ::: 192.168.1.197 8.8.8.8 parallel@parallel-server1 parallel@lo parallel@parallel-server2
parallel@parallel-server3 parallel@parallel-server1
parallel@lo parallel@lo
parallel@parallel-server2 parallel@parallel-server2
echo '### test --filter-hosts with server w/o ssh, non-existing server' echo '### test --filter-hosts with server w/o ssh, non-existing server'
### test --filter-hosts with server w/o ssh, non-existing server ### test --filter-hosts with server w/o ssh, non-existing server
parallel -S 192.168.1.197,8.8.8.8,parallel@parallel-server3,parallel@lo,parallel@parallel-server2 --filter-hosts --nonall -k --tag echo parallel -S 192.168.1.197,8.8.8.8,parallel@parallel-server1,parallel@lo,parallel@parallel-server2 --filter-hosts --nonall -k --tag echo
parallel@lo parallel@lo
parallel@parallel-server1
parallel@parallel-server2 parallel@parallel-server2
parallel@parallel-server3
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host' echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host ### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host
(parallel -S redhat9.tange.dk true ::: {1..20}; echo No --controlmaster - finish last) & (parallel -M -S redhat9.tange.dk true ::: {1..20}; echo With --controlmaster - finish first) & wait (parallel -S redhat9.tange.dk true ::: {1..20}; echo No --controlmaster - finish last) & (parallel -M -S redhat9.tange.dk true ::: {1..20}; echo With --controlmaster - finish first) & wait
@ -123,7 +123,7 @@ echo '### --filter-hosts - OK, non-such-user, connection refused, wrong host'
aspire aspire
echo '### test --workdir . in $HOME' echo '### test --workdir . in $HOME'
### test --workdir . in $HOME ### test --workdir . in $HOME
cd && mkdir -p parallel-test && cd parallel-test && echo OK > testfile && parallel --workdir . --transfer -S parallel@parallel-server3 cat {} ::: testfile cd && mkdir -p parallel-test && cd parallel-test && echo OK > testfile && parallel --workdir . --transfer -S parallel@parallel-server1 cat {} ::: testfile
OK OK
echo '### TODO: test --filter-hosts proxied through the one host' echo '### TODO: test --filter-hosts proxied through the one host'
### TODO: test --filter-hosts proxied through the one host ### TODO: test --filter-hosts proxied through the one host

View file

@ -913,7 +913,7 @@ _
} }
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\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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;_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\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; 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
99 99
@ -1315,7 +1315,7 @@ If you pay 10000 EUR you should feel free to use GNU Parallel without citing.
parallel --version parallel --version
GNU parallel VERSION GNU parallel VERSION
Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Copyright (C) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017
Ole Tange and Free Software Foundation, Inc. Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it. This is free software: you are free to change and redistribute it.

View file

@ -77,8 +77,8 @@ mysql: [Warning] Using a password on the command line interface can be insecure.
Test if --debug works Test if --debug works
Yes it does Yes it does
### Test --version -V ### Test --version -V
12 74 500 13 74 535
12 74 500 13 74 535
### Test -r ### Test -r
dburl pg://nongood@127.0.0.3:2227/ dburl pg://nongood@127.0.0.3:2227/
databasedriver pg user nongood password host 127.0.0.3 port 2227 database nongood query databasedriver pg user nongood password host 127.0.0.3 port 2227 database nongood query

View file

@ -41,6 +41,3 @@ parallel: sleep 3; echo 14
parallel: sleep 3; echo 15 parallel: sleep 3; echo 15
parallel: sleep 3; echo 16 parallel: sleep 3; echo 16
parallel: sleep 3; echo 9 parallel: sleep 3; echo 9
### Test bug: empty line for | sh with -k
a
b

View file

@ -77,7 +77,7 @@ OK
Input for ssh Input for ssh
-l parallel 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.iLsfx . ./.
-l parallel one-server -- exec perl -e @GNU_Parallel\=split/_/,\"use_IPC::Open3\;_use_MIME::Base64\"\;eval\"@GNU_Parallel\"\;\$SIG\{CHLD\}\=\"IGNORE\"\;my\$zip\=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;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\=split/_/,\"use_IPC::Open3\;_use_MIME::Base64\"\;eval\"@GNU_Parallel\"\;\$chld\=\$SIG\{CHLD\}\;\$SIG\{CHLD\}\=\"IGNORE\"\;my\$zip\=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;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\;\$SIG\{CHLD\}\=\$chld\;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.iLsfx . ./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.iLsfx . ./parallel.file.'
@ -90,7 +90,7 @@ Input for ssh
'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\; 'newlineX.out2; sh -c rmdir\ ./tmp/\ ./\ 2\>/dev/null\;
-l parallel 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.iLsfx . ./.
-l parallel one-server -- exec perl -e @GNU_Parallel\=split/_/,\"use_IPC::Open3\;_use_MIME::Base64\"\;eval\"@GNU_Parallel\"\;\$SIG\{CHLD\}\=\"IGNORE\"\;my\$zip\=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;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\=split/_/,\"use_IPC::Open3\;_use_MIME::Base64\"\;eval\"@GNU_Parallel\"\;\$chld\=\$SIG\{CHLD\}\;\$SIG\{CHLD\}\=\"IGNORE\"\;my\$zip\=\(grep\{-x\$_\}\"/usr/local/bin/bzip2\"\)\[0\]\|\|\"bzip2\"\;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\;\$SIG\{CHLD\}\=\$chld\;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.iLsfx . ./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.iLsfx . ./parallel.file.'

View file

@ -5,25 +5,25 @@
centos3.tange.dk centos3.tange.dk
hostname; echo 1 hostname; echo 1
hostname; echo 1 hostname; echo 1
nlv redhat9.tange.dk
### Test $PARALLEL - multi line ### Test $PARALLEL - multi line
1 1
1 1
centos3.tange.dk centos3.tange.dk
hostname; echo 1 hostname; echo 1
hostname; echo 1 hostname; echo 1
nlv redhat9.tange.dk
### Test ~/.parallel/config - single line ### Test ~/.parallel/config - single line
1 1
1 1
centos3.tange.dk centos3.tange.dk
hostname; echo 1 hostname; echo 1
hostname; echo 1 hostname; echo 1
nlv redhat9.tange.dk
### Test ~/.parallel/config - multi line ### Test ~/.parallel/config - multi line
1 1
1 1
centos3.tange.dk centos3.tange.dk
hostname; echo 1 hostname; echo 1
hostname; echo 1 hostname; echo 1
nlv redhat9.tange.dk

View file

@ -1,8 +0,0 @@
### Test --trc with space added in filename
original
### Test --trc with >|< added in filename
original
### Test --return with fixed string (Gave undef warnings)
OK
### bug #35427: quoting of {2} broken for --onall
/bin/ls

View file

@ -1,13 +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-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b' stdout parallel --return {} -vv -S parallel\@parallel-server1 echo '>'{} ::: 'aa<${#}" b' | perl -pe 's/\S*parallel-server\S*/one-server/;s:[a-z+=/\\0-9]{500,}:base64:i;'; rm 'aa<${#}" b'
ssh -l parallel one-server -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzR -essh\ -l\ parallel parallel-server3:./aa\\\<\\\$\\\{\\\#\\\}\\\"\\\ b ./.; exit $_EXIT_status; ssh -l parallel one-server -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64;_EXIT_status=$?; mkdir -p ./. && rsync --protocol 30 --rsync-path=cd\ ././.\;\ rsync -rlDzR -essh\ -l\ parallel parallel-server1:./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-z+=/\\0-9]{500,}:base64:i;' 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 -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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; ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64;
3 3
ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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; ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64;
3 3
ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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; ssh -l csh localhost -- exec perl -e @GNU_Parallel\\\=split/_/,\\\"use_IPC::Open3\\\;_use_MIME::Base64\\\"\\\;eval\\\"@GNU_Parallel\\\"\\\;\\\$chld\\\=\\\$SIG\\\{CHLD\\\}\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\"IGNORE\\\"\\\;my\\\$zip\\\=\\\(grep\\\{-x\\\$_\\\}\\\"/usr/local/bin/bzip2\\\"\\\)\\\[0\\\]\\\|\\\|\\\"bzip2\\\"\\\;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\\\;\\\$SIG\\\{CHLD\\\}\\\=\\\$chld\\\;eval\\\$eval\\\; base64;
3 3