parallel: Restrict TMPDIR and other env dirs to safe charset.

This commit is contained in:
Ole Tange 2023-02-19 14:49:30 +01:00
parent e51adc7d7f
commit b06698bee1
47 changed files with 4034 additions and 4052 deletions

View file

@ -282,6 +282,8 @@ https://www.redhat.com/sysadmin/perl-scripts
https://bioinformaticsworkbook.org/Appendix/GNUparallel/GNU_parallel_examples.html#gsc.tab=0
<<>>
GNU Parallel - For people who live life in the parallel lane.

View file

@ -2058,7 +2058,8 @@ sub options_completion_hash() {
("skip-first-line|skipfirstline".
"[Do not use the first line of input]"
=> \$opt::skip_first_line),
"bug" => \$opt::bug,
"_bug" => \$opt::_bug,
"_unsafe" => \$opt::_unsafe,
# --pipe
("pipe|spreadstdin".
"[Spread input to jobs on stdin (standard input)]" => \$opt::pipe),
@ -2207,7 +2208,7 @@ sub parse_options(@) {
if($opt::nokeeporder) { $opt::keeporder = undef; }
if(@opt::v) { $Global::verbose = $#opt::v+1; } # Convert -v -v to v=2
if($opt::bug) { ::die_bug("test-bug"); }
if($opt::_bug) { ::die_bug("test-bug"); }
$Global::debug = $opt::D;
#
## Shell
@ -2719,16 +2720,34 @@ sub check_invalid_option_combinations() {
::wait_and_exit(255);
}
}
sub unsafe_warn {
# use --_unsafe to only generate a warning
if($opt::_unsafe) { ::warning(@_); } else { ::error(@_); exit(255); }
}
sub test_safe_chars {
my $var = shift;
if($ENV{$var} =~ m{^[-a-z0-9_+,.%:/= ]*$}i) {
# OK
} else {
unsafe_warn("\$$var can only contain [-a-z0-9_+,.%:/= ].");
}
}
if($ENV{'TMPDIR'} =~ /\n/) {
if(defined $opt::files) {
::warning("--files do not work if \$TMPDIR contains newline.");
::warning("Use --files0 when \$TMPDIR contains newline.");
} elsif($Global::cshell
and
(defined $opt::cat or defined $opt::fifo)) {
::warning("--cat/--fifo fails under csh ".
"if \$TMPDIR contains newline.");
}
} elsif($ENV{'TMPDIR'} =~ /\257/) {
unsafe_warn("\$TMPDIR with \\257 (\257) is not supported.");
} else{
test_safe_chars('TMPDIR');
}
map { test_safe_chars($_); } qw(PARALLEL_HOME XDG_CONFIG_DIRS
PARALLEL_REMOTE_TMPDIR XDG_CACHE_HOME);
}
sub init_globals() {
@ -2852,6 +2871,7 @@ sub init_globals() {
$Global::job_already_run = '';
$ENV{'TMPDIR'} ||= "/tmp";
$ENV{'PARALLEL_REMOTE_TMPDIR'} ||= "/tmp";
# bug #55398: set $OLDPWD when using --wd
$ENV{'OLDPWD'} = $ENV{'PWD'};
if(not $ENV{HOME}) {
# $ENV{HOME} is sometimes not set if called from PHP
@ -7800,7 +7820,7 @@ sub loadavg($) {
# As the command can take long to run if run remote
# save it to a tmp file before moving it to the correct file
::debug("load", "Update load\n");
my $file = $self->{'loadavg_file'};
my $file = ::Q($self->{'loadavg_file'});
# tmpfile on same filesystem as $file
my $tmpfile = $file.$$;
$ENV{'SSHPASS'} = $self->{'password'};
@ -10714,7 +10734,7 @@ sub start($) {
::shell_quote_scalar_default(
"testfun() { rm $name; }; export -f testfun; ".
"perl -MIPC::Open3 -e ".
::shell_quote_scalar_default($script)
::Q(::Q($script))
);
my $redefine_eval;
# Redirect STDERR temporarily,

View file

@ -3856,6 +3856,65 @@ https://github.com/beomagi/parallelium
(Last checked: 2023-01)
=head2 DIFFERENCES BETWEEN forkrun AND GNU Parallel
Summary (see legend above):
=over
=item I1 - - - - - I7
=item - - - - - -
=item - O2 O3 - O5 - - - - O10
=item E1 - - E4 - - -
=item - - - - - - - - -
=item - -
=back
B<forkrun> blocks if it receives fewer jobs than slots:
echo | forkrun -p 2 echo
or when it gets some specific commands e.g.:
f() { seq "$@" | pv -qL 3; }
seq 10 | forkrun f
It is not clear why.
It is faster than GNU B<parallel> (overhead: 1.2 ms/job vs 3 ms/job),
but way slower than B<parallel-bash> (0.059 ms/job).
Running jobs cannot be stopped by pressing CTRL-C.
B<-k> is supposed to keep the order but fails on the MIX testing
example below. If used with B<-k> it caches output in RAM.
If B<forkrun> is killed, it leaves temporary files in
B</tmp/.forkrun.*> that has to be cleaned up manually.
=head3 EXAMPLES
1$ time find ./ -type f |
forkrun -l512 -- sha256sum 2>/dev/null | wc -l
1$ time find ./ -type f |
parallel -j28 -m -- sha256sum 2>/dev/null | wc -l
2$ time find ./ -type f |
forkrun -l512 -k -- sha256sum 2>/dev/null | wc -l
2$ time find ./ -type f |
parallel -j28 -k -m -- sha256sum 2>/dev/null | wc -l
https://github.com/jkool702/forkrun
(Last checked: 2023-02)
=head2 Todo
http://code.google.com/p/push/ (cannot compile)

View file

@ -14,9 +14,22 @@ MAX_SEC_PER_TEST=900
export TIMEOUT=$MAX_SEC_PER_TEST
run_once() {
replace_tmpdir() {
# Replace $TMPDIR with TMP
perl -0 -pe 'BEGIN{ ($a,$b,$c) = (shift,shift,shift);
$a =~ s/'"'"'$//s; $b =~ s/'"'"'$//s; $c =~ s/'"'"'$//s; }
s:""+:":g;
s:('"'"'?)(\Q$a\E|\Q$b\E|\Q$c\E)('"'"'?)([/a-z0-9]*)('"'"'?):/TMP$4:gi;
s/\0/\n/g' "$TMPDIR" "$qTMPDIR" "$qqTMPDIR" |
perl -ne '/Use --files0 when $TMPDIR contains newline./ or print'
}
export qqTMPDIR=$(< /dev/null parallel -0 --shellquote --shellquote ::: "$TMPDIR")
export qTMPDIR=$(< /dev/null parallel -0 --shellquote ::: "$TMPDIR")
export -f replace_tmpdir
script=$1
base=`basename "$script" .sh`
if diff -Naur wanted-results/"$base" actual-results/"$base" >/dev/null; then
# There is no diff: Last time worked - no need to try again
true skip
else
(
@ -24,7 +37,8 @@ run_once() {
export testsuitedir
cd "$TMPDIR"
bash "$testsuitedir/$script" |
perl -pe 's:'$HOME':~:g' > "$testsuitedir"/actual-results/"$base"
perl -pe 's:'$HOME':~:g' |
replace_tmpdir > "$testsuitedir"/actual-results/"$base"
)
fi
}
@ -34,13 +48,35 @@ run_test() {
script="$1"
base=`basename "$script" .sh`
# Force spaces and < into TMPDIR - this will expose bugs
export TMPDIR=/tmp/"$base-tmp"/'
`touch /tmp/tripwire` <"'"'"/tmp
# ASCII [^-,+=a-zA-Z0-9] = all special chars (175 is not supported)
fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
(pack "c*",2..42,127..174,47,176..255)."\@<?[]|~\\}{"')"
fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
(pack "c*",2..42,127..174,47,176..255)."\@<?[]|~\\}{"')"
fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
(pack "c*",127..174,47,176..255)."\@<?[]|~\\}{"')"
fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
(pack "c*",34,39,176..255)."\@<?[]|~\\}{"')"
semiok_fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
"\@<?[]|~\\}{"')"
fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
(pack "c*",2..10,34,39)."\@<?[]|~\\"')"
export PARALLEL="--_unsafe";
# OK
# fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
# (pack "c*",34,39)."\@<?[]|~\\"')"
# export PARALLEL="--_unsafe";
# OK
# fancychars="$(perl -e 'print "\n\`touch /tmp/tripwire\`>/tmp/tripwire;\n".
# ""')"
export TMPDIR=/tmp/"$base-tmp"/"$fancychars"/tmp
rm -rf "$TMPDIR"
mkdir -p "$TMPDIR"
# Clean before. May be owned by other users
sudo rm -f /tmp/*.{tmx,pac,arg,all,log,swp,loa,ssh,df,pip,tmb,chr,tms,par} ||
printf "%s\0" /tmp/*.par | sudo parallel -0 -X rm
rm -f /tmp/tripwire
# Force running once
echo >> actual-results/"$base"
if [ "$TRIES" = "3" ] ; then
@ -52,6 +88,7 @@ run_test() {
if [ -e /tmp/tripwire ] ; then
echo '!!!'
echo '!!! /tmp/tripwire TRIPPED !!!'
echo '!!! Quoting of TMPDIR failed !!!'
echo '!!!'
exit 1
fi

View file

@ -95,6 +95,7 @@ par_env_parallel() {
# (a)sh does not support 'export -f' so any function exported
# must be unset
unset replace_tmpdir
unset run_once
unset run_test
unset TMPDIR

View file

@ -145,6 +145,7 @@ EOF
'sleep 0.{#}; cat t1.{#} t2.{%}' ::: 1 2 ::: a b
echo should give no files
ls t[12].*
rm "$tmp1" "$tmp2"
}
par_resume_k() {
@ -732,6 +733,7 @@ par_wd_3dot_local() {
parallel --wd ... 'pwd; echo "$OLDPWD"; echo' ::: OK
parallel --wd . 'pwd; echo "$OLDPWD"; echo' ::: OK
) |
replace_tmpdir |
perl -pe 's:/mnt/4tb::; s:/home/tange:~:;' |
perl -pe 's:parallel./:parallel/:;' |
perl -pe 's/'`hostname`'/hostname/g; s/\d+/0/g'
@ -773,7 +775,8 @@ par_parcat_rm() {
par_linebuffer_files() {
echo '### bug #48658: --linebuffer --files'
stdout parallel --files --linebuffer 'sleep .1;seq {};sleep .1' ::: {1..10} | wc -l
stdout parallel --files --linebuffer 'sleep .1;seq {};sleep .1' ::: {1..10} |
replace_tmpdir | perl -pe 's:/par......par:/parXXXXX.par:'
}
par_halt_one_job() {
@ -812,7 +815,8 @@ par_pipe_tag_v() {
seq 3 | parallel -v --pipe --tagstring foo cat
# This should only give the filename
seq 3 | parallel -v --pipe --tagstring foo --files cat |
perl -pe 's:/tmp/par.*.par:/tmp/tmpfile.par:'
replace_tmpdir |
perl -pe 's:/par.*.par:/tmpfile.par:'
}
par_dryrun_append_joblog() {
@ -896,9 +900,10 @@ par_testquote() {
export -f testquote
# "sash script" does not work
# "sash -f script" does, but is currently not supported by GNU Parallel
parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh "sash -f" sh static-sh tcsh yash zsh
# "fdsh" is currently not supported by GNU Parallel:
# It gives ioctl(): Interrupted system call
parallel --tag -k testquote ::: ash bash csh dash fdsh fish fizsh ksh ksh93 mksh posh rbash rc rzsh "sash -f" sh static-sh tcsh yash zsh
parallel --tag -k testquote ::: fdsh
}
par_locale_quoting() {

View file

@ -295,10 +295,11 @@ par_failing_compressor() {
parallel -k {tag} {lb} {files} --compress --compress-program {comp} --decompress-program {decomp} doit ::: C={comp},D={decomp} \
,,, tag --tag -k \
,,, lb --line-buffer -k \
,,, files --files -k \
,,, files --files0 -k \
,,, comp 'cat;true' 'cat;false' \
,,, decomp 'cat;true' 'cat;false' |
perl -pe 's:/.*par......par:/tmpfile:'
replace_tmpdir |
perl -pe 's:/par......par:/tmpfile:'
}
par_fifo_under_csh() {
@ -315,92 +316,97 @@ par_fifo_under_csh() {
par_parset() {
echo '### test parset'
. `which env_parallel.bash`
(
. `which env_parallel.bash`
echo 'Put output into $myarray'
parset myarray -k seq 10 ::: 14 15 16
echo "${myarray[1]}"
echo 'Put output into $myarray'
parset myarray -k seq 10 ::: 14 15 16
echo "${myarray[1]}"
echo 'Put output into vars "$seq, $pwd, $ls"'
parset "seq pwd ls" -k ::: "seq 10" pwd ls
echo "$seq"
echo 'Put output into vars "$seq, $pwd, $ls"'
parset "seq pwd ls" -k ::: "seq 10" pwd ls
echo "$seq"
echo 'Put output into vars ($seq, $pwd, $ls)':
into_vars=(seq pwd ls)
parset "${into_vars[*]}" -k ::: "seq 5" pwd ls
echo "$seq"
echo 'Put output into vars ($seq, $pwd, $ls)':
into_vars=(seq pwd ls)
parset "${into_vars[*]}" -k ::: "seq 5" pwd ls
echo "$seq"
echo 'The commands to run can be an array'
cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd")
parset data -k ::: "${cmd[@]}"
echo "${data[0]}"
echo "${data[1]}"
echo 'The commands to run can be an array'
cmd=("echo '<<joe \"double space\" cartoon>>'" "pwd")
parset data -k ::: "${cmd[@]}"
echo "${data[0]}"
echo "${data[1]}"
echo 'You cannot pipe into parset, but must use a tempfile'
seq 10 > /tmp/parset_input_$$
parset res -k echo :::: /tmp/parset_input_$$
echo "${res[0]}"
echo "${res[9]}"
rm /tmp/parset_input_$$
echo 'You cannot pipe into parset, but must use a tempfile'
seq 10 > /tmp/parset_input_$$
parset res -k echo :::: /tmp/parset_input_$$
echo "${res[0]}"
echo "${res[9]}"
rm /tmp/parset_input_$$
echo 'or process substitution'
parset res -k echo :::: <(seq 0 10)
echo "${res[0]}"
echo "${res[9]}"
echo 'or process substitution'
parset res -k echo :::: <(seq 0 10)
echo "${res[0]}"
echo "${res[9]}"
echo 'Commands with newline require -0'
parset var -k -0 ::: 'echo "line1
echo 'Commands with newline require -0'
parset var -k -0 ::: 'echo "line1
line2"' 'echo "command2"'
echo "${var[0]}"
echo "${var[0]}"
) | replace_tmpdir
}
par_parset2() {
. `which env_parallel.bash`
echo '### parset into array'
parset arr1 echo ::: foo bar baz
echo ${arr1[0]} ${arr1[1]} ${arr1[2]}
(
. `which env_parallel.bash`
echo '### parset into vars with comma'
parset comma3,comma2,comma1 echo ::: baz bar foo
echo $comma1 $comma2 $comma3
parset arr1 echo ::: foo bar baz
echo ${arr1[0]} ${arr1[1]} ${arr1[2]}
echo '### parset into vars with space'
parset 'space3 space2 space1' echo ::: baz bar foo
echo $space1 $space2 $space3
echo '### parset into vars with comma'
parset comma3,comma2,comma1 echo ::: baz bar foo
echo $comma1 $comma2 $comma3
echo '### parset with newlines'
parset 'newline3 newline2 newline1' seq ::: 3 2 1
echo "$newline1"
echo "$newline2"
echo "$newline3"
echo '### parset into vars with space'
parset 'space3 space2 space1' echo ::: baz bar foo
echo $space1 $space2 $space3
echo '### parset into indexed array vars'
parset 'myarray[6],myarray[5],myarray[4]' echo ::: baz bar foo
echo ${myarray[*]}
echo ${myarray[4]} ${myarray[5]} ${myarray[5]}
echo '### parset with newlines'
parset 'newline3 newline2 newline1' seq ::: 3 2 1
echo "$newline1"
echo "$newline2"
echo "$newline3"
echo '### env_parset'
alias myecho='echo myecho "$myvar" "${myarr[1]}"'
myvar="myvar"
myarr=("myarr 0" "myarr 1" "myarr 2")
mynewline="`echo newline1;echo newline2;`"
env_parset arr1 myecho ::: foo bar baz
echo "${arr1[0]} ${arr1[1]} ${arr1[2]}"
env_parset comma3,comma2,comma1 myecho ::: baz bar foo
echo "$comma1 $comma2 $comma3"
env_parset 'space3 space2 space1' myecho ::: baz bar foo
echo "$space1 $space2 $space3"
env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1
echo "$newline1"
echo "$newline2"
echo "$newline3"
env_parset 'myarray[6],myarray[5],myarray[4]' myecho ::: baz bar foo
echo "${myarray[*]}"
echo "${myarray[4]} ${myarray[5]} ${myarray[5]}"
echo '### parset into indexed array vars'
parset 'myarray[6],myarray[5],myarray[4]' echo ::: baz bar foo
echo ${myarray[*]}
echo ${myarray[4]} ${myarray[5]} ${myarray[5]}
echo 'bug #52507: parset arr1 -v echo ::: fails'
parset arr1 -v seq ::: 1 2 3
echo "${arr1[2]}"
echo '### env_parset'
alias myecho='echo myecho "$myvar" "${myarr[1]}"'
myvar="myvar"
myarr=("myarr 0" "myarr 1" "myarr 2")
mynewline="`echo newline1;echo newline2;`"
env_parset arr1 myecho ::: foo bar baz
echo "${arr1[0]} ${arr1[1]} ${arr1[2]}"
env_parset comma3,comma2,comma1 myecho ::: baz bar foo
echo "$comma1 $comma2 $comma3"
env_parset 'space3 space2 space1' myecho ::: baz bar foo
echo "$space1 $space2 $space3"
env_parset 'newline3 newline2 newline1' 'echo "$mynewline";seq' ::: 3 2 1
echo "$newline1"
echo "$newline2"
echo "$newline3"
env_parset 'myarray[6],myarray[5],myarray[4]' myecho ::: baz bar foo
echo "${myarray[*]}"
echo "${myarray[4]} ${myarray[5]} ${myarray[5]}"
echo 'bug #52507: parset arr1 -v echo ::: fails'
parset arr1 -v seq ::: 1 2 3
echo "${arr1[2]}"
) | replace_tmpdir
}
par_perlexpr_repl() {
@ -664,12 +670,13 @@ par_results_csv() {
doit() {
parallel -k $@ --results -.csv echo ::: H2 22 23 ::: H1 11 12 \
2> >(grep -v TMPDIR)
2> >(grep -v TMPDIR) |
replace_tmpdir
}
export -f doit
parallel -k --tag doit ::: '--header :' '' \
::: --tag '' ::: --files '' ::: --compress '' |
perl -pe 's:/.*par......par:/tmpfile:g;s/\d+\.\d+/999.999/g'
::: --tag '' ::: --files0 '' ::: --compress '' |
perl -pe 's:/par......par:/tmpfile:g;s/\d+\.\d+/999.999/g'
}
par_kill_children_timeout() {
@ -692,7 +699,9 @@ par_kill_children_timeout() {
par_tmux_fg() {
echo 'bug #50107: --tmux --fg should also write how to access it'
stdout parallel --tmux --fg sleep ::: 3 | perl -pe 's:/tmp.*tms.....:tmpfile:'
stdout parallel --tmux --fg sleep ::: 3 |
replace_tmpdir |
perl -pe 's:/tms.....:tmpfile:'
}
@ -768,5 +777,4 @@ compgen -A function | grep par_ | LC_ALL=C sort |
perl -pe 's/,31,0/,15,0/' |
# Replace $PWD with . even if given as ~/...
perl -pe 's:~:'"$HOME"':g' |
perl -pe 's:'"$PWD"':.:g' |
perl -pe 's:'"$HOME"':~:g'

View file

@ -39,32 +39,38 @@ par_plus() {
par_file_rpl() {
echo '### file as replacement string'
TMPDIR=/tmp/parallel-local-1s/" "/bar
mkdir -p "$TMPDIR"
tmp="$(mktemp)"
(
echo contest1
echo contest2
echo content1
echo content2
echo File name "$tmp"
) > "$tmp"
(
# {filename}
echo '# {filename}'
parallel -k --header 0 echo {"$tmp"} :::: "$tmp"
# Conflict: both {filename} and {/regexp/rpl}
echo '# Conflict: both {filename} and {/regexp/rpl}'
parallel -k --plus echo {"$tmp"} :::: "$tmp"
echo '# --header 0 --plus'
parallel -k --header 0 --plus echo {"$tmp"} :::: "$tmp"
tmpd="$(mktemp -d)"
cd "$tmpd"
# Conflict: both {filename} and {n}
echo '# Conflict: both {filename} and {n}'
seq 1 > 1
seq 2 > 2
seq 3 > 3
parallel -k echo {1} :::: 3 2 1
parallel -k --header 0 echo {1} :::: 3 2 1
# Conflict: both {filename} and {=expr=}
echo '# Conflict: both {filename} and {=expr=}'
seq 3 > =chop=
parallel -k echo {=chop=} ::: =chop=
parallel -k --header 0 echo {=chop=} ::: =chop=
rm -rf "$tmpd"
) | perl -pe 's/tmp\.\w+/tmp.XXXXXX/g'
) | replace_tmpdir | perl -pe 's/tmp\.\w+/tmp.XXXXXX/g'
rm "$tmp"
}
@ -403,8 +409,9 @@ par_profiles_with_space() {
echo '### bug #42902: profiles containing arguments with space'
echo "--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' " > ~/.parallel/FULLPATH;
parallel -JFULLPATH echo FULLPATH ::: $0
PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' -v" parallel echo FULLPATH ::: $0
PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' -v" parallel echo FULLPATH ::: "$0"
PARALLEL="--rpl 'FULLPATH chomp(\$_=\"/bin/bash=\".\`readlink -f \$_\`);' perl -e \'print \\\"@ARGV\\\n\\\"\' " parallel With script in \\\$PARALLEL FULLPATH ::: . |
replace_tmpdir |
perl -pe 's:parallel./:parallel/:'
}

View file

@ -123,29 +123,36 @@ par_exit_code() {
export -f in_shell_run_command
runit() {
doit() {
s=100
rm -f /tmp/mysleep
cp /bin/sleep /tmp/mysleep
parallel -kj500% --argsep ,, --tag in_shell_run_command {1} {2} \
,, "$@" ,, \
"/tmp/mysleep "$s \
"parallel --halt-on-error now,fail=1 /tmp/mysleep ::: "$s \
"parallel --halt-on-error now,done=1 /tmp/mysleep ::: "$s \
"parallel --halt-on-error now,done=1 /bin/true ::: "$s \
"parallel --halt-on-error now,done=1 exit ::: "$s \
"true;/tmp/mysleep "$s \
"parallel --halt-on-error now,fail=1 'true;/tmp/mysleep' ::: "$s \
"parallel --halt-on-error now,done=1 'true;/tmp/mysleep' ::: "$s \
"parallel --halt-on-error now,done=1 'true;/bin/true' ::: "$s \
"parallel --halt-on-error now,done=1 'true;exit' ::: "$s
}
echo '# Ideally the command should return the same'
echo '# with or without parallel'
# These give the same exit code prepended with 'true;' or not
OK="ash csh dash fish fizsh ksh2020 posh rc sash sh tcsh"
# These do not give the same exit code prepended with 'true;' or not
BAD="bash fdsh ksh93 mksh static-sh yash zsh"
s=100
rm -f /tmp/mysleep
cp /bin/sleep /tmp/mysleep
echo '# Ideally the command should return the same'
echo '# with or without parallel'
echo '# but fish 2.4.0 returns 1 while X.X.X returns 0'
parallel -kj500% --argsep ,, --tag in_shell_run_command {1} {2} \
,, $OK $BAD ,, \
"/tmp/mysleep "$s \
"parallel --halt-on-error now,fail=1 /tmp/mysleep ::: "$s \
"parallel --halt-on-error now,done=1 /tmp/mysleep ::: "$s \
"parallel --halt-on-error now,done=1 /bin/true ::: "$s \
"parallel --halt-on-error now,done=1 exit ::: "$s \
"true;/tmp/mysleep "$s \
"parallel --halt-on-error now,fail=1 'true;/tmp/mysleep' ::: "$s \
"parallel --halt-on-error now,done=1 'true;/tmp/mysleep' ::: "$s \
"parallel --halt-on-error now,done=1 'true;/bin/true' ::: "$s \
"parallel --halt-on-error now,done=1 'true;exit' ::: "$s
BAD="bash ksh93 mksh static-sh yash zsh"
doit $OK $BAD
# fdsh does not like weird TMPDIR with \n
BROKEN="fdsh"
TMPDIR=/tmp
cd /tmp
doit $BROKEN
}
export -f runit

View file

@ -42,10 +42,12 @@ par_parcat_mixing() {
par_tmux_termination() {
echo '### --tmux test - check termination'
TMPDIR=/tmp
doit() {
perl -e 'map {printf "$_%o%c\n",$_,$_}1..255' |
stdout parallel --tmux 'sleep 0.2;echo {}' :::: - ::: a b |
perl -pe 's:(/tmp\S*/tms).....:$1XXXXX:;'
replace_tmpdir |
perl -pe 's:(/tms).....:$1XXXXX:;'
}
export -f doit
stdout parallel --timeout 120 doit ::: 1
@ -117,9 +119,9 @@ par_delay_Xauto() {
doit() {
perl -e '$a=shift;
$m = -M $a < 0.0000001;
`touch $a`;
system "touch", $a;
print "$m\n";
exit $m;' $1;
exit $m;' "$1";
}
export -f doit
before=`date +%s`

View file

@ -34,7 +34,7 @@ par_sshpass_with_password() {
echo OK | parallel -S withpassword:@lo:22 echo
}
par_ssh_ssh() {
par_--ssh_ssh_in_ssh() {
echo '### bug #61894: Pack ssh code in eval protection'
echo Unquoted ssh should work
parallel --ssh 'ssh lo ssh' -S lo 'hostname;echo' ::: OK
@ -190,7 +190,7 @@ par_trc_dashdashdashspace() {
parallel --nonall -k -S csh@lo,sh@lo 'ls ./?--- ./---? || echo OK' | LC_ALL=C sort
}
par_onall_transfer() {
par_--onall_--transfer() {
echo '### bug #46519: --onall ignores --transfer'
touch bug46519.{a,b,c}; rm -f bug46519.?? bug46519.???
parallel --onall --tf bug46519.{} --trc bug46519.{}{} --trc bug46519.{}{}{} -S csh@lo,sh@lo 'ls bug46519.{}; touch bug46519.{}{} bug46519.{}{}{}' ::: a b c
@ -205,7 +205,7 @@ par_--onall_--plus() {
parallel -S bash@lo --nonall --plus echo {host}
}
par_remote_load() {
par__remote_load() {
echo '### Test --load remote'
ssh parallel@lo 'seq 10 | parallel --nice 19 --timeout 15 -j0 -qN0 perl -e while\(1\)\{\ \}' &
sleep 1

View file

@ -7,7 +7,7 @@
# /tmp/parallel-local-ssh2 will by default be owned by me and should be writable by *@localhost
chmod 777 "$TMPDIR" 2>/dev/null
par_obey_servers_capacity_slf_reload() {
par__obey_servers_capacity_slf_reload() {
echo "### bug #43518: GNU Parallel doesn't obey servers' jobs capacity when an ssh login file is reloaded"
# Pre-20141106 Would reset the number of jobs run on all sshlogin if --slf changed
# Thus must take at least 25 sec to run
@ -19,7 +19,7 @@ par_obey_servers_capacity_slf_reload() {
rm /tmp/parallel.bug43518
}
par_filter_hosts_slf() {
par_z_filter_hosts_slf() {
echo '### --filter-hosts --slf <()'
parallel --nonall --filter-hosts --slf <(echo localhost) echo OK
}

View file

@ -9,7 +9,7 @@ unset run_once
# SSH only allowed to localhost/lo
par_sshloginfile() {
par_z_sshloginfile() {
echo '### --slf with mIxEd cAsE'
tmp=$(mktemp)
(
@ -21,7 +21,7 @@ par_sshloginfile() {
rm -f "$tmp"
}
par_nonall_results() {
par_--nonall_results() {
echo '### --results --onall'
tmp="$TMPDIR"/onall
mkdir -p "$tmp"
@ -31,7 +31,7 @@ par_nonall_results() {
parallel --results "$tmp"/rplnoslash/{} --onall -Scsh@lo,sh@lo ::: id pwd
parallel --results "$tmp"/rpl1slash/{1}/ --onall -Scsh@lo,sh@lo ::: id pwd
parallel --results "$tmp"/rpl1noslash/{1} --onall -Scsh@lo,sh@lo ::: id pwd
find "$tmp"
find "$tmp" -print0 | replace_tmpdir
rm -r "$tmp"
echo '### --results --nonall'
tmp="$TMPDIR"/nonall
@ -42,7 +42,7 @@ par_nonall_results() {
parallel --results "$tmp"/rplnoslash/{} --nonall -Scsh@lo,sh@lo pwd
parallel --results "$tmp"/rpl1slash/{1}/ --nonall -Scsh@lo,sh@lo pwd
parallel --results "$tmp"/rpl1noslash/{1} --nonall -Scsh@lo,sh@lo pwd
find "$tmp"
find "$tmp" -print0 | replace_tmpdir
rm -r "$tmp"
}
@ -131,38 +131,57 @@ par_bigvar_rc() {
parallel --env A,B,C -k echo '"'"'${}|wc'"'"' ::: A B C'
}
par_tmux_different_shells() {
par_--tmux_different_shells() {
echo '### Test tmux works on different shells'
(stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux echo ::: 1 2 3 4; echo $?) |
grep -v 'attach';
(stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?) |
grep -v 'attach';
short_TMPDIR() {
# TMPDIR must be short for -M
export TMPDIR=/tmp/ssh/'
`touch /tmp/tripwire`
'
TMPDIR=/tmp
mkdir -p "$TMPDIR"
}
short_TMPDIR
(
stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux echo ::: 1 2 3 4; echo $?
stdout parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux false ::: 1 2 3 4; echo $?
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
stdout ssh zsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output';
stdout ssh zsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output';
stdout ssh parallel@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $?' | grep -v 'See output';
stdout ssh parallel@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $?' | grep -v 'See output';
stdout ssh tcsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output';
stdout ssh tcsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output';
echo "# command is currently too long for csh. Maybe it can be fixed?";
stdout ssh csh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status' | grep -v 'See output';
stdout ssh csh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status' | grep -v 'See output'
export PARTMUX='parallel -Scsh@lo,tcsh@lo,parallel@lo,zsh@lo --tmux ';
stdout ssh zsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status'
stdout ssh zsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status'
stdout ssh parallel@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $?'
stdout ssh parallel@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $?'
stdout ssh tcsh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status'
stdout ssh tcsh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status'
echo "# command is currently too long for csh. Maybe it can be fixed?";
stdout ssh csh@lo "$PARTMUX" 'true ::: 1 2 3 4; echo $status'
stdout ssh csh@lo "$PARTMUX" 'false ::: 1 2 3 4; echo $status'
) | replace_tmpdir | perl -pe 's/tms...../tmsXXXXX/g'
}
par_tmux_length() {
par_--tmux_length() {
echo '### works'
stdout parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ |
perl -pe 's:/tmp/.*tms.....::'
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
perl -pe 's:/tmp/.*tms.....::'
short_TMPDIR() {
# TMPDIR must be short for -M
export TMPDIR=/tmp/ssh/'
`touch /tmp/tripwire`
'
TMPDIR=/tmp
mkdir -p "$TMPDIR"
}
short_TMPDIR
(
stdout parallel -Sparallel@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
stdout parallel -Sparallel@lo --tmux echo ::: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo '### These blocked due to length'
stdout parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
stdout parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
stdout parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
stdout parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@ | grep -v 'attach'
stdout parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111 | grep -v 'attach'
echo '### These blocked due to length'
stdout parallel -Slo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
stdout parallel -Scsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
stdout parallel -Stcsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
stdout parallel -Szsh@lo --tmux echo ::: \\\\\\\"\\\\\\\"\\\;\@
stdout parallel -Scsh@lo --tmux echo ::: 111111111111111111111111111111111111111111111111111111111
) | replace_tmpdir |
perl -pe 's:tms.....:tmsXXXXX:'
}
par_transfer_return_multiple_inputs() {
@ -176,12 +195,12 @@ par_transfer_return_multiple_inputs() {
rm /tmp/file1 /tmp/file2 /tmp/file1.a /tmp/file2.b
}
par_csh_nice() {
par_z_csh_nice() {
echo '### bug #44143: csh and nice'
parallel --nice 1 -S csh@lo setenv B {}\; echo '$B' ::: OK
}
par_multiple_hosts_repeat_arg() {
par_z_multiple_hosts_repeat_arg() {
echo '### bug #45575: -m and multiple hosts repeats first args'
seq 1 3 | parallel -X -S 2/lo,2/: -k echo
}

View file

@ -7,6 +7,7 @@
# SSH only allowed to localhost/lo
par_ssh_cmd_with_newline() {
echo '### Check --ssh with \n works'
ssh=$(mktemp)
@ -17,15 +18,25 @@ par_ssh_cmd_with_newline() {
par_controlmaster() {
echo '### Check -M works if TMPDIR contains space'
short_TMPDIR() {
# TMPDIR must be short for -M
export TMPDIR=/tmp/ssh/'
`touch /tmp/tripwire`
'
TMPDIR=/tmp
mkdir -p "$TMPDIR"
}
short_TMPDIR
(
seq 1 3 | parallel -j10 --retries 3 -k -M -S sh@lo echo
seq 1 3 | parallel -j10 --retries 3 -k -M -S sh@lo echo
)
echo Part2
parallel -j1 -k -M -S sh@lo echo ::: OK
stdout parallel -j1 -k -M -S sh@lo echo ::: OK | replace_tmpdir
}
par_autossh() {
par_--ssh_autossh() {
echo '### --ssh autossh'
(
export PARALLEL_SSH=autossh; export AUTOSSH_PORT=0
@ -54,12 +65,21 @@ par_input_loss_pipe() {
seq 10000 | xargs | parallel --pipe -S 8/localhost cat 2>/dev/null | wc
}
par_controlmaster_eats() {
par_--controlmaster_eats() {
echo 'bug #36707: --controlmaster eats jobs'
short_TMPDIR() {
# TMPDIR must be short for -M
export TMPDIR=/tmp/ssh/'
`touch /tmp/tripwire`
'
TMPDIR=/tmp
mkdir -p "$TMPDIR"
}
short_TMPDIR
seq 2 | parallel -k --controlmaster --sshlogin lo echo OK{}
}
par_lsh() {
par_--ssh_lsh() {
echo '### --ssh lsh'
parallel --ssh 'lsh -c aes256-ctr' -S lo echo ::: OK
echo OK | parallel --ssh 'lsh -c aes256-ctr' --pipe -S csh@lo cat
@ -85,7 +105,7 @@ par_env_parallel_onall() {
env_parallel -Slo --nonall doit works
}
par_command_len_shellquote() {
par_--shellquote_command_len() {
echo '### test quoting will not cause a crash if too long'
# echo "'''" | parallel --shellquote --shellquote --shellquote --shellquote

View file

@ -184,7 +184,7 @@ par_sshlogin_replacement() {
parallel -S '5//usr/bin/ssh '$SSHLOGIN1 --plus echo {sshlogin} {} {host} ::: and
}
par_timeout_onall() {
par_onall_timeout() {
echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
parallel -j0 --timeout 6 --onall -S localhost,$SSHLOGIN1 'sleep {}; echo slept {}' ::: 1 8 9
echo jobs failed: $?

View file

@ -10,7 +10,7 @@ echo '### test --env _, env_parallel for different shells'
## par_*_man = tests from the man page
#
par_ash_man() {
par__man_ash() {
echo '### ash'
myscript=$(cat <<'_EOF'
@ -67,7 +67,7 @@ _EOF
ssh ash@lo "$myscript"
}
par_bash_man() {
par__man_bash() {
echo '### bash'
myscript=$(cat <<'_EOF'
@ -139,7 +139,7 @@ _EOF
ssh bash@lo "$myscript"
}
par_csh_man() {
par__man_csh() {
echo '### csh'
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
@ -183,7 +183,7 @@ _EOF
stdout ssh csh@lo "$myscript" | LC_ALL=C sort
}
par_dash_man() {
par__man_dash() {
echo '### dash'
myscript=$(cat <<'_EOF'
@ -240,7 +240,7 @@ _EOF
ssh dash@lo "$myscript"
}
par_fish_man() {
par__man_fish() {
echo '### fish'
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
@ -298,7 +298,7 @@ _EOF
ssh fish@lo "$myscript" | LC_ALL=C sort
}
par_ksh_man() {
par__man_ksh() {
echo '### ksh'
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
@ -365,7 +365,7 @@ _EOF
ssh ksh@lo "$myscript"
}
par_mksh_man() {
par__man_mksh() {
echo '### mksh'
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
@ -430,7 +430,7 @@ _EOF
ssh mksh@lo "$myscript"
}
par_sh_man() {
par__man_sh() {
echo '### sh'
myscript=$(cat <<'_EOF'
@ -487,7 +487,7 @@ _EOF
ssh sh@lo "$myscript"
}
par_tcsh_man() {
par__man_tcsh() {
echo '### tcsh'
myscript=$(cat <<'_EOF'
echo "### From man env_parallel"
@ -531,7 +531,7 @@ _EOF
ssh -tt tcsh@lo "$myscript"
}
par_zsh_man() {
par__man_zsh() {
echo '### zsh'
# eval is needed make aliases work
myscript=$(cat <<'_EOF'
@ -605,7 +605,7 @@ _EOF
}
par_ash_underscore() {
par_--env_underscore_ash() {
echo '### ash'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -653,7 +653,7 @@ _EOF
ssh ash@lo "$myscript"
}
par_bash_underscore() {
par_--env_underscore_bash() {
echo '### bash'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -702,7 +702,7 @@ _EOF
stdout ssh bash@lo "$myscript"
}
par_csh_underscore() {
par_--env_underscore_csh() {
echo '### csh'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -737,7 +737,7 @@ _EOF
ssh -tt csh@lo "$myscript"
}
par_dash_underscore() {
par_--env_underscore_dash() {
echo '### dash'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -785,7 +785,7 @@ _EOF
ssh dash@lo "$myscript"
}
par_fish_underscore() {
par_--env_underscore_fish() {
echo '### fish'
myscript=$(cat <<'_EOF'
echo "Fish is broken"
@ -849,7 +849,7 @@ _EOF
perl -ne '/fish:|fish\(/ and next; print'
}
par_ksh_underscore() {
par_--env_underscore_ksh() {
echo '### ksh'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -897,7 +897,7 @@ _EOF
ssh ksh@lo "$myscript"
}
par_mksh_underscore() {
par_--env_underscore_mksh() {
echo '### mksh'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -945,7 +945,7 @@ _EOF
ssh mksh@lo "$myscript"
}
par_sh_underscore() {
par_--env_underscore_sh() {
echo '### sh'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -993,7 +993,7 @@ _EOF
ssh sh@lo "$myscript"
}
par_tcsh_underscore() {
par_--env_underscore_tcsh() {
echo '### tcsh'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -1028,7 +1028,7 @@ _EOF
ssh -tt tcsh@lo "$myscript"
}
par_zsh_underscore() {
par_--env_underscore_zsh() {
echo '### zsh'
myscript=$(cat <<'_EOF'
echo "### Testing of --env _"
@ -1086,7 +1086,7 @@ _EOF
# + remote, locally
# + variables, variables with funky content, arrays, assoc array, functions, aliases
par_ash_funky() {
par_funky_ash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ash`;
@ -1119,7 +1119,7 @@ _EOF
ssh ash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_bash_funky() {
par_funky_bash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.bash`;
@ -1152,7 +1152,7 @@ _EOF
ssh bash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_csh_funky() {
par_funky_csh() {
myscript=$(cat <<'_EOF'
set myvar = "myvar works"
set funky = "`perl -e 'print pack q(c*), 2..255'`"
@ -1185,7 +1185,7 @@ _EOF
stdout ssh csh@lo "$myscript" | LC_ALL=C sort
}
par_dash_funky() {
par_funky_dash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.dash`;
@ -1218,7 +1218,7 @@ _EOF
ssh dash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_fish_funky() {
par_funky_fish() {
myscript=$(cat <<'_EOF'
env_parallel --session
set myvar "myvar works"
@ -1264,7 +1264,7 @@ _EOF
ssh fish@lo "$myscript"
}
par_ksh_funky() {
par_funky_ksh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ksh`;
@ -1296,7 +1296,7 @@ _EOF
ssh ksh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_mksh_funky() {
par_funky_mksh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.mksh`;
@ -1329,7 +1329,7 @@ _EOF
ssh mksh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_sh_funky() {
par_funky_sh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.sh`;
@ -1362,7 +1362,7 @@ _EOF
ssh sh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_tcsh_funky() {
par_funky_tcsh() {
myscript=$(cat <<'_EOF'
# funky breaks with different LC_ALL
setenv LC_ALL C
@ -1397,7 +1397,7 @@ _EOF
ssh tcsh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_zsh_funky() {
par_funky_zsh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.zsh`;
@ -1429,7 +1429,7 @@ _EOF
ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_ash_env_parallel() {
par_env_parallel_ash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ash`;
echo 'bug #50435: Remote fifo broke in 20150522'
@ -1454,7 +1454,7 @@ _EOF
ssh ash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_bash_env_parallel() {
par_env_parallel_bash() {
myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred
@ -1479,7 +1479,7 @@ _EOF
ssh bash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_csh_env_parallel() {
par_env_parallel_csh() {
myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred
@ -1491,7 +1491,7 @@ _EOF
ssh csh@lo "$myscript"
}
par_dash_env_parallel() {
par_env_parallel_dash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.dash`;
echo 'bug #50435: Remote fifo broke in 20150522'
@ -1516,7 +1516,7 @@ _EOF
ssh dash@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_fish_env_parallel() {
par_env_parallel_fish() {
myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred
@ -1535,7 +1535,7 @@ _EOF
ssh fish@lo "$myscript"
}
par_ksh_env_parallel() {
par_env_parallel_ksh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ksh`;
echo 'bug #50435: Remote fifo broke in 20150522'
@ -1560,7 +1560,7 @@ _EOF
ssh ksh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_mksh_env_parallel() {
par_env_parallel_mksh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.mksh`;
echo 'bug #50435: Remote fifo broke in 20150522'
@ -1585,7 +1585,7 @@ _EOF
ssh mksh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_sh_env_parallel() {
par_env_parallel_sh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.sh`;
echo 'bug #50435: Remote fifo broke in 20150522'
@ -1610,7 +1610,7 @@ _EOF
ssh sh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_tcsh_env_parallel() {
par_env_parallel_tcsh() {
myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred
@ -1623,7 +1623,7 @@ _EOF
ssh tcsh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_zsh_env_parallel() {
par_env_parallel_zsh() {
myscript=$(cat <<'_EOF'
echo 'bug #50435: Remote fifo broke in 20150522'
# Due to $PARALLEL_TMP being transferred
@ -1647,7 +1647,7 @@ _EOF
ssh zsh@lo "$myscript" 2>&1 | LC_ALL=C sort
}
par_ash_environment_too_big() {
par_environment_too_big_ash() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_var=63
@ -1717,7 +1717,7 @@ _EOF
ssh ash@lo "$myscript"
}
par_bash_environment_too_big() {
par_environment_too_big_bash() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_overhead=-$( (shopt;alias;typeset -f;typeset -p) | wc -c)/1000
@ -1788,11 +1788,11 @@ _EOF
ssh bash@lo "$myscript"
}
par_csh_environment_too_big() {
par_environment_too_big_csh() {
echo Not implemented
}
par_dash_environment_too_big() {
par_environment_too_big_dash() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_var=63
@ -1862,12 +1862,12 @@ _EOF
ssh dash@lo "$myscript"
}
par_fish_environment_too_big() {
par_environment_too_big_fish() {
echo Not implemented
}
par_ksh_environment_too_big() {
par_environment_too_big_ksh() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_functions=-$(functions|wc -c)/1000
@ -1939,7 +1939,7 @@ _EOF
ssh ksh@lo "$myscript"
}
par_mksh_environment_too_big() {
par_environment_too_big_mksh() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_var=47
@ -2010,7 +2010,7 @@ _EOF
ssh mksh@lo "$myscript"
}
par_sh_environment_too_big() {
par_environment_too_big_sh() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
len_var=63
@ -2080,11 +2080,11 @@ _EOF
ssh sh@lo "$myscript"
}
par_tcsh_environment_too_big() {
par_environment_too_big_tcsh() {
echo Not implemented
}
par_zsh_environment_too_big() {
par_environment_too_big_zsh() {
myscript=$(cat <<'_EOF'
echo 'bug #50815: env_parallel should warn if the environment is too big'
. `which env_parallel.zsh`;
@ -2136,7 +2136,7 @@ _EOF
ssh zsh@lo "$myscript"
}
par_ash_parset() {
par_parset_ash() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.ash`
@ -2199,7 +2199,7 @@ _EOF
ssh ash@lo "$myscript"
}
par_bash_parset() {
par_parset_bash() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.bash`
@ -2257,11 +2257,11 @@ _EOF
ssh bash@lo "$myscript"
}
par_csh_parset() {
par_parset_csh() {
echo Not implemented
}
par_dash_parset() {
par_parset_dash() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.dash`
@ -2324,11 +2324,11 @@ _EOF
ssh dash@lo "$myscript"
}
par_fish_parset() {
par_parset_fish() {
echo Not implemented
}
par_ksh_parset() {
par_parset_ksh() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.ksh`
@ -2386,7 +2386,7 @@ _EOF
ssh ksh@lo "$myscript"
}
par_mksh_parset() {
par_parset_mksh() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.mksh`
@ -2446,7 +2446,7 @@ _EOF
ssh mksh@lo "$myscript"
}
par_sh_parset() {
par_parset_sh() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.sh`
@ -2532,11 +2532,11 @@ _EOF
ssh sh@lo "$myscript"
}
par_tcsh_parset() {
par_parset_tcsh() {
echo Not implemented
}
par_zsh_parset() {
par_parset_zsh() {
myscript=$(cat <<'_EOF'
echo 'parset'
. `which env_parallel.zsh`
@ -2605,7 +2605,7 @@ _EOF
### env_parallel_session
par_ash_env_parallel_session() {
par_env_parallel_--session_ash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ash`
echo '### Test env_parallel --session'
@ -2706,7 +2706,7 @@ _EOF
ssh ash@lo "$myscript"
}
par_bash_env_parallel_session() {
par_env_parallel_--session_bash() {
myscript=$(cat <<'_EOF'
echo '### Test env_parallel --session / --end-session'
. `which env_parallel.bash`
@ -2798,11 +2798,11 @@ _EOF
ssh bash@lo "$myscript"
}
par_csh_env_parallel_session() {
par_env_parallel_--session_csh() {
echo Not implemented
}
par_dash_env_parallel_session() {
par_env_parallel_--session_dash() {
myscript=$(cat <<'_EOF'
. `which env_parallel.dash`
echo '### Test env_parallel --session'
@ -2903,7 +2903,7 @@ _EOF
ssh dash@lo "$myscript"
}
par_fish_env_parallel_session() {
par_env_parallel_--session_fish() {
myscript=$(cat <<'_EOF'
. (which env_parallel.fish)
@ -2945,7 +2945,7 @@ _EOF
ssh fish@lo "$myscript" 2>&1
}
par_ksh_env_parallel_session() {
par_env_parallel_--session_ksh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.ksh`
echo '### Test env_parallel --session'
@ -3035,7 +3035,7 @@ _EOF
ssh ksh@lo "$myscript"
}
par_mksh_env_parallel_session() {
par_env_parallel_--session_mksh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.mksh`
echo '### Test env_parallel --session'
@ -3125,7 +3125,7 @@ _EOF
ssh mksh@lo "$myscript"
}
par_sh_env_parallel_session() {
par_env_parallel_--session_sh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.sh`
echo '### Test env_parallel --session'
@ -3219,11 +3219,11 @@ _EOF
ssh sh@lo "$myscript"
}
par_tcsh_env_parallel_session() {
par_env_parallel_--session_tcsh() {
echo Not implemented
}
par_zsh_env_parallel_session() {
par_env_parallel_--session_zsh() {
myscript=$(cat <<'_EOF'
. `which env_parallel.zsh`
eval "`cat <<"_EOS";
@ -3321,7 +3321,7 @@ export -f $(compgen -A function | grep par_)
#compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
#compgen -A function | grep par_ | sort |
compgen -A function | grep par_ | LC_ALL=C sort -r |
compgen -A function | grep par_ | LC_ALL=C sort |
# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1'
# 2019-07-14 200% too high for 16 GB/4 thread
parallel --joblog /tmp/jl-`basename $0` -j75% --retries 2 --tag -k '{} 2>&1' |

View file

@ -70,13 +70,13 @@ _EOS
uniq
}
par_keep_order() {
par_z_keep_order() {
echo '### Test --keep-order'
seq 0 2 |
parallel --keep-order -j100% -S 1/:,2/parallel@lo -q perl -e 'sleep 1;print "job{}\n";exit({})'
}
par_keeporder() {
par_z_keeporder() {
echo '### Test --keeporder'
seq 0 2 |
parallel --keeporder -j100% -S 1/:,2/parallel@lo -q perl -e 'sleep 1;print "job{}\n";exit({})'
@ -87,7 +87,7 @@ par_load_csh() {
parallel --load 100% -S csh@lo echo ::: a
}
par_bar_m() {
par_z_bar_m() {
echo '### test --bar -m'
stdout parallel --bar -P 2 -m sleep ::: 1 1 2 2 3 3 |
perl -pe 's/\r/\n/g'|
@ -125,7 +125,7 @@ par_retries_4() {
retries 4 48 49
}
par_csh_environment_variables_set() {
par_z_csh_environment_variables_set() {
echo '### Check $PARALLEL_PID $PARALLEL_SEQ are set in csh'
parallel -S csh@localhost 'echo $PARALLEL_PID $PARALLEL_SEQ {}| wc -w' ::: a
}

View file

@ -152,7 +152,7 @@ par_propagate_env() {
par_env_parallel_big_env() {
echo '### bug #54128: command too long when exporting big env'
. `which env_parallel.bash`
a=`rand | perl -pe 's/\0//g'| head -c 20000`
a=`rand | perl -pe 's/\0//g'| head -c 15000`
env_parallel -Slo echo should not ::: fail 2>&1
a=`rand | perl -pe 's/\0//g'| head -c 25000`
env_parallel -Slo echo should ::: fail 2>/dev/null || echo OK

View file

@ -25,3 +25,11 @@ echo perl |
grep -v '\$' |
grep -v '] read(6' |
grep -v input-files/perllib
par_make_deb_package() {
echo '### Test make .deb package';
cd ~/privat/parallel/packager/debian;
stdout make | grep 'To install the GNU Parallel Debian package, run:'
}
par_make_deb_package

View file

@ -67,10 +67,6 @@ echo "### bug #35268: shell_quote doesn't treats [] brackets correctly"
stdout parallel echo ::: '/tmp/foo[123]';
rm /tmp/foo1
echo '### Test make .deb package';
cd ~/privat/parallel/packager/debian;
stdout make | grep 'To install the GNU Parallel Debian package, run:'
echo '### Test basic --arg-sep'
parallel -k echo ::: a b

View file

@ -232,6 +232,8 @@ EOF
}
par_shebang_wrap_clisp() {
# clisp cannot handle dirs w/ shell wildcards
TMPDIR=/tmp
script="$TMPDIR"/shebang_wrap_clisp
cat <<'EOF' > "$script"
#!/usr/local/bin/parallel --shebang-wrap -k /usr/bin/clisp

View file

@ -52,8 +52,8 @@ echo '### bug #42041: Implement $PARALLEL_JOBSLOT'
echo '### bug #42363: --pipepart and --fifo/--cat does not work'
seq 100 > /tmp/bug42363;
parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:';
parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:';
parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo 'cat {} | wc';
parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat 'cat {} | wc';
rm /tmp/bug42363
echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile'

View file

@ -6,7 +6,8 @@
par_tmux_filter() {
# /tmp/parallel-local7/tmsOU2Ig
perl -pe 's:(/tmp.*/tms).....:$1XXXXX:;s/ p\d+/pID/;'
replace_tmpdir |
perl -pe 's:/tms.....:/tmsXXXXX:;s/ p\d+/pID/;'
}
export -f par_tmux_filter

View file

@ -62,6 +62,7 @@ EOF
# Each should generate at least 2 commands
par_many_args() {
export PARALLEL="--_unsafe"
rm -f ~/.parallel/tmp/sshlogin/*/linelen
pecho() { perl -e 'print "@ARGV\n"' "$@"; }
export -f pecho
@ -84,6 +85,7 @@ par_many_var() {
}
par_many_var_func() {
export PARALLEL="--_unsafe"
export LC_ALL=C
rm -f ~/.parallel/tmp/sshlogin/*/linelen
gen() { seq -f %f 1000000000000000 1000000000050000 | head -c $1; }
@ -97,6 +99,7 @@ par_many_var_func() {
}
par_many_func() {
export PARALLEL="--_unsafe"
export LC_ALL=C
rm -f ~/.parallel/tmp/sshlogin/*/linelen
gen() { seq -f %f 1000000000000000 1000000000050000 | head -c $1; }
@ -109,6 +112,7 @@ par_many_func() {
}
par_big_func() {
export PARALLEL="--_unsafe"
export LC_ALL=C
rm -f ~/.parallel/tmp/sshlogin/*/linelen
gen() { seq -f %f 1000000000000000 1000000000050000 | head -c $1; }
@ -164,6 +168,7 @@ par_big_var_func_name() {
grep 18XXX
}
export PARALLEL="--_unsafe"
macsshlogin=$(parallel --halt now,success=1 ssh {} echo {} ::: ota@mac macosx.p)
scp /usr/local/bin/parallel $macsshlogin:bin/

View file

@ -52,11 +52,15 @@ par_controlmaster_is_faster() {
echo '### bug #41964: --controlmaster not seems to reuse OpenSSH connections to the same host'
echo '-M should finish first - eventhough there are 2x jobs'
export SSHLOGIN1=sh@lo
nl="$(printf "\n\n.")"
export TMPDIR="/tmp/ctrl_master/$nl'$nl"
mkdir -p "$TMPDIR"
(parallel -S $SSHLOGIN1 true ::: {1..20};
echo No --controlmaster - finish last) &
(parallel -M -S $SSHLOGIN1 true ::: {1..40};
echo With --controlmaster - finish first) &
wait
rm -r "/tmp/ctrl_master"
}
par_workdir_in_HOME() {

View file

@ -12,104 +12,107 @@ cleanup
touch ~/.parallel/will-cite
echo '### test parallel_tutorial'
TMPDIR=/tmp/parllel-tutorial
mkdir -p "$TMPDIR"
cd "$TMPDIR"
pwd=$(pwd)
# If not run in dir parallel/testsuite: set testsuitedir to path of testsuite
testsuitedir=${testsuitedir:-$pwd}
srcdir=$(echo "$testsuitedir" | perl -pe 's=$ENV{HOME}==')
export SERVER1=parallel@lo
export SERVER2=csh@lo
export PARALLEL=-k
perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' "$testsuitedir"/../src/parallel_tutorial.pod |
egrep -v 'curl|tty|parallel_tutorial|interactive|example.(com|net)|shellquote|works' |
perl -pe 's/username@//;s/user@//;
s/zenity/zenity --timeout=15/;
s:/usr/bin/time:/usr/bin/time -f %e:;
s:ignored_vars:ignored_vars|sort:;
# Remove \n to join all joblogs into the previous block
s:cat /tmp/log\n:cat /tmp/log;:;
# Remove import (python code)
s:import.*::;
# When parallelized: Sleep to make sure the abc-files are made
/%head1/ and $_.="sleep .3\n\n"x10;
egrep -v 'curl|tty|parallel_tutorial|interactive|example.(com|net)|shellquote|works' |
perl -pe 's/username@//;s/user@//;
s/zenity/zenity --timeout=15/;
s:/usr/bin/time:/usr/bin/time -f %e:;
s:ignored_vars:ignored_vars|sort:;
# Remove \n to join all joblogs into the previous block
s:cat /tmp/log\n:cat /tmp/log;:;
# Remove import (python code)
s:import.*::;
# When parallelized: Sleep to make sure the abc-files are made
/%head1/ and $_.="sleep .3\n\n"x10;
' |
stdout parallel --joblog /tmp/jl-`basename $0` -j6 -vd'\n\n' |
perl -pe '$|=1;
# --pipe --roundrobin wc
s: \d{6} \d{6} \d{7}: 999999 999999 9999999:;
# --tmux
s:(/tmp\S+)(tms).....:$1$2XXXXX:;
# --files
s:(/tmp\S+par).....(\....):$1XXXXX$2:;
# --eta --progress
s/ETA.*//g; s/local:.*//g;
# Sat Apr 4 11:55:40 CEST 2015
s/... ... .. ..:..:.. \D+ ..../DATE OUTPUT/;
# Timestamp from --joblog
s/\d{10}.\d{3}\s+..\d+/TIMESTAMP\t9.999/g;
# Version
s/20[0-3]\d{5}/VERSION/g;
# [123] [abc] [ABC]
s/^[123] [abc] [ABC]$/123 abc ABC/g;
# Remote script
s/(PARALLEL_PID\D+)\d+/${1}000000/g;
# sql timing
s/,[a-z]*,\d+.\d+,\d+.\d+/,:,000000000.000,0.000/g;
# /usr/bin/time -f %e
s/^(\d+)\.\d+$/$1/;
# --workdir ...
s:parallel/tmp/aspire-\d+-1:TMPWORKDIR:g;
# .../privat/parallel2/
s='$srcdir'==;
# + cat ... | (Bash outputs these in random order)
s/\+ cat.*\n//;
# + echo ... | (Bash outputs these in random order)
s/\+ echo.*\n//;
# + wc ... (Bash outputs these in random order)
s/\+ wc.*\n//;
# + command_X | (Bash outputs these in random order)
s/.*command_[ABC].*\n//;
# Due to multiple jobs "Second started" often ends up wrong
s/Second started\n//;
s/The second finished\n//;
# Due to multiple jobs "tried 2" often ends up wrong
s/tried 2\n//;
# Due to order is often mixed up
s/echo \d; exit \d\n/echo X; exit X\n/;
# Race condition causes outdir to sometime exist
s/(std(out|err)|seq): Permission denied/$1: No such file or directory/;
# Race condition
s/^4-(middle|end)\n//;
# Base 64 string with quotes
s:['"'"'"\\+/a-z.0-9=]{50,}(\s['"'"'"\\+/a-z.0-9=]*)*:BASE64:ig;
# Timings are often off
s/^(\d)$/9/;
s/^(\d\d)$/99/;
# Remove variable names - they vary
s/^[A-Z][A-Z0-9_]*\s$//;
# Fails often due to race
s/cat: input_file: No such file or directory\n//;
s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{};
s{rsync error: some files/attrs were not transferred .*\n}{};
s{.* GtkDialog .*\n}{};
s{tried 1}{};
s/^\s*\n//;
s/^Second done\n//;
# Changed citation
s/Tange, O. .* GNU Parallel .*//;
s:https.//doi.org/10.5281/.*::;
s/.software.tange_.*//;
s/title.*= .*Parallel .*//;
s/month.*= .*//;
s/doi.*=.*//;
s/url.*= .*doi.org.*//;
s/.Feel free to use .nocite.*//;
# tmpdir and files
s:/tmp/parallel-tutorial-tmpdir/par-job-\S+:script:g;
s:/tmp/par-job-\S+:script:g;
s:par......par:tempfile:g;
s:^tempfile\n::g;
' | uniq
stdout parallel --joblog /tmp/jl-`basename $0` -j6 -vd'\n\n' |
replace_tmpdir |
perl -pe '$|=1;
# --pipe --roundrobin wc
s: \d{6} \d{6} \d{7}: 999999 999999 9999999:;
# --tmux
s:(/TMP|/tmp)(/tms).....:$1$2XXXXX:;
# --files
s:(/TMP/par).....(\....):$1XXXXX$2:;
# --eta --progress
s/ETA.*//g; s/local:.*//g;
# Sat Apr 4 11:55:40 CEST 2015
s/... ... .. ..:..:.. \D+ ..../DATE OUTPUT/;
# Timestamp from --joblog
s/\d{10}.\d{3}\s+..\d+/TIMESTAMP\t9.999/g;
# Version
s/20[0-3]\d{5}/VERSION/g;
# [123] [abc] [ABC]
s/^[123] [abc] [ABC]$/123 abc ABC/g;
# Remote script
s/(PARALLEL_PID\D+)\d+/${1}000000/g;
# sql timing
s/,[a-z]*,\d+.\d+,\d+.\d+/,:,000000000.000,0.000/g;
# /usr/bin/time -f %e
s/^(\d+)\.\d+$/$1/;
# --workdir ...
s:parallel/tmp/aspire-\d+-1:TMPWORKDIR:g;
# .../privat/parallel2/
s='$srcdir'==;
# + cat ... | (Bash outputs these in random order)
s/\+ cat.*\n//;
# + echo ... | (Bash outputs these in random order)
s/\+ echo.*\n//;
# + wc ... (Bash outputs these in random order)
s/\+ wc.*\n//;
# + command_X | (Bash outputs these in random order)
s/.*command_[ABC].*\n//;
# Due to multiple jobs "Second started" often ends up wrong
s/Second started\n//;
s/The second finished\n//;
# Due to multiple jobs "tried 2" often ends up wrong
s/tried 2\n//;
# Due to order is often mixed up
s/echo \d; exit \d\n/echo X; exit X\n/;
# Race condition causes outdir to sometime exist
s/(std(out|err)|seq): Permission denied/$1: No such file or directory/;
# Race condition
s/^4-(middle|end)\n//;
# Base 64 string with quotes
s:['"'"'"\\+/a-z.0-9=]{50,}(\s['"'"'"\\+/a-z.0-9=]*)*:BASE64:ig;
# Timings are often off
s/^(\d)$/9/;
s/^(\d\d)$/99/;
# Remove variable names - they vary
s/^[A-Z][A-Z0-9_]*\s$//;
# Fails often due to race
s/cat: input_file: No such file or directory\n//;
s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{};
s{rsync error: some files/attrs were not transferred .*\n}{};
s{.* GtkDialog .*\n}{};
s{tried 1}{};
s/^\s*\n//;
s/^Second done\n//;
# Changed citation
s/Tange, O. .* GNU Parallel .*//;
s:https.//doi.org/10.5281/.*::;
s/.software.tange_.*//;
s/title.*= .*Parallel .*//;
s/month.*= .*//;
s/doi.*=.*//;
s/url.*= .*doi.org.*//;
s/.Feel free to use .nocite.*//;
# tmpdir and files
s:/tmp/parallel-tutorial-tmpdir/par-job-\S+:script:g;
s:/tmp/par-job-\S+:script:g;
s:par......par:tempfile:g;
s:^tempfile\n::g;
' | uniq
echo "### 3+3 .par files (from --files), 1 .tms-file from tmux attach"
find {"$TMPDIR",/var/tmp}/{fif,tms,par[^a]}* -mmin -10 -type f -print0 2>/dev/null |

View file

@ -102,8 +102,9 @@ sql --tablesize :sqlunittest | wc -l
sql --table-size :sqlunittest | wc -l
echo "### Test --debug"
sql --debug :sqlunittest "SELECT 'Yes it does' as 'Test if --debug works';" |
perl -pe 's:/tmp/...........sql:tmpfile:g'
stdout sql --debug :sqlunittest "SELECT 'Yes it does' as 'Test if --debug works';" |
replace_tmpdir |
perl -pe 's:/...........sql:/tmpfile:g'
echo "### Test --version -V"
sql --version | wc

View file

@ -11,7 +11,16 @@ SSHUSER2=vagrant
SSHLOGIN1=$SSHUSER1@$SERVER1
SSHLOGIN2=$SSHUSER2@$SERVER2
short_TMPDIR() {
# TMPDIR must be short for -M
export TMPDIR=/tmp/ssh/'
`touch /tmp/tripwire`
'
mkdir -p "$TMPDIR"
}
echo '### Test -M (--retries to avoid false errors)'
short_TMPDIR
seq 1 30 | parallel -j5 --retries 3 -k -M -S $SSHLOGIN1,$SSHLOGIN2 echo 2>/dev/null
seq 1 30 | parallel -j10 --retries 3 -k -M -S $SSHLOGIN1,$SSHLOGIN2 echo 2>/dev/null

View file

@ -7,6 +7,7 @@ par_PARALLEL_ENV OK as file
par_PARALLEL_ENV ### PARALLEL_ENV as fifo
par_PARALLEL_ENV OK as fifo
par_PARALLEL_HOME_not_exist ### bug #62311: --pipepart + ::: fail
par_PARALLEL_HOME_not_exist parallel: Warning: $PARALLEL_HOME can only contain [-a-z0-9_+,.%:/= ].
par_PARALLEL_HOME_not_exist OK
par_PARALLEL_HOME_not_exist Should warn:
par_PARALLEL_HOME_not_exist parallel: Warning: $PARALLEL_HOME (/does-not-exist) does not exist.
@ -14,6 +15,7 @@ par_PARALLEL_HOME_not_exist parallel: Warning: Using ~/.parallel
par_PARALLEL_HOME_not_exist should
par_PARALLEL_HOME_not_exist warn
par_PARALLEL_HOME_with_+ bug #59453: PARALLEL_HOME with plus sign causes error: config not readable
par_PARALLEL_HOME_with_+ parallel: Warning: $PARALLEL_HOME can only contain [-a-z0-9_+,.%:/= ].
par_PARALLEL_HOME_with_+ Parallel_home_with+
par_X_eta_div_zero ### bug #34422: parallel -X --eta crashes with div by zero
par_X_eta_div_zero Computers / CPU cores / Max jobs to run
@ -313,13 +315,23 @@ par_jobslot_jobnumber_pipe 1
par_jobslot_jobnumber_pipe 1
par_jobslot_jobnumber_pipe 1
par_jobslot_jobnumber_pipe 1
par_json { "Seq": 0, "Host": ":", "Starttime": 0000000000.000, "JobRuntime": 0.000, "Send": 0, "Receive": 0, "Exitval": 0, "Signal": 0, "Command": "echo '\"\u0000\\\"' '\"'", "V": [ "\"\u0000\\\"","\"" ], "Stdout": "\"\u0000\\\" \"\u000a", "Stderr": "" }
par_json { "Seq": 0, "Host": ":", "Starttime": 0000000000.000, "JobRuntime": 0.000, "Send": 0, "Receive": 0, "Exitval": 0, "Signal": 0, "Command": "echo '\"\u0000\\\"' '\\\\'", "V": [ "\"\u0000\\\"","\\\\" ], "Stdout": "\"\u0000\\\" \\\\\u000a", "Stderr": "" }
par_json { "Seq": 0, "Host": ":", "Starttime": 0000000000.000, "JobRuntime": 0.000, "Send": 0, "Receive": 0, "Exitval": 0, "Signal": 0, "Command": "echo '\"\u0000\\\"' '\"'", "V": [ "\"\u0000\\\","\" ], "Stdout": "\"\u0000\\\" \"\u000a", "Stderr": " }
par_json { "Seq": 0, "Host": ":", "Starttime": 0000000000.000, "JobRuntime": 0.000, "Send": 0, "Receive": 0, "Exitval": 0, "Signal": 0, "Command": "echo '\"\u0000\\\"' '\\\\'", "V": [ "\"\u0000\\\","\\\\" ], "Stdout": "\"\u0000\\\" \\\\\u000a", "Stderr": " }
par_l0_is_l1 ### Because of --tollef -l, then -l0 == -l1, sorry
par_l0_is_l1 l0 1
par_l0_is_l1 l0 2
par_linebuffer_files ### bug #48658: --linebuffer --files
par_linebuffer_files 21
par_linebuffer_files parallel: Warning: Use --files0 when $TMPDIR contains newline.
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_linebuffer_files /TMP/parXXXXX.par
par_link_files_as_only_arg bug #50685: single ::::+ does not work
par_link_files_as_only_arg 1 1 1
par_link_files_as_only_arg 2 2 2
@ -692,9 +704,8 @@ par_pipe_tag_v foo cat
par_pipe_tag_v foo 1
par_pipe_tag_v foo 2
par_pipe_tag_v foo 3
par_pipe_tag_v parallel: Warning: --files do not work if $TMPDIR contains newline.
par_pipe_tag_v foo /tmp/parallel-local-0.3s-tmp/
par_pipe_tag_v `touch /tmp/tripwire` <"'/tmp/tmpfile.par
par_pipe_tag_v parallel: Warning: Use --files0 when $TMPDIR contains newline.
par_pipe_tag_v foo /TMP/tmpfile.par
par_pipe_to_func ### bug #45998: --pipe to function broken
par_pipe_to_func 1
par_pipe_to_func pipefunc OK
@ -918,14 +929,14 @@ par_results_arg_256 ### bug #42089: --results with arg > 256 chars (should be 1
par_results_arg_256 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
par_results_arg_256 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
par_results_json ### --results test.json
par_results_json { "Seq": 1, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 2 4", "V": [ "2","4" ], "Stdout": "2\u000a3\u000a4\u000a", "Stderr": "" }
par_results_json { "Seq": 2, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 8, "Exitval": 0, "Signal": 0, "Command": "seq 2 5", "V": [ "2","5" ], "Stdout": "2\u000a3\u000a4\u000a5\u000a", "Stderr": "" }
par_results_json { "Seq": 3, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 4, "Exitval": 0, "Signal": 0, "Command": "seq 3 4", "V": [ "3","4" ], "Stdout": "3\u000a4\u000a", "Stderr": "" }
par_results_json { "Seq": 4, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 3 5", "V": [ "3","5" ], "Stdout": "3\u000a4\u000a5\u000a", "Stderr": "" }
par_results_json { "Seq": 1, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 2 4", "V": [ "2","4" ], "Stdout": "2\u000a3\u000a4\u000a", "Stderr": "" }
par_results_json { "Seq": 2, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 8, "Exitval": 0, "Signal": 0, "Command": "seq 2 5", "V": [ "2","5" ], "Stdout": "2\u000a3\u000a4\u000a5\u000a", "Stderr": "" }
par_results_json { "Seq": 3, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 4, "Exitval": 0, "Signal": 0, "Command": "seq 3 4", "V": [ "3","4" ], "Stdout": "3\u000a4\u000a", "Stderr": "" }
par_results_json { "Seq": 4, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 3 5", "V": [ "3","5" ], "Stdout": "3\u000a4\u000a5\u000a", "Stderr": "" }
par_results_json { "Seq": 1, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 2 4", "V": [ "2","4" ], "Stdout": "2\u000a3\u000a4\u000a", "Stderr": " }
par_results_json { "Seq": 2, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 8, "Exitval": 0, "Signal": 0, "Command": "seq 2 5", "V": [ "2","5" ], "Stdout": "2\u000a3\u000a4\u000a5\u000a", "Stderr": " }
par_results_json { "Seq": 3, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 4, "Exitval": 0, "Signal": 0, "Command": "seq 3 4", "V": [ "3","4" ], "Stdout": "3\u000a4\u000a", "Stderr": " }
par_results_json { "Seq": 4, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 3 5", "V": [ "3","5" ], "Stdout": "3\u000a4\u000a5\u000a", "Stderr": " }
par_results_json { "Seq": 1, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 2 4", "V": [ "2","4" ], "Stdout": "2\u000a3\u000a4\u000a", "Stderr": " }
par_results_json { "Seq": 2, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 8, "Exitval": 0, "Signal": 0, "Command": "seq 2 5", "V": [ "2","5" ], "Stdout": "2\u000a3\u000a4\u000a5\u000a", "Stderr": " }
par_results_json { "Seq": 3, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 4, "Exitval": 0, "Signal": 0, "Command": "seq 3 4", "V": [ "3","4" ], "Stdout": "3\u000a4\u000a", "Stderr": " }
par_results_json { "Seq": 4, "Host": ":", "Starttime": 9.999, "JobRuntime": 9.999, "Send": 0, "Receive": 6, "Exitval": 0, "Signal": 0, "Command": "seq 3 5", "V": [ "3","5" ], "Stdout": "3\u000a4\u000a5\u000a", "Stderr": " }
par_resume_k ### --resume -k
par_resume_k job0id
par_resume_k job1id
@ -965,10 +976,10 @@ par_sem_quote ### sem --quote should not add empty argument
par_sem_quote echo
par_sem_quote
par_shellcompletion ### --shellcompletion
par_shellcompletion 139a52b9a64a9fd8ec1f63c2d78ff9ac -
par_shellcompletion 139a52b9a64a9fd8ec1f63c2d78ff9ac -
par_shellcompletion 8da71392e279a12e88f00114d0a4bff0 -
par_shellcompletion 8da71392e279a12e88f00114d0a4bff0 -
par_shellcompletion 0097e98f494e6288b33f3201dda7ee11 -
par_shellcompletion 0097e98f494e6288b33f3201dda7ee11 -
par_shellcompletion 1655cb29ff14d0008866108c6b5262f7 -
par_shellcompletion 1655cb29ff14d0008866108c6b5262f7 -
par_slow_pipe_regexp ### bug #53718: --pipe --regexp -N blocks
par_slow_pipe_regexp This should take a few ms, but took more than 2 hours
par_slow_pipe_regexp 0 1 1
@ -1094,6 +1105,8 @@ par_testquote yash "#&/
par_testquote yash ()*=?'
par_testquote zsh "#&/
par_testquote zsh ()*=?'
par_testquote fdsh "#&/
par_testquote fdsh ()*=?'
par_tmpl1 1.t1 /tmp/tmpl-1.1-111.111.t2
par_tmpl1 Template1
par_tmpl1 Xval: 1.1
@ -1357,25 +1370,19 @@ par_version 11
par_wd_3dot_local bug #45993: --wd ... should also work when run locally
par_wd_3dot_local parallel: Error: Cannot change into non-executable dir /bi: No such file or directory
par_wd_3dot_local /bin
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
par_wd_3dot_local `touch /tmp/tripwire` <"'/tmp
par_wd_3dot_local /TMP
par_wd_3dot_local OK
par_wd_3dot_local /
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
par_wd_3dot_local `touch /tmp/tripwire` <"'/tmp
par_wd_3dot_local /TMP
par_wd_3dot_local OK
par_wd_3dot_local /tmp
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
par_wd_3dot_local `touch /tmp/tripwire` <"'/tmp
par_wd_3dot_local /TMP
par_wd_3dot_local OK
par_wd_3dot_local ~/.parallel/tmp/hostname-0-0
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
par_wd_3dot_local `touch /tmp/tripwire` <"'/tmp
par_wd_3dot_local /TMP
par_wd_3dot_local OK
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
par_wd_3dot_local `touch /tmp/tripwire` <"'/tmp
par_wd_3dot_local /tmp/parallel-local-0.0s-tmp/
par_wd_3dot_local `touch /tmp/tripwire` <"'/tmp
par_wd_3dot_local /TMP
par_wd_3dot_local /TMP
par_wd_3dot_local OK
par_wd_dotdotdot ### parallel --wd ... should clean up
par_wd_dotdotdot 1 == 1

View file

@ -80,28 +80,28 @@ par_compress_prg_fails 1
par_compress_prg_fails parallel: Error: false failed.
par_compress_prg_fails parallel: Error: false failed.
par_compress_prg_fails --files 1
par_compress_prg_fails --files parallel: Warning: --files do not work if $TMPDIR contains newline.
par_compress_prg_fails --files parallel: Warning: Use --files0 when $TMPDIR contains newline.
par_compress_prg_fails --files parallel: Error: false failed.
par_compress_prg_fails --files parallel: Error: false failed.
par_compress_prg_fails --tag 1
par_compress_prg_fails --tag parallel: Error: false failed.
par_compress_prg_fails --tag parallel: Error: false failed.
par_compress_prg_fails --tag --files 1
par_compress_prg_fails --tag --files parallel: Warning: --files do not work if $TMPDIR contains newline.
par_compress_prg_fails --tag --files parallel: Warning: Use --files0 when $TMPDIR contains newline.
par_compress_prg_fails --tag --files parallel: Error: false failed.
par_compress_prg_fails --tag --files parallel: Error: false failed.
par_compress_prg_fails --line-buffer 1
par_compress_prg_fails --line-buffer parallel: Error: false failed.
par_compress_prg_fails --line-buffer parallel: Error: false failed.
par_compress_prg_fails --line-buffer --files 1
par_compress_prg_fails --line-buffer --files parallel: Warning: --files do not work if $TMPDIR contains newline.
par_compress_prg_fails --line-buffer --files parallel: Warning: Use --files0 when $TMPDIR contains newline.
par_compress_prg_fails --line-buffer --files parallel: Error: false failed.
par_compress_prg_fails --line-buffer --files parallel: Error: false failed.
par_compress_prg_fails --line-buffer --tag 1
par_compress_prg_fails --line-buffer --tag parallel: Error: false failed.
par_compress_prg_fails --line-buffer --tag parallel: Error: false failed.
par_compress_prg_fails --line-buffer --tag --files 1
par_compress_prg_fails --line-buffer --tag --files parallel: Warning: --files do not work if $TMPDIR contains newline.
par_compress_prg_fails --line-buffer --tag --files parallel: Warning: Use --files0 when $TMPDIR contains newline.
par_compress_prg_fails --line-buffer --tag --files parallel: Error: false failed.
par_compress_prg_fails --line-buffer --tag --files parallel: Error: false failed.
par_dryrun_timeout_ungroup bug #51039: --dry-run --timeout 1.4m -u breaks
@ -110,24 +110,16 @@ par_failing_compressor Compress with failing (de)compressor
par_failing_compressor Test --tag/--line-buffer/--files in all combinations
par_failing_compressor Test working/failing compressor/decompressor in all combinations
par_failing_compressor (-k is used as a dummy argument)
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag --line-buffer --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true /TMP/tmpfile
par_failing_compressor parallel -k --tag --line-buffer --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false /TMP/tmpfile
par_failing_compressor parallel -k --tag --line-buffer --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag --line-buffer --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
@ -146,24 +138,16 @@ par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag -k --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor C=cat;true,D=cat;true /TMP/tmpfile
par_failing_compressor parallel -k --tag -k --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor C=cat;true,D=cat;false /TMP/tmpfile
par_failing_compressor parallel -k --tag -k --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor C=cat;false,D=cat;true /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k --tag -k --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor C=cat;false,D=cat;false /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k --tag -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
@ -182,24 +166,16 @@ par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor C=cat;false,D=cat;false C=cat;false,D=cat;false
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k --line-buffer --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel -k -k --line-buffer --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel -k -k --line-buffer --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k --line-buffer --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k --line-buffer --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k --line-buffer -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
@ -218,24 +194,16 @@ par_failing_compressor C=cat;false,D=cat;false
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor C=cat;false,D=cat;false
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k -k --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel -k -k -k --files0 --compress --compress-program 'cat;true' --decompress-program 'cat;false' doit ::: C='cat;true',D='cat;false'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel -k -k -k --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;true' doit ::: C='cat;false',D='cat;true'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k -k --files --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor /tmp/parallel-local-10s-tmp/
par_failing_compressor `touch /tmpfile
par_failing_compressor parallel: Warning: --files do not work if $TMPDIR contains newline.
par_failing_compressor parallel -k -k -k --files0 --compress --compress-program 'cat;false' --decompress-program 'cat;false' doit ::: C='cat;false',D='cat;false'
par_failing_compressor /TMP/tmpfile
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel: Error: cat;false failed.
par_failing_compressor parallel -k -k -k -k --compress --compress-program 'cat;true' --decompress-program 'cat;true' doit ::: C='cat;true',D='cat;true'
@ -799,8 +767,7 @@ par_parset 4
par_parset 5
par_parset The commands to run can be an array
par_parset <<joe "double space" cartoon>>
par_parset /tmp/parallel-local-10s-tmp/
par_parset `touch /tmp/tripwire` <"'/tmp
par_parset /TMP
par_parset You cannot pipe into parset, but must use a tempfile
par_parset 1
par_parset 10
@ -1125,24 +1092,16 @@ par_quote_special_results mkfs.f2fs 150+0 records out
par_reload_slf_every_second ### --slf should reload every second
par_reload_slf_every_second OK
par_results_csv bug #: --results csv
par_results_csv --header : --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files --compress `touch /tmpfile",
par_results_csv --header : --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files --compress `touch /tmpfile",
par_results_csv --header : --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files --compress `touch /tmpfile",
par_results_csv --header : --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files --compress `touch /tmpfile",
par_results_csv --header : --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files `touch /tmpfile",
par_results_csv --header : --tag --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files `touch /tmpfile",
par_results_csv --header : --tag --files 3,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files `touch /tmpfile",
par_results_csv --header : --tag --files 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmp/
par_results_csv --header : --tag --files `touch /tmpfile",
par_results_csv --header : --tag --files0 --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files0 --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /TMP/tmpfile",
par_results_csv --header : --tag --files0 --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /TMP/tmpfile",
par_results_csv --header : --tag --files0 --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /TMP/tmpfile",
par_results_csv --header : --tag --files0 --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /TMP/tmpfile",
par_results_csv --header : --tag --files0 Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --files0 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /TMP/tmpfile",
par_results_csv --header : --tag --files0 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /TMP/tmpfile",
par_results_csv --header : --tag --files0 3,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"23 11 /TMP/tmpfile",
par_results_csv --header : --tag --files0 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 /TMP/tmpfile",
par_results_csv --header : --tag --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --tag --compress 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 22 11
par_results_csv --header : --tag --compress ",
@ -1161,24 +1120,16 @@ par_results_csv --header : --tag 3,:,999.999,999.999,0,6,0,0,"echo 23 11",23,1
par_results_csv --header : --tag ",
par_results_csv --header : --tag 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
par_results_csv --header : --tag ",
par_results_csv --header : --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --files --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files --compress `touch /tmpfile",
par_results_csv --header : --files --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files --compress `touch /tmpfile",
par_results_csv --header : --files --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files --compress `touch /tmpfile",
par_results_csv --header : --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files --compress `touch /tmpfile",
par_results_csv --header : --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --files 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files `touch /tmpfile",
par_results_csv --header : --files 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files `touch /tmpfile",
par_results_csv --header : --files 3,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files `touch /tmpfile",
par_results_csv --header : --files 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --header : --files `touch /tmpfile",
par_results_csv --header : --files0 --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --files0 --compress 1,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"/TMP/tmpfile",
par_results_csv --header : --files0 --compress 2,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"/TMP/tmpfile",
par_results_csv --header : --files0 --compress 3,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"/TMP/tmpfile",
par_results_csv --header : --files0 --compress 4,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"/TMP/tmpfile",
par_results_csv --header : --files0 Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --files0 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"/TMP/tmpfile",
par_results_csv --header : --files0 2,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"/TMP/tmpfile",
par_results_csv --header : --files0 3,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"/TMP/tmpfile",
par_results_csv --header : --files0 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"/TMP/tmpfile",
par_results_csv --header : --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,H2,H1,Stdout,Stderr
par_results_csv --header : --compress 1,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11
par_results_csv --header : --compress ",
@ -1197,44 +1148,26 @@ par_results_csv --header : 3,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"23
par_results_csv --header : ",
par_results_csv --header : 4,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12
par_results_csv --header : ",
par_results_csv --tag --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files --compress `touch /tmpfile",
par_results_csv --tag --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 3,:,999.999,999.999,0,6,0,0,"echo H2 12",H2,12,"H2 12 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 4,:,999.999,999.999,0,6,0,0,"echo 22 H1",22,H1,"22 H1 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 5,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 6,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 7,:,999.999,999.999,0,6,0,0,"echo 23 H1",23,H1,"23 H1 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 8,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"23 11 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 /tmp/parallel-local-10s-tmp/
par_results_csv --tag --files `touch /tmpfile",
par_results_csv --tag --files0 --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --files0 --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"H2 H1 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"H2 11 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"H2 12 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"22 H1 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"22 11 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"22 12 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"23 H1 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"23 11 /TMP/tmpfile",
par_results_csv --tag --files0 --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"23 12 /TMP/tmpfile",
par_results_csv --tag --files0 Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --files0 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 /TMP/tmpfile",
par_results_csv --tag --files0 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"H2 11 /TMP/tmpfile",
par_results_csv --tag --files0 3,:,999.999,999.999,0,6,0,0,"echo H2 12",H2,12,"H2 12 /TMP/tmpfile",
par_results_csv --tag --files0 4,:,999.999,999.999,0,6,0,0,"echo 22 H1",22,H1,"22 H1 /TMP/tmpfile",
par_results_csv --tag --files0 5,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"22 11 /TMP/tmpfile",
par_results_csv --tag --files0 6,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"22 12 /TMP/tmpfile",
par_results_csv --tag --files0 7,:,999.999,999.999,0,6,0,0,"echo 23 H1",23,H1,"23 H1 /TMP/tmpfile",
par_results_csv --tag --files0 8,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"23 11 /TMP/tmpfile",
par_results_csv --tag --files0 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 /TMP/tmpfile",
par_results_csv --tag --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --tag --compress 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1 H2 H1
par_results_csv --tag --compress ",
@ -1273,44 +1206,26 @@ par_results_csv --tag 8,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"23 11 2
par_results_csv --tag ",
par_results_csv --tag 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"23 12 23 12
par_results_csv --tag ",
par_results_csv --files --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --files --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --files --compress `touch /tmpfile",
par_results_csv --files Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --files 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 3,:,999.999,999.999,0,6,0,0,"echo H2 12",H2,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 4,:,999.999,999.999,0,6,0,0,"echo 22 H1",22,H1,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 5,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 6,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 7,:,999.999,999.999,0,6,0,0,"echo 23 H1",23,H1,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 8,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"/tmp/parallel-local-10s-tmp/
par_results_csv --files `touch /tmpfile",
par_results_csv --files0 --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --files0 --compress 1,:,999.999,999.999,0,15,0,0,"echo H2 H1",H2,H1,"/TMP/tmpfile",
par_results_csv --files0 --compress 2,:,999.999,999.999,0,15,0,0,"echo H2 11",H2,11,"/TMP/tmpfile",
par_results_csv --files0 --compress 3,:,999.999,999.999,0,15,0,0,"echo H2 12",H2,12,"/TMP/tmpfile",
par_results_csv --files0 --compress 4,:,999.999,999.999,0,15,0,0,"echo 22 H1",22,H1,"/TMP/tmpfile",
par_results_csv --files0 --compress 5,:,999.999,999.999,0,15,0,0,"echo 22 11",22,11,"/TMP/tmpfile",
par_results_csv --files0 --compress 6,:,999.999,999.999,0,15,0,0,"echo 22 12",22,12,"/TMP/tmpfile",
par_results_csv --files0 --compress 7,:,999.999,999.999,0,15,0,0,"echo 23 H1",23,H1,"/TMP/tmpfile",
par_results_csv --files0 --compress 8,:,999.999,999.999,0,15,0,0,"echo 23 11",23,11,"/TMP/tmpfile",
par_results_csv --files0 --compress 9,:,999.999,999.999,0,15,0,0,"echo 23 12",23,12,"/TMP/tmpfile",
par_results_csv --files0 Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --files0 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"/TMP/tmpfile",
par_results_csv --files0 2,:,999.999,999.999,0,6,0,0,"echo H2 11",H2,11,"/TMP/tmpfile",
par_results_csv --files0 3,:,999.999,999.999,0,6,0,0,"echo H2 12",H2,12,"/TMP/tmpfile",
par_results_csv --files0 4,:,999.999,999.999,0,6,0,0,"echo 22 H1",22,H1,"/TMP/tmpfile",
par_results_csv --files0 5,:,999.999,999.999,0,6,0,0,"echo 22 11",22,11,"/TMP/tmpfile",
par_results_csv --files0 6,:,999.999,999.999,0,6,0,0,"echo 22 12",22,12,"/TMP/tmpfile",
par_results_csv --files0 7,:,999.999,999.999,0,6,0,0,"echo 23 H1",23,H1,"/TMP/tmpfile",
par_results_csv --files0 8,:,999.999,999.999,0,6,0,0,"echo 23 11",23,11,"/TMP/tmpfile",
par_results_csv --files0 9,:,999.999,999.999,0,6,0,0,"echo 23 12",23,12,"/TMP/tmpfile",
par_results_csv --compress Seq,Host,Starttime,JobRuntime,Send,Receive,Exitval,Signal,Command,V1,V2,Stdout,Stderr
par_results_csv --compress 1,:,999.999,999.999,0,6,0,0,"echo H2 H1",H2,H1,"H2 H1
par_results_csv --compress ",
@ -1423,8 +1338,7 @@ par_tmp_full parallel: Error: Cannot append to buffer file in /tmp/shm/parallel.
par_tmp_full parallel: Error: Is the disk full?
par_tmp_full parallel: Error: Change $TMPDIR with --tmpdir or use --compress.
par_tmux_fg bug #50107: --tmux --fg should also write how to access it
par_tmux_fg See output with: tmux -S '/tmp/parallel-local-10s-tmp/
par_tmux_fg `touch tmpfile' attach
par_tmux_fg See output with: tmux -S /TMPtmpfile attach
par_tmux_fg open terminal failed: not a terminal
par_totaljobs OK
par_xargs_compat xargs compatibility

View file

@ -124,20 +124,19 @@ par_empty_string_command_line bar
par_eof_on_command_line_input_source ### Test of eof string on :::
par_eof_on_command_line_input_source foo
par_file_rpl ### file as replacement string
par_file_rpl contest1
par_file_rpl contest2
par_file_rpl File name /tmp/parallel-local-1s-tmp/
par_file_rpl `touch /tmp/tripwire` <"'/tmp/tmp.XXXXXX
par_file_rpl contest1
par_file_rpl contest2
par_file_rpl File name /parallel-local-1s-tmp/
par_file_rpl `touch /tmp/tripwire` <"'/tmp/tmp.XXXXXX/parallel-local-1s-tmp/
par_file_rpl `touch /parallel-local-1s-tmp/
par_file_rpl `touch /tmp/tripwire` <"'/tmp/tmp.XXXXXX/tripwire` <"'/tmp/tmp.XXXXXX
par_file_rpl contest1
par_file_rpl contest2
par_file_rpl File name /tmp/parallel-local-1s-tmp/
par_file_rpl `touch /tmp/tripwire` <"'/tmp/tmp.XXXXXX
par_file_rpl # {filename}
par_file_rpl content1
par_file_rpl content2
par_file_rpl File name /TMP/tmp.XXXXXX
par_file_rpl # Conflict: both {filename} and {/regexp/rpl}
par_file_rpl content1
par_file_rpl content2
par_file_rpl File name /parallel-local-1s/ /bar/tmp.XXXXXX/parallel-local-1s/ /bar/tmp.XXXXXX
par_file_rpl # --header 0 --plus
par_file_rpl content1
par_file_rpl content2
par_file_rpl File name /TMP/tmp.XXXXXX
par_file_rpl # Conflict: both {filename} and {n}
par_file_rpl 1
par_file_rpl 1
par_file_rpl 2
@ -150,6 +149,7 @@ par_file_rpl 1
par_file_rpl 1
par_file_rpl 1
par_file_rpl 1
par_file_rpl # Conflict: both {filename} and {=expr=}
par_file_rpl =chop
par_file_rpl =chop
par_header ### Test --header with -N
@ -492,8 +492,7 @@ par_profiles_with_space ### bug #42902: profiles containing arguments with space
par_profiles_with_space /bin/bash=/bin/bash
par_profiles_with_space echo '/bin/bash=/bin/bash'
par_profiles_with_space /bin/bash=/bin/bash
par_profiles_with_space With script in $PARALLEL /bin/bash=/tmp/parallel-local-1s-tmp/
par_profiles_with_space `touch /tmp/tripwire` <"'/tmp
par_profiles_with_space With script in $PARALLEL /bin/bash=/TMP
par_pxz_complains bug #44250: pxz complains File format not recognized but decompresses anyway
par_pxz_complains ls: cannot access '/OK-if-missing-file': No such file or directory
par_pxz_complains can not seek in input: Illegal seek

View file

@ -37,7 +37,6 @@ par_bin 2 4 9
par_exit_code bug #52207: Exit status 0 when child job is killed, even with "now,fail=1"
par_exit_code # Ideally the command should return the same
par_exit_code # with or without parallel
par_exit_code # but fish 2.4.0 returns 1 while X.X.X returns 0
par_exit_code ash /tmp/mysleep 100 137
par_exit_code ash parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
par_exit_code ash parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
@ -158,16 +157,6 @@ par_exit_code bash parallel --halt-on-error now,fail=1 'true;/tmp/mysleep' ::: 1
par_exit_code bash parallel --halt-on-error now,done=1 'true;/tmp/mysleep' ::: 100 137
par_exit_code bash parallel --halt-on-error now,done=1 'true;/bin/true' ::: 100 0
par_exit_code bash parallel --halt-on-error now,done=1 'true;exit' ::: 100 100
par_exit_code fdsh /tmp/mysleep 100 137
par_exit_code fdsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 /bin/true ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 exit ::: 100 100
par_exit_code fdsh true;/tmp/mysleep 100 137
par_exit_code fdsh parallel --halt-on-error now,fail=1 'true;/tmp/mysleep' ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 'true;/tmp/mysleep' ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 'true;/bin/true' ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 'true;exit' ::: 100 100
par_exit_code ksh93 /tmp/mysleep 100 0
par_exit_code ksh93 parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 137
par_exit_code ksh93 parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 137
@ -218,6 +207,16 @@ par_exit_code zsh parallel --halt-on-error now,fail=1 'true;/tmp/mysleep' ::: 10
par_exit_code zsh parallel --halt-on-error now,done=1 'true;/tmp/mysleep' ::: 100 137
par_exit_code zsh parallel --halt-on-error now,done=1 'true;/bin/true' ::: 100 0
par_exit_code zsh parallel --halt-on-error now,done=1 'true;exit' ::: 100 100
par_exit_code fdsh /tmp/mysleep 100 137
par_exit_code fdsh parallel --halt-on-error now,fail=1 /tmp/mysleep ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 /tmp/mysleep ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 /bin/true ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 exit ::: 100 100
par_exit_code fdsh true;/tmp/mysleep 100 137
par_exit_code fdsh parallel --halt-on-error now,fail=1 'true;/tmp/mysleep' ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 'true;/tmp/mysleep' ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 'true;/bin/true' ::: 100 2
par_exit_code fdsh parallel --halt-on-error now,done=1 'true;exit' ::: 100 100
par_exit_code parallel: This job finished:
par_exit_code runit
par_groupby -N1 3 $_%=2 tsv \t ### test tsv | --colsep \t --groupby 3 $_%=2 -N1

View file

@ -44,20 +44,20 @@ par_print_before_halt_on_error ### What is printed before the jobs are killed
par_print_before_halt_on_error -2 exit code 0
par_print_before_halt_on_error -2 0.1 0.1
par_print_before_halt_on_error -2 parallel: This job succeeded:
par_print_before_halt_on_error -2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -2 > 0 ? exit shift : exit not shift;' 0.1
par_print_before_halt_on_error -2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; -2 > 0 ? exit shift : exit not shift;' 0.1
par_print_before_halt_on_error -1 exit code 0
par_print_before_halt_on_error -1 0.1 0.1
par_print_before_halt_on_error -1 parallel: This job succeeded:
par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 0.1
par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 0.1
par_print_before_halt_on_error -1 parallel: Starting no more jobs. Waiting for 3 jobs to finish.
par_print_before_halt_on_error -1 parallel: This job succeeded:
par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error -1 parallel: Starting no more jobs. Waiting for 1 jobs to finish.
par_print_before_halt_on_error -1 3.2 3.2
par_print_before_halt_on_error -1 0 0
par_print_before_halt_on_error -1 1 1
par_print_before_halt_on_error -1 parallel: This job succeeded:
par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 3.2
par_print_before_halt_on_error -1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; -1 > 0 ? exit shift : exit not shift;' 3.2
par_print_before_halt_on_error 0 exit code 1
par_print_before_halt_on_error 0 0.1 0.1
par_print_before_halt_on_error 0 3.2 3.2
@ -74,27 +74,26 @@ par_print_before_halt_on_error 0 8 8
par_print_before_halt_on_error 1 exit code 1
par_print_before_halt_on_error 1 0.1 0.1
par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 3 jobs to finish.
par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 2
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 2
par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 2 jobs to finish.
par_print_before_halt_on_error 1 3.2 3.2
par_print_before_halt_on_error 1 0 0
par_print_before_halt_on_error 1 1 1
par_print_before_halt_on_error 1 2 2
par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 3.2
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 3.2
par_print_before_halt_on_error 1 parallel: Starting no more jobs. Waiting for 1 jobs to finish.
par_print_before_halt_on_error 1 3 3
par_print_before_halt_on_error 1 parallel: This job failed:
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 3
par_print_before_halt_on_error 1 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; 1 > 0 ? exit shift : exit not shift;' 3
par_print_before_halt_on_error 2 exit code 1
par_print_before_halt_on_error 2 0.1 0.1
par_print_before_halt_on_error 2 parallel: This job failed:
par_print_before_halt_on_error 2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR "",@ARGV,"\n"; 2 > 0 ? exit shift : exit not shift;' 1
par_print_before_halt_on_error 2 perl -e 'sleep 1; sleep $ARGV[0]; print STDERR ",@ARGV,"\n"; 2 > 0 ? exit shift : exit not shift;' 1
par_sem_dir ### bug #58985: sem stall if .parallel/semaphores is chmod 0
par_sem_dir parallel: Error: Semaphoredir must be writable: '~/.parallel/semaphores'
par_tmux_termination ### --tmux test - check termination
par_tmux_termination See output with: tmux -S '/tmp/parallel-local-race01-tmp/
par_tmux_termination `touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
par_tmux_termination See output with: tmux -S /TMP/tmsXXXXX attach

View file

@ -4,9 +4,66 @@ TODO
par_--onall_--plus ### Test --plus is respected with --onall/--nonall
par_--onall_--plus lo
par_--onall_--plus lo
par_--onall_--transfer ### bug #46519: --onall ignores --transfer
par_--onall_--transfer bug46519.a
par_--onall_--transfer bug46519.b
par_--onall_--transfer bug46519.c
par_--onall_--transfer bug46519.a
par_--onall_--transfer bug46519.b
par_--onall_--transfer bug46519.c
par_--onall_--transfer bug46519.aa
par_--onall_--transfer bug46519.aaa
par_--onall_--transfer bug46519.bb
par_--onall_--transfer bug46519.bbb
par_--onall_--transfer bug46519.cc
par_--onall_--transfer bug46519.ccc
par_--onall_--transfer ls: cannot access 'bug46519.aa': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.aaa': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.bb': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.bbb': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.cc': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.ccc': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.aa': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.aaa': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.bb': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.bbb': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.cc': No such file or directory
par_--onall_--transfer ls: cannot access 'bug46519.ccc': No such file or directory
par_--ssh_ssh_in_ssh ### bug #61894: Pack ssh code in eval protection
par_--ssh_ssh_in_ssh Unquoted ssh should work
par_--ssh_ssh_in_ssh aspire
par_--ssh_ssh_in_ssh OK
par_--ssh_ssh_in_ssh aspire
par_--ssh_ssh_in_ssh OK
par_--ssh_ssh_in_ssh aspire
par_--ssh_ssh_in_ssh OK
par_--ssh_ssh_in_ssh aspire
par_--ssh_ssh_in_ssh OK
par_PARALLEL_SSH_function ### use function as $PARALLEL_SSH
par_PARALLEL_SSH_function Run through FOOSSH?
par_PARALLEL_SSH_function FOOSSH
par__remote_load ### Test --load remote
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load parallel: Warning: This job was killed because it timed out:
par__remote_load parallel: Warning: perl -e 'while(1){ }'
par__remote_load OK
par_csh_variable_newline ### Can csh propagate a variable containing \n
par_csh_variable_newline 1
par_csh_variable_newline 2
@ -23,31 +80,6 @@ par_hgrp_agrp_comma uid=1004(csh) gid=1004(csh) groups=1004(csh)
par_hgrp_agrp_comma uid=1007(tcsh) gid=1007(tcsh) groups=1007(tcsh)
par_joblog_nonall ### bug #40001: --joblog and --nonall seem not to work together:
par_joblog_nonall 3
par_onall_transfer ### bug #46519: --onall ignores --transfer
par_onall_transfer bug46519.a
par_onall_transfer bug46519.b
par_onall_transfer bug46519.c
par_onall_transfer bug46519.a
par_onall_transfer bug46519.b
par_onall_transfer bug46519.c
par_onall_transfer bug46519.aa
par_onall_transfer bug46519.aaa
par_onall_transfer bug46519.bb
par_onall_transfer bug46519.bbb
par_onall_transfer bug46519.cc
par_onall_transfer bug46519.ccc
par_onall_transfer ls: cannot access 'bug46519.aa': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.aaa': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.bb': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.bbb': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.cc': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.ccc': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.aa': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.aaa': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.bb': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.bbb': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.cc': No such file or directory
par_onall_transfer ls: cannot access 'bug46519.ccc': No such file or directory
par_pipe_unneeded_spawn ### Test bug #34241: --pipe should not spawn unneeded processes
par_pipe_unneeded_spawn 1
par_pipe_unneeded_spawn 2
@ -57,28 +89,6 @@ par_pipe_unneeded_spawn 4
par_pipe_unneeded_spawn Block_end
par_pipe_unneeded_spawn 5
par_pipe_unneeded_spawn Block_end
par_remote_load ### Test --load remote
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load parallel: Warning: This job was killed because it timed out:
par_remote_load parallel: Warning: perl -e 'while(1){ }'
par_remote_load OK
par_remote_nice ### Test --nice remote
par_remote_nice NI
par_remote_nice 5
@ -87,16 +97,6 @@ par_remote_nice 5
par_ssh ### use --ssh
par_ssh Run through BARSSH?
par_ssh BARSSH
par_ssh_ssh ### bug #61894: Pack ssh code in eval protection
par_ssh_ssh Unquoted ssh should work
par_ssh_ssh aspire
par_ssh_ssh OK
par_ssh_ssh aspire
par_ssh_ssh OK
par_ssh_ssh aspire
par_ssh_ssh OK
par_ssh_ssh aspire
par_ssh_ssh OK
par_sshlogin_with_comma ### --sshlogin with \,
par_sshlogin_with_comma OK
par_sshlogin_with_comma ### --sshlogin with ,,

View file

@ -1,3 +1,5 @@
par__obey_servers_capacity_slf_reload ### bug #43518: GNU Parallel doesn't obey servers' jobs capacity when an ssh login file is reloaded
par__obey_servers_capacity_slf_reload OK
par_cat_fifo_exit ### --cat and --fifo exit value in bash
par_cat_fifo_exit true
par_cat_fifo_exit 0
@ -21,10 +23,6 @@ par_env_parallel_fifo data from stdin
par_env_parallel_fifo transferred non-exported func
par_env_parallel_fifo data from stdin
par_env_parallel_fifo transferred non-exported func
par_filter_hosts_slf ### --filter-hosts --slf <()
par_filter_hosts_slf OK
par_obey_servers_capacity_slf_reload ### bug #43518: GNU Parallel doesn't obey servers' jobs capacity when an ssh login file is reloaded
par_obey_servers_capacity_slf_reload OK
par_pipepart_remote ### bug #42999: --pipepart with remote does not work
par_pipepart_remote 14 14 33
par_pipepart_remote 11 11 33
@ -101,3 +99,5 @@ par_wd_no_such_dir ### --wd no-such-dir - bash
par_wd_no_such_dir mkdir: cannot create directory '/no-such-dir': Permission denied
par_wd_no_such_dir parallel: Cannot chdir to /no-such-dir
par_wd_no_such_dir Exit code 1
par_z_filter_hosts_slf ### --filter-hosts --slf <()
par_z_filter_hosts_slf OK

View file

@ -1,3 +1,184 @@
par_--nonall_results ### --results --onall
par_--nonall_results /TMP/onall
par_--nonall_results /TMP/onall/noslashsh@lo
par_--nonall_results /TMP/onall/noslashsh@lo/1
par_--nonall_results /TMP/onall/noslashsh@lo/1/id
par_--nonall_results /TMP/onall/noslashsh@lo/1/id/seq
par_--nonall_results /TMP/onall/noslashsh@lo/1/id/stderr
par_--nonall_results /TMP/onall/noslashsh@lo/1/id/stdout
par_--nonall_results /TMP/onall/noslashsh@lo/1/pwd
par_--nonall_results /TMP/onall/noslashsh@lo/1/pwd/seq
par_--nonall_results /TMP/onall/noslashsh@lo/1/pwd/stderr
par_--nonall_results /TMP/onall/noslashsh@lo/1/pwd/stdout
par_--nonall_results /TMP/onall/rpl1noslash
par_--nonall_results /TMP/onall/rpl1noslash/idsh@lo.seq
par_--nonall_results /TMP/onall/rpl1noslash/idcsh@lo.seq
par_--nonall_results /TMP/onall/rpl1noslash/idcsh@lo
par_--nonall_results /TMP/onall/rpl1noslash/pwdsh@lo.err
par_--nonall_results /TMP/onall/rpl1noslash/idcsh@lo.err
par_--nonall_results /TMP/onall/rpl1noslash/pwdcsh@lo.err
par_--nonall_results /TMP/onall/rpl1noslash/idsh@lo
par_--nonall_results /TMP/onall/rpl1noslash/pwdcsh@lo
par_--nonall_results /TMP/onall/rpl1noslash/pwdsh@lo.seq
par_--nonall_results /TMP/onall/rpl1noslash/pwdsh@lo
par_--nonall_results /TMP/onall/rpl1noslash/idsh@lo.err
par_--nonall_results /TMP/onall/rpl1noslash/pwdcsh@lo.seq
par_--nonall_results /TMP/onall/slash
par_--nonall_results /TMP/onall/slash/sh@lo
par_--nonall_results /TMP/onall/slash/sh@lo/1
par_--nonall_results /TMP/onall/slash/sh@lo/1/id
par_--nonall_results /TMP/onall/slash/sh@lo/1/id/seq
par_--nonall_results /TMP/onall/slash/sh@lo/1/id/stderr
par_--nonall_results /TMP/onall/slash/sh@lo/1/id/stdout
par_--nonall_results /TMP/onall/slash/sh@lo/1/pwd
par_--nonall_results /TMP/onall/slash/sh@lo/1/pwd/seq
par_--nonall_results /TMP/onall/slash/sh@lo/1/pwd/stderr
par_--nonall_results /TMP/onall/slash/sh@lo/1/pwd/stdout
par_--nonall_results /TMP/onall/slash/csh@lo
par_--nonall_results /TMP/onall/slash/csh@lo/1
par_--nonall_results /TMP/onall/slash/csh@lo/1/id
par_--nonall_results /TMP/onall/slash/csh@lo/1/id/seq
par_--nonall_results /TMP/onall/slash/csh@lo/1/id/stderr
par_--nonall_results /TMP/onall/slash/csh@lo/1/id/stdout
par_--nonall_results /TMP/onall/slash/csh@lo/1/pwd
par_--nonall_results /TMP/onall/slash/csh@lo/1/pwd/seq
par_--nonall_results /TMP/onall/slash/csh@lo/1/pwd/stderr
par_--nonall_results /TMP/onall/slash/csh@lo/1/pwd/stdout
par_--nonall_results /TMP/onall/rplnoslash
par_--nonall_results /TMP/onall/rplnoslash/idsh@lo.seq
par_--nonall_results /TMP/onall/rplnoslash/idcsh@lo.seq
par_--nonall_results /TMP/onall/rplnoslash/idcsh@lo
par_--nonall_results /TMP/onall/rplnoslash/pwdsh@lo.err
par_--nonall_results /TMP/onall/rplnoslash/idcsh@lo.err
par_--nonall_results /TMP/onall/rplnoslash/pwdcsh@lo.err
par_--nonall_results /TMP/onall/rplnoslash/idsh@lo
par_--nonall_results /TMP/onall/rplnoslash/pwdcsh@lo
par_--nonall_results /TMP/onall/rplnoslash/pwdsh@lo.seq
par_--nonall_results /TMP/onall/rplnoslash/pwdsh@lo
par_--nonall_results /TMP/onall/rplnoslash/idsh@lo.err
par_--nonall_results /TMP/onall/rplnoslash/pwdcsh@lo.seq
par_--nonall_results /TMP/onall/rpl1slash
par_--nonall_results /TMP/onall/rpl1slash/id
par_--nonall_results /TMP/onall/rpl1slash/id/sh@lo.seq
par_--nonall_results /TMP/onall/rpl1slash/id/csh@lo.err
par_--nonall_results /TMP/onall/rpl1slash/id/csh@lo.seq
par_--nonall_results /TMP/onall/rpl1slash/id/sh@lo
par_--nonall_results /TMP/onall/rpl1slash/id/csh@lo
par_--nonall_results /TMP/onall/rpl1slash/id/sh@lo.err
par_--nonall_results /TMP/onall/rpl1slash/pwd
par_--nonall_results /TMP/onall/rpl1slash/pwd/sh@lo.seq
par_--nonall_results /TMP/onall/rpl1slash/pwd/csh@lo.err
par_--nonall_results /TMP/onall/rpl1slash/pwd/csh@lo.seq
par_--nonall_results /TMP/onall/rpl1slash/pwd/sh@lo
par_--nonall_results /TMP/onall/rpl1slash/pwd/csh@lo
par_--nonall_results /TMP/onall/rpl1slash/pwd/sh@lo.err
par_--nonall_results /TMP/onall/noslashcsh@lo
par_--nonall_results /TMP/onall/noslashcsh@lo/1
par_--nonall_results /TMP/onall/noslashcsh@lo/1/id
par_--nonall_results /TMP/onall/noslashcsh@lo/1/id/seq
par_--nonall_results /TMP/onall/noslashcsh@lo/1/id/stderr
par_--nonall_results /TMP/onall/noslashcsh@lo/1/id/stdout
par_--nonall_results /TMP/onall/noslashcsh@lo/1/pwd
par_--nonall_results /TMP/onall/noslashcsh@lo/1/pwd/seq
par_--nonall_results /TMP/onall/noslashcsh@lo/1/pwd/stderr
par_--nonall_results /TMP/onall/noslashcsh@lo/1/pwd/stdout
par_--nonall_results /TMP/onall/rplslash
par_--nonall_results /TMP/onall/rplslash/id
par_--nonall_results /TMP/onall/rplslash/id/sh@lo.seq
par_--nonall_results /TMP/onall/rplslash/id/csh@lo.err
par_--nonall_results /TMP/onall/rplslash/id/csh@lo.seq
par_--nonall_results /TMP/onall/rplslash/id/sh@lo
par_--nonall_results /TMP/onall/rplslash/id/csh@lo
par_--nonall_results /TMP/onall/rplslash/id/sh@lo.err
par_--nonall_results /TMP/onall/rplslash/pwd
par_--nonall_results /TMP/onall/rplslash/pwd/sh@lo.seq
par_--nonall_results /TMP/onall/rplslash/pwd/csh@lo.err
par_--nonall_results /TMP/onall/rplslash/pwd/csh@lo.seq
par_--nonall_results /TMP/onall/rplslash/pwd/sh@lo
par_--nonall_results /TMP/onall/rplslash/pwd/csh@lo
par_--nonall_results /TMP/onall/rplslash/pwd/sh@lo.err
par_--nonall_results ### --results --nonall
par_--nonall_results /TMP/nonall
par_--nonall_results /TMP/nonall/noslashsh@lo
par_--nonall_results /TMP/nonall/noslashsh@lo/1
par_--nonall_results /TMP/nonall/noslashsh@lo/1/seq
par_--nonall_results /TMP/nonall/noslashsh@lo/1/stderr
par_--nonall_results /TMP/nonall/noslashsh@lo/1/stdout
par_--nonall_results /TMP/nonall/rpl1noslash
par_--nonall_results /TMP/nonall/rpl1noslash/sh@lo.seq
par_--nonall_results /TMP/nonall/rpl1noslash/csh@lo.err
par_--nonall_results /TMP/nonall/rpl1noslash/csh@lo.seq
par_--nonall_results /TMP/nonall/rpl1noslash/sh@lo
par_--nonall_results /TMP/nonall/rpl1noslash/csh@lo
par_--nonall_results /TMP/nonall/rpl1noslash/sh@lo.err
par_--nonall_results /TMP/nonall/slash
par_--nonall_results /TMP/nonall/slash/sh@lo
par_--nonall_results /TMP/nonall/slash/sh@lo/1
par_--nonall_results /TMP/nonall/slash/sh@lo/1/seq
par_--nonall_results /TMP/nonall/slash/sh@lo/1/stderr
par_--nonall_results /TMP/nonall/slash/sh@lo/1/stdout
par_--nonall_results /TMP/nonall/slash/csh@lo
par_--nonall_results /TMP/nonall/slash/csh@lo/1
par_--nonall_results /TMP/nonall/slash/csh@lo/1/seq
par_--nonall_results /TMP/nonall/slash/csh@lo/1/stderr
par_--nonall_results /TMP/nonall/slash/csh@lo/1/stdout
par_--nonall_results /TMP/nonall/rplnoslash
par_--nonall_results /TMP/nonall/rplnoslash/sh@lo.seq
par_--nonall_results /TMP/nonall/rplnoslash/csh@lo.err
par_--nonall_results /TMP/nonall/rplnoslash/csh@lo.seq
par_--nonall_results /TMP/nonall/rplnoslash/sh@lo
par_--nonall_results /TMP/nonall/rplnoslash/csh@lo
par_--nonall_results /TMP/nonall/rplnoslash/sh@lo.err
par_--nonall_results /TMP/nonall/rpl1slash
par_--nonall_results /TMP/nonall/rpl1slash/sh@lo.seq
par_--nonall_results /TMP/nonall/rpl1slash/csh@lo.err
par_--nonall_results /TMP/nonall/rpl1slash/csh@lo.seq
par_--nonall_results /TMP/nonall/rpl1slash/sh@lo
par_--nonall_results /TMP/nonall/rpl1slash/csh@lo
par_--nonall_results /TMP/nonall/rpl1slash/sh@lo.err
par_--nonall_results /TMP/nonall/noslashcsh@lo
par_--nonall_results /TMP/nonall/noslashcsh@lo/1
par_--nonall_results /TMP/nonall/noslashcsh@lo/1/seq
par_--nonall_results /TMP/nonall/noslashcsh@lo/1/stderr
par_--nonall_results /TMP/nonall/noslashcsh@lo/1/stdout
par_--nonall_results /TMP/nonall/rplslash
par_--nonall_results /TMP/nonall/rplslash/sh@lo.seq
par_--nonall_results /TMP/nonall/rplslash/csh@lo.err
par_--nonall_results /TMP/nonall/rplslash/csh@lo.seq
par_--nonall_results /TMP/nonall/rplslash/sh@lo
par_--nonall_results /TMP/nonall/rplslash/csh@lo
par_--nonall_results /TMP/nonall/rplslash/sh@lo.err
par_--tmux_different_shells ### Test tmux works on different shells
par_--tmux_different_shells See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_different_shells 0
par_--tmux_different_shells See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_different_shells 4
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 0
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 4
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 0
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 4
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 0
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 4
par_--tmux_different_shells # command is currently too long for csh. Maybe it can be fixed?
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 0
par_--tmux_different_shells See output with: tmux -S /tmp/tmsXXXXX attach
par_--tmux_different_shells 4
par_--tmux_length ### works
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_length ### These blocked due to length
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_--tmux_length See output with: tmux -S /TMP/tmsXXXXX attach
par_bigvar_csh ### csh
par_bigvar_csh 3 big vars run remotely - length(base64) > 1000
par_bigvar_csh 1 200 692
@ -18,8 +199,6 @@ par_bigvar_rc 3 big vars run locally
par_bigvar_rc 1 200 692
par_bigvar_rc 1 200 692
par_bigvar_rc 1 150 547
par_csh_nice ### bug #44143: csh and nice
par_csh_nice OK
par_env_underscore ### --env _
par_env_underscore OK FUBAR test
par_env_underscore In csh this may fail with ignored_var: Undefined variable.
@ -37,353 +216,6 @@ par_exporting_in_zsh Function export as function
par_exporting_in_zsh myfunc ran OK
par_exporting_in_zsh function from zsh to zsh OK
par_exporting_in_zsh function from zsh to bash OK
par_multiple_hosts_repeat_arg ### bug #45575: -m and multiple hosts repeats first args
par_multiple_hosts_repeat_arg parallel: Warning: Using -X or -m with --sshlogin may fail.
par_multiple_hosts_repeat_arg 1
par_multiple_hosts_repeat_arg 2
par_multiple_hosts_repeat_arg 3
par_nonall_results ### --results --onall
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/id
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/id/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/id/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/id/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/pwd
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/pwd/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/pwd/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashsh@lo/1/pwd/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/idsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/idcsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/idcsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/pwdsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/idcsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/pwdcsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/idsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/pwdcsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/pwdsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/pwdsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/idsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1noslash/pwdcsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/id
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/id/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/id/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/id/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/pwd
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/pwd/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/pwd/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/sh@lo/1/pwd/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/id
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/id/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/id/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/id/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/pwd
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/pwd/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/pwd/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/slash/csh@lo/1/pwd/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/idsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/idcsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/idcsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/pwdsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/idcsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/pwdcsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/idsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/pwdcsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/pwdsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/pwdsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/idsh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplnoslash/pwdcsh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/id/sh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rpl1slash/pwd/sh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/id
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/id/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/id/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/id/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/pwd
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/pwd/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/pwd/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/noslashcsh@lo/1/pwd/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/id/sh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/onall/rplslash/pwd/sh@lo.err
par_nonall_results ### --results --nonall
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashsh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashsh@lo/1/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashsh@lo/1/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashsh@lo/1/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1noslash/sh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/sh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/sh@lo/1/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/sh@lo/1/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/sh@lo/1/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/csh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/csh@lo/1/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/csh@lo/1/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/slash/csh@lo/1/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplnoslash/sh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rpl1slash/sh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashcsh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashcsh@lo/1
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashcsh@lo/1/seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashcsh@lo/1/stderr
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/noslashcsh@lo/1/stdout
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash/sh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash/csh@lo.err
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash/csh@lo.seq
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash/sh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash/csh@lo
par_nonall_results /tmp/parallel-local-ssh4-tmp/
par_nonall_results `touch /tmp/tripwire` <"'/tmp/nonall/rplslash/sh@lo.err
par_sshloginfile ### --slf with mIxEd cAsE
par_sshloginfile 1
par_sshloginfile 2
par_sshloginfile 3
par_sshloginfile 4
par_sshloginfile 5
par_sshloginfile 6
par_sshloginfile 7
par_sshloginfile 8
par_sshloginfile 9
par_sshloginfile bash
par_sshloginfile bash
par_sshloginfile ksh
par_sshloginfile ksh
par_sshloginfile ksh
par_sshloginfile ksh
par_sshloginfile parallel
par_sshloginfile parallel
par_sshloginfile parallel
par_tmux_different_shells ### Test tmux works on different shells
par_tmux_different_shells See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_different_shells 0
par_tmux_different_shells See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_different_shells 4
par_tmux_different_shells 0
par_tmux_different_shells 4
par_tmux_different_shells 0
par_tmux_different_shells 4
par_tmux_different_shells 0
par_tmux_different_shells 4
par_tmux_different_shells # command is currently too long for csh. Maybe it can be fixed?
par_tmux_different_shells 0
par_tmux_different_shells 4
par_tmux_length ### works
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_length `touch ' attach
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_length `touch ' attach
par_tmux_length ### These blocked due to length
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_tmux_length See output with: tmux -S '/tmp/parallel-local-ssh4-tmp/
par_transfer_return_multiple_inputs ### bug #43746: --transfer and --return of multiple inputs {1} and {2}
par_transfer_return_multiple_inputs ### and:
par_transfer_return_multiple_inputs ### bug #44371: --trc with csh complains
@ -407,3 +239,29 @@ par_warn_when_exporting_func /bin/tcsh parallel: Warning: Shell functions may no
par_warn_when_exporting_func /bin/tcsh CSH/TCSH DO NOT SUPPORT newlines IN VARIABLES/FUNCTIONS. Unset myfunc
par_warn_when_exporting_func /bin/zsh Run function in /bin/zsh
par_warn_when_exporting_func /bin/zsh Function run: OK
par_z_csh_nice ### bug #44143: csh and nice
par_z_csh_nice OK
par_z_multiple_hosts_repeat_arg ### bug #45575: -m and multiple hosts repeats first args
par_z_multiple_hosts_repeat_arg parallel: Warning: Using -X or -m with --sshlogin may fail.
par_z_multiple_hosts_repeat_arg 1
par_z_multiple_hosts_repeat_arg 2
par_z_multiple_hosts_repeat_arg 3
par_z_sshloginfile ### --slf with mIxEd cAsE
par_z_sshloginfile 1
par_z_sshloginfile 2
par_z_sshloginfile 3
par_z_sshloginfile 4
par_z_sshloginfile 5
par_z_sshloginfile 6
par_z_sshloginfile 7
par_z_sshloginfile 8
par_z_sshloginfile 9
par_z_sshloginfile bash
par_z_sshloginfile bash
par_z_sshloginfile ksh
par_z_sshloginfile ksh
par_z_sshloginfile ksh
par_z_sshloginfile ksh
par_z_sshloginfile parallel
par_z_sshloginfile parallel
par_z_sshloginfile parallel

File diff suppressed because it is too large Load diff

View file

@ -18,6 +18,18 @@ par_onall_basefile_cleanup tmp/onall--basefile--clean
par_onall_basefile_cleanup tmp/onall--basefile--clean
par_onall_basefile_cleanup rm: cannot remove 'tmp/onall--basefile--clean': No such file or directory
par_onall_basefile_cleanup rm: cannot remove 'tmp/onall--basefile--clean': No such file or directory
par_onall_timeout ### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed
par_onall_timeout slept 1
par_onall_timeout parallel: Warning: This job was killed because it timed out:
par_onall_timeout parallel: Warning: sleep 8; echo slept 8
par_onall_timeout parallel: Warning: This job was killed because it timed out:
par_onall_timeout parallel: Warning: sleep 9; echo slept 9
par_onall_timeout slept 1
par_onall_timeout parallel: Warning: This job was killed because it timed out:
par_onall_timeout parallel: Warning: sleep 8; echo slept 8
par_onall_timeout parallel: Warning: This job was killed because it timed out:
par_onall_timeout parallel: Warning: sleep 9; echo slept 9
par_onall_timeout jobs failed: 2
par_read_sshloginfile_from_stdin ### Test read sshloginfile from STDIN
par_read_sshloginfile_from_stdin /home/csh
par_read_sshloginfile_from_stdin /home/parallel
@ -127,18 +139,6 @@ par_test_pipe_onall parallel@lo 3
par_test_pipe_onall parallel@lo 1
par_test_pipe_onall parallel@lo 2
par_test_pipe_onall parallel@lo 3
par_timeout_onall ### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed
par_timeout_onall slept 1
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 8; echo slept 8
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 9; echo slept 9
par_timeout_onall slept 1
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 8; echo slept 8
par_timeout_onall parallel: Warning: This job was killed because it timed out:
par_timeout_onall parallel: Warning: sleep 9; echo slept 9
par_timeout_onall jobs failed: 2
par_wd_braces ### Test --wd {}
par_wd_braces wd1
par_wd_braces wd2

File diff suppressed because it is too large Load diff

View file

@ -1,23 +1,9 @@
par_bar_m ### test --bar -m
par_bar_m 0
par_bar_m 50
par_bar_m 100
par_csh_environment_variables_set ### Check $PARALLEL_PID $PARALLEL_SEQ are set in csh
par_csh_environment_variables_set 3
par_filter_host_noise ### bug #63296: --filter-hosts option gets confused by output from SSH command
par_filter_host_noise localhost OK
par_filter_host_noise localhost Warning: Identity file id_rsa not accessible: No such file or directory.
par_filter_host_noise localhost Warning: Permanently added 'localhost' (ED25519) to the list of known hosts. par_filter_host_noise localhost
par_filter_host_noise localhost OK
par_filter_host_noise localhost Warning: Permanently added 'localhost' (ED25519) to the list of known hosts. par_filter_host_noise localhost
par_keep_order ### Test --keep-order
par_keep_order job0
par_keep_order job1
par_keep_order job2
par_keeporder ### Test --keeporder
par_keeporder job0
par_keeporder job1
par_keeporder job2
par_load_csh ### Gave Word too long.
par_load_csh a
par_path_remote_bash bug #47695: How to set $PATH on remote? Bash
@ -42,3 +28,17 @@ par_retries_4 ### Test of --retries - it should run 49 jobs in total
par_retries_4 OK
par_transfer_special_char_names ### Test --return of weirdly named file
par_transfer_special_char_names aa<${#}" b
par_z_bar_m ### test --bar -m
par_z_bar_m 0
par_z_bar_m 50
par_z_bar_m 100
par_z_csh_environment_variables_set ### Check $PARALLEL_PID $PARALLEL_SEQ are set in csh
par_z_csh_environment_variables_set 3
par_z_keep_order ### Test --keep-order
par_z_keep_order job0
par_z_keep_order job1
par_z_keep_order job2
par_z_keeporder ### Test --keeporder
par_z_keeporder job0
par_z_keeporder job1
par_z_keeporder job2

View file

@ -45,25 +45,25 @@ echo '### bug #42041: Implement $PARALLEL_JOBSLOT'
2
echo '### bug #42363: --pipepart and --fifo/--cat does not work'
### bug #42363: --pipepart and --fifo/--cat does not work
seq 100 > /tmp/bug42363; parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat wc | perl -pe 's:(/tmp.*par).....:${1}XXXXX:'; rm /tmp/bug42363
14 14 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
9 9 28 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
14 14 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
11 11 33 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
9 9 28 '/tmp/parallel-local22-tmp/'$'\n'' `touch /tmp/tripwire` <"'\''/tmp/parXXXXX'
seq 100 > /tmp/bug42363; parallel --pipepart --block 31 -a /tmp/bug42363 -k --fifo 'cat {} | wc'; parallel --pipepart --block 31 -a /tmp/bug42363 -k --cat 'cat {} | wc'; rm /tmp/bug42363
14 14 33
11 11 33
11 11 33
11 11 33
11 11 33
11 11 33
11 11 33
11 11 33
9 9 28
14 14 33
11 11 33
11 11 33
11 11 33
11 11 33
11 11 33
11 11 33
11 11 33
9 9 28
echo '### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile'
### bug #42055: --pipepart -a bigfile should not require sequential reading of bigfile
parallel --pipepart -a /etc/passwd -L 1 should not be run
@ -166,7 +166,7 @@ Send Receive Exitval
0 332 0
0 336 0
Send Receive Exitval
parallel: Warning: --files do not work if $TMPDIR contains newline.
parallel: Warning: Use --files0 when $TMPDIR contains newline.
echo '### --files --tag'
### --files --tag
seq 100 111 | parallel --files --tag --joblog /dev/stderr seq {} '|' pv -qL100 2>&1 >/dev/null | cut -f 5-7 | sort
@ -183,7 +183,7 @@ parallel: Warning: --files do not work if $TMPDIR contains newline.
0 332 0
0 336 0
Send Receive Exitval
parallel: Warning: --files do not work if $TMPDIR contains newline.
parallel: Warning: Use --files0 when $TMPDIR contains newline.
echo '### --pipe'
### --pipe
seq 1000 | parallel --joblog /dev/stderr --block 1111 --pipe pv -qL300 2>&1 >/dev/null | cut -f 5-7 | sort
@ -224,7 +224,7 @@ Send Receive Exitval
1108 1108 0
569 569 0
Send Receive Exitval
parallel: Warning: --files do not work if $TMPDIR contains newline.
parallel: Warning: Use --files0 when $TMPDIR contains newline.
echo '### --files --pipe --tag'
### --files --pipe --tag
seq 1000 | parallel --joblog /dev/stderr --block 1111 --files --pipe --tag pv -qL300 2>&1 >/dev/null | cut -f 5-7 | sort
@ -233,7 +233,7 @@ parallel: Warning: --files do not work if $TMPDIR contains newline.
1108 1108 0
569 569 0
Send Receive Exitval
parallel: Warning: --files do not work if $TMPDIR contains newline.
parallel: Warning: Use --files0 when $TMPDIR contains newline.
echo '### --pipe --round-robin'
### --pipe --round-robin
seq 1000 | parallel --joblog /dev/stderr --block 1111 -j2 --pipe --round-robin pv -qL300 2>&1 >/dev/null | cut -f 5-7 | sort

View file

@ -250,11 +250,11 @@ ole
echo '### Test --recstart + --recend'; cat /tmp/blocktest | parallel --block 1M -k --recstart 44 --recend "44" -j10 --pipe sort -n |md5sum
### Test --recstart + --recend
fb1560edff4b891a213ce2205b2c1bcb -
echo '### Race condition bug - 1 - would block'; seq 1 80 | nice parallel -j0 'seq 1 10| parallel --block 1 --recend "" --pipe cat;true' >/dev/null
echo '### Race condition bug - 1 - would block'; seq 1 80 | nice parallel -j0 'seq 1 10| parallel --block 1 --recend " --pipe cat;true' >/dev/null
### Race condition bug - 1 - would block
echo '### Race condition bug - 2 - would block'; seq 1 100 | nice parallel -j100 --block 1 --recend "" --pipe cat >/dev/null
echo '### Race condition bug - 2 - would block'; seq 1 100 | nice parallel -j100 --block 1 --recend " --pipe cat >/dev/null
### Race condition bug - 2 - would block
echo '### Test --block size=1'; seq 1 10| TMPDIR=/tmp parallel --block 1 --files --recend "" --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {}
echo '### Test --block size=1'; seq 1 10| TMPDIR=/tmp parallel --block 1 --files --recend " --pipe sort -n | parallel -Xj1 sort -nm {} ";"rm {}
### Test --block size=1

View file

@ -1,16 +1,13 @@
echo '### tmux-1.9'
### tmux-1.9
seq 510 512 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux-1.9 -S /TMP/tmsXXXXX attach
0
seq 0000 10 510 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux-1.9 -S /TMP/tmsXXXXX attach
0
echo '### tmux-1.9 fails' seq 512 10 2000 | PARALLEL_TMUX=tmux-1.9 par_tmux
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux-1.9 -S /TMP/tmsXXXXX attach
0
seq 2001 10 3000 | PARALLEL_TMUX=tmux-1.9 par_tmux
parallel: Error: Command line too long (2012 >= 523) at input 0: 2001
@ -65,22 +62,19 @@ parallel: Error: Command line too long (6 >= -1264) at input 0: 0
echo '### tmux-1.9 0..255 ascii'
### tmux-1.9 0..255 ascii
perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } 0..$_),"\n" } 0..255' | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux --timeout 5 echo | par_tmux_filter; echo $?
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux-1.9 -S /TMP/tmsXXXXX attach
0
echo '### Test output ascii'
### Test output ascii
rm -f /tmp/paralocal7-ascii*; perl -e 'print map { ($_, map { pack("c*",$_) } grep { $_>=1 && $_!=10 } $_-10..$_),"\n" } 1..255' | stdout parallel --tmux echo {}'>>/tmp/paralocal7-ascii{%}' | par_tmux_filter; sort /tmp/paralocal7-ascii* | md5sum
See output with: tmux -S '/tmp/parallel-local7-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux -S /TMP/tmsXXXXX attach
053c7e8e945ef7641fc63bc309ac069d -
echo '### Test critical lengths. Must not block'
### Test critical lengths. Must not block
seq 140 260 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
parallel: Error: Command line too long (150 >= -1264) at input 0: 140
seq 140 260 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="&"x$_=}' | par_tmux_filter
See output with: tmux-1.9 -S '/tmp/parallel-local7-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux-1.9 -S /TMP/tmsXXXXX attach
seq 560 850 | PARALLEL_TMUX=tmux-1.8 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter
parallel: Error: Command line too long (568 >= -1264) at input 0: 560
seq 560 850 | PARALLEL_TMUX=tmux-1.9 stdout parallel --tmux echo '{}{=$_="a"x$_=}' | par_tmux_filter

View file

@ -1,7 +1,7 @@
par_big_func 1 3XXX 91XXX
par_big_func 1 3XXX 91XXX
par_big_func 1 3XXX 91XXX
par_big_func 1 1XXX 46XXX
par_big_func 1 3XXX 90XXX
par_big_func 1 3XXX 90XXX
par_big_func 1 3XXX 90XXX
par_big_func 1 1XXX 47XXX
par_big_func_name 18XXX
par_big_func_name 18XXX
par_big_func_name 18XXX
@ -32,40 +32,41 @@ par_many_args 1 3XXX 6XXX
par_many_args 1 3XXX 6XXX
par_many_args 1 3XXX 6XXX
par_many_args 1 1XXX 3XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 200 4XXX
par_many_func 1 68 1XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 196 4XXX
par_many_func 1 4 68
par_many_var 22XXX
par_many_var 22XXX
par_many_var 22XXX

View file

@ -148,10 +148,10 @@ num1000000
num128
num30000
num8
outdir
tsv-file.tsv
foo
/tmp/parallel-tutorial-tmp/
`touch /tmp/tripwire` <"'/tmp
/TMP
my_func() {
echo in my_func $1
}
@ -385,6 +385,8 @@ pre-A-post
/usr/bin/bash: -c: line 1: syntax error near unexpected token `)'
/usr/bin/bash: -c: line 1: `set a="num8"; if( { test -d "$a" } ) echo "$a is a dir"'
/usr/bin/bash: -c: line 1: syntax error near unexpected token `)'
/usr/bin/bash: -c: line 1: `set a="outdir"; if( { test -d "$a" } ) echo "$a is a dir"'
/usr/bin/bash: -c: line 1: syntax error near unexpected token `)'
/usr/bin/bash: -c: line 1: `set a="tsv-file.tsv"; if( { test -d "$a" } ) echo "$a is a dir"'
parallel --tag echo foo-{} ::: A B C
A foo-A
@ -440,13 +442,7 @@ echo C
1-middle
1-end
parallel --files echo ::: A B C
/tmp/parallel-tutorial-tmp/
`touch /tmp/tripwire` <"'/tmp/tempfile
/tmp/parallel-tutorial-tmp/
`touch /tmp/tripwire` <"'/tmp/tempfile
/tmp/parallel-tutorial-tmp/
`touch /tmp/tripwire` <"'/tmp/tempfile
parallel: Warning: --files do not work if $TMPDIR contains newline.
/TMP/tempfile
parallel --tmpdir /var/tmp --files echo ::: A B C
/var/tmp/tempfile
parallel --results outdir echo ::: A B C
@ -516,8 +512,7 @@ parallel: Warning: or increasing /proc/sys/fs/file-max
parallel --shuf echo ::: 1 2 3 ::: a b c ::: A B C
123 abc ABC
seq 10 20 | parallel --tmux 'echo start {}; sleep {}; echo done {}'
See output with: tmux -S '/tmp/parallel-tutorial-tmp/
`touch /tmp/tripwire` <"'"'"'/tmp/tmsXXXXX' attach
See output with: tmux -S /TMP/tmsXXXXX attach
tmux -S /tmp/tmsXXXXX attach
no sessions
parallel --delay 2.5 echo Starting {}\;date ::: 1 2 3
@ -705,12 +700,11 @@ This is input_file
cat common_file\; echo {} ::: foo
common data
foo
parallel -S $SERVER1 pwd ::: ""
parallel --workdir . -S $SERVER1 pwd ::: ""
parallel --workdir ... -S $SERVER1 pwd ::: ""
parallel -S $SERVER1 pwd ::: "
parallel --workdir . -S $SERVER1 pwd ::: "
parallel --workdir ... -S $SERVER1 pwd ::: "
/home/parallel
/tmp/parallel-tutorial-tmp/
`touch /tmp/tripwire` <"'/tmp
/TMP
/home/parallel/.TMPWORKDIR
parallel -S $SERVER1 --sshdelay 0.2 echo ::: 1 2 3
9
@ -792,11 +786,14 @@ foo bar baz
in my_func baz
parallel --record-env
cat ~/.parallel/ignored_vars|sort
BASH_FUNC_replace_tmpdir%%
BASH_FUNC_run_once%%
BASH_FUNC_run_test%%
_
mysqlrootpass
oracle_password
qTMPDIR
qqTMPDIR
testsuitedir
withpassword
# The function is only copied if using Bash
@ -1213,7 +1210,7 @@ Arguments
io.write(" ")
io.write(arg[a])
end
print("")
print(")
/usr/bin/bash: line 3: io.write: command not found
/usr/bin/bash: -c: line 4: syntax error near unexpected token `='
/usr/bin/bash: -c: line 4: ` for a = 1, #arg do'

View file

@ -47,9 +47,7 @@ def 3
### Test --debug
dburl mysql://tange:tange@localhost:3306/tange
databasedriver mysql user tange password tange host localhost port 3306 database tange query
[ | ((sleep 1; rm '/tmp/sql01-tmp/
`touch /tmp/tripwire` <"'"'"'tmpfile') & mysql --defaults-extra-file='/tmp/sql01-tmp/
`touch /tmp/tripwire` <"'"'"'tmpfile' --host=localhost --user=tange --port=3306 tange)]
[ | ((sleep 1; rm /TMP/tmpfile') & mysql --defaults-extra-file=/TMP/tmpfile' --host=localhost --user=tange --port=3306 tange)]
Test if --debug works
Yes it does
### Test --version -V