From da545d53fff9e6be9885dbf326e00961f4ab921a Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Sat, 23 Dec 2017 00:01:20 +0100 Subject: [PATCH] parallel: Check if PARALLEL_SHELL is in path. env_parallel compatible with more unices. --- doc/release_new_version | 10 +- src/env_parallel.ash | 2 +- src/env_parallel.bash | 41 ++++-- src/env_parallel.dash | 2 +- src/env_parallel.ksh | 2 +- src/env_parallel.sh | 12 +- src/env_parallel.zsh | 2 +- src/parallel | 10 +- src/parallel_book.pod | 98 +++++++++++++- src/parallel_tutorial.pod | 2 +- testsuite/tests-to-run/parallel-local-ssh7.sh | 10 +- testsuite/tests-to-run/parallel-polarhome.sh | 37 +++++- testsuite/wanted-results/parallel-local-ssh7 | 16 +-- testsuite/wanted-results/parallel-polarhome | 124 +++++++++++++++++- testsuite/wanted-results/parallel-tutorial | 1 + 15 files changed, 321 insertions(+), 48 deletions(-) diff --git a/doc/release_new_version b/doc/release_new_version index 4f792488..10d7b327 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -199,9 +199,9 @@ to:parallel@gnu.org, bug-parallel@gnu.org stable-bcc: Jesse Alama -Subject: GNU Parallel 20171122 ('Mugabe') released <<[stable]>> +Subject: GNU Parallel 20171222 ('Jerusalem/Agung/Bir al-Abed') released <<[stable]>> -GNU Parallel 20171122 ('Mugabe') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ +GNU Parallel 20171222 ('Jerusalem/Agung/Bir al-Abed') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/ <> @@ -211,8 +211,14 @@ Haiku of the month: New in this release: parset for ksh, zsh, +auto hostgroups with arg@sshlogin +https://support.ehelp.edu.au/support/solutions/articles/6000089713-tips-for-running-jobs-on-your-vm#parallel +https://mogonwiki.zdv.uni-mainz.de/dokuwiki/node_local_scheduling https://docs.computecanada.ca/wiki/GNU_Parallel https://qiita.com/inouet/items/bfc208668c86caf8ff74 +https://wiki.ncsa.illinois.edu/display/ROGER/Using+GNU+Parallel +https://github.com/LangilleLab/microbiome_helper/wiki/Quick-Introduction-to-GNU-Parallel +https://docs.computecanada.ca/wiki/GNU_Parallel <> diff --git a/src/env_parallel.ash b/src/env_parallel.ash index 57a54730..8deb0d67 100755 --- a/src/env_parallel.ash +++ b/src/env_parallel.ash @@ -274,7 +274,7 @@ _parset_main() { # => $1 is the name of the array to put data into # Supported in: bash # Arrays do not work in: ash dash - eval $_parset_name="( $( $_parset_parallel_prg --files -k "$@" | + eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" fi } diff --git a/src/env_parallel.bash b/src/env_parallel.bash index 665abf36..835bc1bd 100755 --- a/src/env_parallel.bash +++ b/src/env_parallel.bash @@ -58,10 +58,17 @@ env_parallel() { } _remove_bad_NAMES() { # Do not transfer vars and funcs from env_parallel - # MacOS-grep does not like long patterns + _remove_readonly() { + _list_readonly() { + readonly | perl -pe 's/^\S+\s+\S+\s+(\S[^=]*)=.*/$1/' + } + perl -e '$r=join("|",@ARGV); while() {/$r/o or print}' `_list_readonly` + } + # Macos-grep does not like long patterns # Old Solaris grep does not support -E + # so 'grep' is converted to 'perl' - # Perl version of: + # Perl Version of: # grep -Ev '^(_names_of_ALIASES|_bodies_of_ALIASES|_names_of_maybe_FUNCTIONS|_names_of_FUNCTIONS|_bodies_of_FUNCTIONS|_names_of_VARIABLES|_bodies_of_VARIABLES|_remove_bad_NAMES|_prefix_PARALLEL_ENV)$' | # grep -Ev '^(_get_ignored_VARS|_make_grep_REGEXP|_ignore_UNDERSCORE|_alias_NAMES|_list_alias_BODIES|_function_NAMES|_list_function_BODIES|_variable_NAMES|_list_variable_VALUES|_prefix_PARALLEL_ENV|PARALLEL_TMP)$' | perl -ne '/^(_names_of_ALIASES| @@ -72,6 +79,7 @@ env_parallel() { _names_of_VARIABLES| _bodies_of_VARIABLES| _remove_bad_NAMES| + _remove_readonly| _prefix_PARALLEL_ENV| _get_ignored_VARS| _make_grep_REGEXP| @@ -87,7 +95,7 @@ env_parallel() { # Filter names matching --env # perl version of: grep -E "^$_grep_REGEXP"\$ | grep -vE "^"\$ | perl -ne "/^$_grep_REGEXP"'$/ and not /^'"$_ignore_UNDERSCORE"'$/ and print' | - grep -vFf <(readonly) | + _remove_readonly | # perl version of: grep -Ev '^(BASHOPTS|BASHPID|EUID|GROUPS|FUNCNAME|DIRSTACK|_|PIPESTATUS|PPID|SHELLOPTS|UID|USERNAME|BASH_[A-Z_]+)$' perl -ne 'not /^(BASHOPTS|BASHPID|EUID|GROUPS|FUNCNAME|DIRSTACK|_|PIPESTATUS|PPID|SHELLOPTS|UID|USERNAME|BASH_[A-Z_]+)$/ and print' } @@ -133,13 +141,28 @@ env_parallel() { print $vars ? "($vars)" : "(.*)"; ' -- "$@" } + _which() { + # type returns: + # bash is a tracked alias for /bin/bash + # true is a shell builtin + # which is /usr/bin/which + # which is hashed (/usr/bin/which) + # aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' + # Return 0 if found, 1 otherwise + type "$@" | + perl -pe '$exit += (s/ is aliased to .*// || + s/ is a shell builtin// || + s/.* is hashed .(\S+).$/$1/ || + s/.* is (a tracked alias for )?//); + END { exit not $exit }' + } _warning() { echo "env_parallel: Warning: $@" >&2 } # Bash is broken in version 3.2.25 and 4.2.39 # The crazy '[ "`...`" == "" ]' is needed for the same reason - if [ "`which parallel`" == "" ]; then + if [ "`_which parallel`" == "" ]; then echo 'env_parallel: Error: parallel must be in $PATH.' >&2 return 255 fi @@ -190,7 +213,7 @@ env_parallel() { fi unset _variable_NAMES - _which_true="`which true`" + _which_true="`_which true`" # Copy shopt (so e.g. extended globbing works) # But force expand_aliases as aliases otherwise do not work PARALLEL_ENV="` @@ -206,8 +229,8 @@ env_parallel() { unset _grep_REGEXP unset _ignore_UNDERSCORE # Test if environment is too big - if [ "`which true`" == "$_which_true" ] ; then - `which parallel` "$@"; + if [ "`_which true`" == "$_which_true" ] ; then + `_which parallel` "$@"; _parallel_exit_CODE=$? unset PARALLEL_ENV; return $_parallel_exit_CODE @@ -287,9 +310,9 @@ _parset_main() { else # $_parset_name does not contain , or space # => $_parset_name is the name of the array to put data into - # Supported in: bash + # Supported in: bash zsh ksh # Arrays do not work in: ash dash - eval $_parset_name="( $( $_parset_parallel_prg --files -k "$@" | + eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" fi } diff --git a/src/env_parallel.dash b/src/env_parallel.dash index 7fee1950..aa1a5df4 100755 --- a/src/env_parallel.dash +++ b/src/env_parallel.dash @@ -274,7 +274,7 @@ _parset_main() { # => $1 is the name of the array to put data into # Supported in: bash # Arrays do not work in: ash dash - eval $_parset_name="( $( $_parset_parallel_prg --files -k "$@" | + eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" fi } diff --git a/src/env_parallel.ksh b/src/env_parallel.ksh index 1e221c1c..ea5c5fc7 100755 --- a/src/env_parallel.ksh +++ b/src/env_parallel.ksh @@ -252,7 +252,7 @@ _parset_main() { # => $1 is the name of the array to put data into # Supported in: bash # Arrays do not work in: ash dash - eval $_parset_name="( $( $_parset_parallel_prg --files -k "$@" | + eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" fi } diff --git a/src/env_parallel.sh b/src/env_parallel.sh index f113b59b..ea29a307 100755 --- a/src/env_parallel.sh +++ b/src/env_parallel.sh @@ -264,8 +264,8 @@ _parset_main() { } exit $exitval; ' || return 255 - if echo "$_parset_name" | grep -E ',| ' >/dev/null ; then - # $1 contains , or space + if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then + # $_parset_name contains , or space # Split on , or space to get the names eval "$( # Compute results into files @@ -278,11 +278,11 @@ _parset_main() { ) )" else - # $1 contains no space or , - # => $1 is the name of the array to put data into - # Supported in: bash + # $_parset_name does not contain , or space + # => $_parset_name is the name of the array to put data into + # Supported in: bash zsh ksh # Arrays do not work in: ash dash - eval $_parset_name="( $( $_parset_parallel_prg --files -k "$@" | + eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" fi } diff --git a/src/env_parallel.zsh b/src/env_parallel.zsh index 00895bf3..4bf4eb35 100755 --- a/src/env_parallel.zsh +++ b/src/env_parallel.zsh @@ -245,7 +245,7 @@ _parset_main() { # => $1 is the name of the array to put data into # Supported in: bash # Arrays do not work in: ash dash - eval $_parset_name="( $( $_parset_parallel_prg --files -k "$@" | + eval "$_parset_name=( $( $_parset_parallel_prg --files -k "$@" | perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )" fi } diff --git a/src/parallel b/src/parallel index 78c53318..a342c6af 100755 --- a/src/parallel +++ b/src/parallel @@ -1110,6 +1110,10 @@ sub parse_options { $Global::debug = $opt::D; $Global::shell = $ENV{'PARALLEL_SHELL'} || parent_shell($$) || $ENV{'SHELL'} || "/bin/sh"; + if(not which($Global::shell)) { + ::error("Shell '$Global::shell' not found."); + wait_and_exit(255); + } $Global::cshell = $Global::shell =~ m:/csh:; if(defined $opt::X) { $Global::ContextReplace = 1; } if(defined $opt::silent) { $Global::verbose = 0; } @@ -4525,10 +4529,14 @@ sub which { # Returns: # @full_path = full paths to @programs. Nothing if not found my @which; - ::debug("which", "@_ in $ENV{'PATH'}"); + ::debug("which", "@_ in $ENV{'PATH'}\n"); for my $prg (@_) { push(@which, grep { not -d $_ and -x $_ } map { $_."/".$prg } split(":",$ENV{'PATH'})); + if($prg =~ m:/:) { + # Including path + push(@which, grep { not -d $_ and -x $_ } $prg); + } } return @which; } diff --git a/src/parallel_book.pod b/src/parallel_book.pod index 51f34f1f..3ea05858 100644 --- a/src/parallel_book.pod +++ b/src/parallel_book.pod @@ -104,8 +104,8 @@ splits on \n (newline) and passes a block of around 1 MB to each job. You have now learned the basic use of GNU B. This will probably cover most cases of your use of GNU B. -The rest of this document is simply to go into more details on each of -the sections and cover special use cases. +The rest of this document will go into more details on each of the +sections and cover special use cases. =head1 Learn GNU Parallel in an hour @@ -129,7 +129,7 @@ after B<-a> or B<::::>. So these all do the same: parallel -a seq6 -a seq-6 echo Dice1={1} Dice2={2} parallel -a seq6 echo Dice1={1} Dice2={2} :::: seq-6 parallel echo Dice1={1} Dice2={2} ::: 1 2 3 4 5 6 :::: seq-6 - cat seq-6 | parallel echo Dice1={1} Dice2={2} :::: seq-6 - + cat seq-6 | parallel echo Dice1={1} Dice2={2} :::: seq6 - If stdin (standard input) is the only input source, you do not need the '-': @@ -165,22 +165,106 @@ GNU B has some replacement strings to make it easier =head2 Controlling the output -parset +=head3 parset + +B is a shell function to get the output from GNU B +into shell variables. + +B is fully supported for B and partially supported +for B. I will assume you run B. + +To activate B you have to run: + + . `which env_parallel.bash` + +(replace B with your shell's name). + +Then you can run: + + parset a,b,c seq ::: 4 5 6 + echo "$c" + +or: + + parset 'a b c' seq ::: 4 5 6 + echo "$c" + +If you give a single variable, this will become an array: + + parset arr seq ::: 4 5 6 + echo "${arr[1]}" + +B has one limitation: If it reads from a pipe, the output will +be lost. + + echo This will not work | parset myarr echo + echo Nothing: "${myarr[*]}" + +Instead you can do this: + + echo This will work > tempfile + parset myarr echo < tempfile + echo ${myarr[*]} + sql cvs =head2 Controlling the execution -=head3 Remote execution +--dryrun -v + +=head2 Remote execution + +For this section you must have B access with no password to 2 +servers: B<$server1> and B<$server2>. + + server1=server.example.com + server2=server2.example.net + +So you must be able to do this: + + ssh $server1 echo works + ssh $server2 echo works + +It can be setup by running 'ssh-keygen -t dsa; ssh-copy-id $server1' +and using an empty passphrase. Or you can use B. + +=head3 Workers + +=head3 --transferfile + +B<--transferfile> I will transfer I to the +worker. I can contain a replacement string: + + parallel -S $server1,$server2 --transferfile {} wc ::: example.* + parallel -S $server1,$server2 --transferfile {2} \ + echo count {1} in {2}';' wc {1} {2} ::: -l -c ::: example.* + +A shorthand for B<--transferfile {}> is B<--transfer>. + +=head3 --return + + + +=head3 --cleanup + +A shorthand for B<--transfer --return {} --cleanup> is B<--trc {}>. + =head2 Pipe mode + +--pipepart + + =head2 That's it =head1 Advanced usage +parset fifo, cmd substtition, arrayelements, array with var names and cmds, env_parset -env_parallel, parset, env_parset + +env_parallel Interfacing with R. @@ -208,7 +292,7 @@ Interfacing with HTML/? --termseq -=head3 Remote execution +=head2 Remote execution seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo diff --git a/src/parallel_tutorial.pod b/src/parallel_tutorial.pod index 537aee02..d70572a3 100644 --- a/src/parallel_tutorial.pod +++ b/src/parallel_tutorial.pod @@ -110,7 +110,7 @@ So you must be able to do this: ssh $SERVER2 echo works It can be setup by running 'ssh-keygen -t dsa; ssh-copy-id $SERVER1' -and using an empty pass phrase. +and using an empty passphrase. =back diff --git a/testsuite/tests-to-run/parallel-local-ssh7.sh b/testsuite/tests-to-run/parallel-local-ssh7.sh index 3105cdaa..c538f862 100755 --- a/testsuite/tests-to-run/parallel-local-ssh7.sh +++ b/testsuite/tests-to-run/parallel-local-ssh7.sh @@ -1391,7 +1391,7 @@ par_bash_environment_too_big() { echo 'bug #50815: env_parallel should warn if the environment is too big' . `which env_parallel.bash`; - bigvar="$(perl -e 'print "x"x121000')" + bigvar="$(perl -e 'print "x"x120000')" env_parallel echo ::: OK_bigvar env_parallel -S lo echo ::: OK_bigvar_remote @@ -1400,11 +1400,11 @@ par_bash_environment_too_big() { env_parallel -S lo echo ::: OK_bigvar_quote_remote bigvar=u - eval 'bigfunc() { a="'"$(perl -e 'print "x"x121000')"'"; };' + eval 'bigfunc() { a="'"$(perl -e 'print "x"x120000')"'"; };' env_parallel echo ::: OK_bigfunc env_parallel -S lo echo ::: OK_bigfunc_remote - eval 'bigfunc() { a="'"$(perl -e 'print "\""x121000')"'"; };' + eval 'bigfunc() { a="'"$(perl -e 'print "\""x120000')"'"; };' env_parallel echo ::: OK_bigfunc_quote env_parallel -S lo echo ::: OK_bigfunc_quote_remote bigfunc() { true; } @@ -2029,4 +2029,6 @@ 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_ | sort -r | - parallel --joblog /tmp/jl-`basename $0` -j200% --tag -k '{} 2>&1' +# parallel --joblog /tmp/jl-`basename $0` --delay $D -j$P --tag -k '{} 2>&1' + parallel --joblog /tmp/jl-`basename $0` -j200% --tag -k '{} 2>&1' | + perl -pe 's/line \d\d\d:/line XXX:/' diff --git a/testsuite/tests-to-run/parallel-polarhome.sh b/testsuite/tests-to-run/parallel-polarhome.sh index d8cbe0ec..1e627479 100755 --- a/testsuite/tests-to-run/parallel-polarhome.sh +++ b/testsuite/tests-to-run/parallel-polarhome.sh @@ -28,6 +28,8 @@ echo '### Tests on polarhome machines' echo 'Setup on polarhome machines' # Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet +PARALLEL_SSH="ssh -oLogLevel=quiet" +export PARALLEL_SSH stdout parallel -kj0 --delay 0.2 ssh -oLogLevel=quiet {} mkdir -p bin ::: $POLAR & par_onall() { @@ -88,18 +90,43 @@ par_onall 'func() { cat <(echo bash only A); };export -f func; bin/parallel func echo echo '### Does PARALLEL_SHELL help exporting a bash function not kill parallel' echo -PARALLEL_SHELL=/bin/bash par_onall 'func() { cat <(echo bash only B); };export -f func; bin/parallel func ::: ' ::: 1 - +( + mkdir -p tmp/bin; + cp /bin/bash tmp/bin + cd tmp + PARALLEL_SHELL=bin/bash par_onall 'func() { cat <(echo bash only B); };export -f func; bin/parallel func ::: ' ::: 1 +) echo echo '### env_parallel echo :::: <(echo OK)' -echo '(bash only)' +echo '(bash ksh zsh only)' echo par_onall 'bin/env_parallel --install && echo {}' ::: install-OK -par_onall 'source setupenv || . `pwd`/setupenv; env_parallel echo env_parallel :::' ::: run-OK -par_onall 'source setupenv || . `pwd`/setupenv; env_parallel echo reading from process substitution :::: <(echo {})' ::: OK | +par_onall 'source setupenv || . `pwd`/setupenv; '\ + 'env_parallel echo env_parallel :::' ::: run-OK +par_onall 'source setupenv || . `pwd`/setupenv; '\ + 'env_parallel echo reading from process substitution :::: <(echo {})' ::: OK | # csh on NetBSD does not support process substitution grep -v ': /tmp/.*: No such file or directory' +echo +echo '### (env_)parset arr seq ::: 2 3 4' +echo '(bash ksh zsh only)' +echo +par_onall 'source setupenv || . `pwd`/setupenv; '\ + 'parset arr seq ::: 2 3 4; echo ${arr[*]}' ::: parset-arr-OK +par_onall 'source setupenv || . `pwd`/setupenv; start=2; '\ + 'env_parset arr seq \$start ::: 2 3 4; echo ${arr[*]}' ::: env_parset-arr-OK + +echo +echo '### (env_)parset var1,var2,var3 seq ::: 2 3 4' +echo '(bash ksh zsh only)' +echo +par_onall 'source setupenv || . `pwd`/setupenv; '\ + 'parset var1,var2,var3 seq ::: 2 3 4; echo $var1,$var2,$var3' ::: parset-var-OK +par_onall 'source setupenv || . `pwd`/setupenv; start=2; '\ + 'env_parset var1,var2,var3 seq \$start ::: 2 3 4; echo $var1,$var2,$var3' ::: env_parset-var-OK + + # eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }' # env_parallel myfunc ::: a | wc # OK # eval 'myfunc2() { echo '$(perl -e 'print "x"x120000')'; }' diff --git a/testsuite/wanted-results/parallel-local-ssh7 b/testsuite/wanted-results/parallel-local-ssh7 index aaf83c31..23063f56 100644 --- a/testsuite/wanted-results/parallel-local-ssh7 +++ b/testsuite/wanted-results/parallel-local-ssh7 @@ -1114,49 +1114,49 @@ par_bash_environment_too_big OK_bigfunc_remote par_bash_environment_too_big OK_bigfunc_quote par_bash_environment_too_big OK_bigfunc_quote_remote par_bash_environment_too_big Rest should fail -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env par_bash_environment_too_big env_parallel: Error: And the use '--env _' par_bash_environment_too_big env_parallel: Error: For details see: man env_parallel -par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line 209: /usr/bin/which: Argument list too long +par_bash_environment_too_big /usr/local/bin/env_parallel.bash: line XXX: /usr/bin/perl: Argument list too long par_bash_environment_too_big env_parallel: Error: Your environment is too big. par_bash_environment_too_big env_parallel: Error: Try running this in a clean environment once: par_bash_environment_too_big env_parallel: Error: env_parallel --record-env diff --git a/testsuite/wanted-results/parallel-polarhome b/testsuite/wanted-results/parallel-polarhome index 4fc62def..9374f338 100644 --- a/testsuite/wanted-results/parallel-polarhome +++ b/testsuite/wanted-results/parallel-polarhome @@ -452,6 +452,7 @@ centos.polarhome.com bash only B debian-ppc.polarhome.com bash only B debian.polarhome.com bash only B freebsd.polarhome.com bash only B +hpux-ia64.polarhome.com bash only B macosx.polarhome.com bash only B mandriva.polarhome.com bash only B miros.polarhome.com bash only B @@ -465,10 +466,12 @@ scosysv.polarhome.com bash only B solaris-x86.polarhome.com bash only B solaris.polarhome.com bash only B suse.polarhome.com bash only B +tru64.polarhome.com bash only B ubuntu.polarhome.com bash only B +unixware.polarhome.com ### env_parallel echo :::: <(echo OK) -(bash only) +(bash ksh zsh only) aix.polarhome.com Installed env_parallel in: aix.polarhome.com /home/t/tange/.bashrc @@ -521,6 +524,7 @@ freebsd.polarhome.com /home/t/tange/.cshrc freebsd.polarhome.com /home/t/tange/.tcshrc freebsd.polarhome.com install-OK hpux-ia64.polarhome.com No such file or directory: bash +hpux.polarhome.com exec request failed on channel 0 macosx.polarhome.com Installed env_parallel in: macosx.polarhome.com /Users/tange/.bashrc macosx.polarhome.com /Users/tange/.shrc @@ -719,6 +723,124 @@ suse.polarhome.com reading from process substitution OK tru64.polarhome.com reading from process substitution OK ubuntu.polarhome.com reading from process substitution OK unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `(' unexpected + +### (env_)parset arr seq ::: 2 3 4 +(bash ksh zsh only) + +centos.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +debian-ppc.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +debian.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +freebsd.polarhome.com source: not found +freebsd.polarhome.com eval: 1: Syntax error: word unexpected (expecting ")") +hpux-ia64.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +macosx.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +mandriva.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +miros.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +netbsd.polarhome.com parset: Command not found. +netbsd.polarhome.com arr: Undefined variable. +openbsd.polarhome.com parset-arr-OK +openindiana.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +pidora.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +raspbian.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +redhat.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +scosysv.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +solaris-x86.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +solaris.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +suse.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +tru64.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +ubuntu.polarhome.com 1 2 1 2 3 1 2 3 4 parset-arr-OK +unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected +centos.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +debian-ppc.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +debian.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +freebsd.polarhome.com source: not found +freebsd.polarhome.com eval: 1: Syntax error: word unexpected (expecting ")") +hpux-ia64.polarhome.com 1 2 1 2 1 2 env_parset-arr-OK +macosx.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +mandriva.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +miros.polarhome.com 1 2 1 2 1 2 env_parset-arr-OK +netbsd.polarhome.com start=2: Command not found. +netbsd.polarhome.com env_parset: Command not found. +netbsd.polarhome.com arr: Undefined variable. +openbsd.polarhome.com env_parset-arr-OK +openindiana.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +pidora.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +raspbian.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +redhat.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +scosysv.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +solaris-x86.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +solaris.polarhome.com 1 2 1 2 1 2 env_parset-arr-OK +suse.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +tru64.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +ubuntu.polarhome.com 2 2 3 2 3 4 env_parset-arr-OK +unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 1: `arr=' unexpected + +### (env_)parset var1,var2,var3 seq ::: 2 3 4 +(bash ksh zsh only) + +centos.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +debian-ppc.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +debian.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +freebsd.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +freebsd.polarhome.com source: not found +hpux-ia64.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +macosx.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +mandriva.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +miros.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +netbsd.polarhome.com parset: Command not found. +netbsd.polarhome.com var1: Undefined variable. +openbsd.polarhome.com ,, parset-var-OK +openindiana.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +pidora.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +raspbian.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +redhat.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +scosysv.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +solaris-x86.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +solaris.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +suse.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +tru64.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +ubuntu.polarhome.com 1 2,1 2 3,1 2 3 4 parset-var-OK +unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +unixware.polarhome.com UX:cat: ERROR: Cannot open tmpfile1: No such file or directory +unixware.polarhome.com UX:rm: ERROR: Cannot access tmpfile1: No such file or directory +unixware.polarhome.com UX:cat: ERROR: Cannot open tmpfile2: No such file or directory +unixware.polarhome.com UX:rm: ERROR: Cannot access tmpfile2: No such file or directory +unixware.polarhome.com UX:cat: ERROR: Cannot open {1}: No such file or directory +unixware.polarhome.com UX:rm: ERROR: Cannot access {1}: No such file or directory +unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 2: `$' unexpected +centos.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +debian-ppc.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +debian.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +freebsd.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +freebsd.polarhome.com source: not found +hpux-ia64.polarhome.com 1 2,1 2,1 2 env_parset-var-OK +macosx.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +mandriva.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +miros.polarhome.com 1 2,1 2,1 2 env_parset-var-OK +netbsd.polarhome.com start=2: Command not found. +netbsd.polarhome.com env_parset: Command not found. +netbsd.polarhome.com var1: Undefined variable. +openbsd.polarhome.com ,, env_parset-var-OK +openindiana.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +pidora.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +raspbian.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +redhat.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +scosysv.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +solaris-x86.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +solaris.polarhome.com 1 2,1 2,1 2 env_parset-var-OK +suse.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +tru64.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +ubuntu.polarhome.com 2,2 3,2 3 4 env_parset-var-OK +unixware.polarhome.com UX:sh (/bin/sh): ERROR: source: Not found +unixware.polarhome.com UX:cat: ERROR: Cannot open tmpfile1: No such file or directory +unixware.polarhome.com UX:rm: ERROR: Cannot access tmpfile1: No such file or directory +unixware.polarhome.com UX:cat: ERROR: Cannot open tmpfile2: No such file or directory +unixware.polarhome.com UX:rm: ERROR: Cannot access tmpfile2: No such file or directory +unixware.polarhome.com UX:cat: ERROR: Cannot open {1}: No such file or directory +unixware.polarhome.com UX:rm: ERROR: Cannot access {1}: No such file or directory +unixware.polarhome.com UX:sh (/bin/sh): ERROR: /bin/sh: Syntax error at line 2: `$' unexpected macosx.polarhome.com macosx.polarhome.com ### Test if empty command in process list causes problems macosx.polarhome.com diff --git a/testsuite/wanted-results/parallel-tutorial b/testsuite/wanted-results/parallel-tutorial index e542b65e..671ddcd6 100644 --- a/testsuite/wanted-results/parallel-tutorial +++ b/testsuite/wanted-results/parallel-tutorial @@ -859,6 +859,7 @@ ORACLE_SID PARALLEL PARALLEL_HOME PARALLEL_PID +PARALLEL_RSYNC_OPTS PARALLEL_SEQ PARALLEL_TMP PATH