parallel: Check if PARALLEL_SHELL is in path.

env_parallel compatible with more unices.
This commit is contained in:
Ole Tange 2017-12-23 00:01:20 +01:00
parent b843ec7398
commit da545d53ff
15 changed files with 321 additions and 48 deletions

View file

@ -199,9 +199,9 @@ to:parallel@gnu.org, bug-parallel@gnu.org
stable-bcc: Jesse Alama <jessealama@fastmail.fm> stable-bcc: Jesse Alama <jessealama@fastmail.fm>
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/
<<No new functionality was introduced so this is a good candidate for a stable release.>> <<No new functionality was introduced so this is a good candidate for a stable release.>>
@ -211,8 +211,14 @@ Haiku of the month:
New in this release: New in this release:
parset for ksh, zsh, 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://docs.computecanada.ca/wiki/GNU_Parallel
https://qiita.com/inouet/items/bfc208668c86caf8ff74 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
<<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>> <<Citation not OK: BAMClipper: removing primers from alignments to minimize false-negative mutations in amplicon next-generation sequencing https://www.nature.com/articles/s41598-017-01703-6>>

View file

@ -274,7 +274,7 @@ _parset_main() {
# => $1 is the name of the array to put data into # => $1 is the name of the array to put data into
# Supported in: bash # Supported in: bash
# Arrays do not work in: ash dash # 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 $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi
} }

View file

@ -58,10 +58,17 @@ env_parallel() {
} }
_remove_bad_NAMES() { _remove_bad_NAMES() {
# Do not transfer vars and funcs from env_parallel # 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(<STDIN>) {/$r/o or print}' `_list_readonly`
}
# Macos-grep does not like long patterns
# Old Solaris grep does not support -E # 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 '^(_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)$' | # 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| perl -ne '/^(_names_of_ALIASES|
@ -72,6 +79,7 @@ env_parallel() {
_names_of_VARIABLES| _names_of_VARIABLES|
_bodies_of_VARIABLES| _bodies_of_VARIABLES|
_remove_bad_NAMES| _remove_bad_NAMES|
_remove_readonly|
_prefix_PARALLEL_ENV| _prefix_PARALLEL_ENV|
_get_ignored_VARS| _get_ignored_VARS|
_make_grep_REGEXP| _make_grep_REGEXP|
@ -87,7 +95,7 @@ env_parallel() {
# Filter names matching --env # Filter names matching --env
# perl version of: grep -E "^$_grep_REGEXP"\$ | grep -vE "^"\$ | # perl version of: grep -E "^$_grep_REGEXP"\$ | grep -vE "^"\$ |
perl -ne "/^$_grep_REGEXP"'$/ and not /^'"$_ignore_UNDERSCORE"'$/ and print' | 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 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' 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)" : "(.*)"; 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() { _warning() {
echo "env_parallel: Warning: $@" >&2 echo "env_parallel: Warning: $@" >&2
} }
# Bash is broken in version 3.2.25 and 4.2.39 # Bash is broken in version 3.2.25 and 4.2.39
# The crazy '[ "`...`" == "" ]' is needed for the same reason # 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 echo 'env_parallel: Error: parallel must be in $PATH.' >&2
return 255 return 255
fi fi
@ -190,7 +213,7 @@ env_parallel() {
fi fi
unset _variable_NAMES unset _variable_NAMES
_which_true="`which true`" _which_true="`_which true`"
# Copy shopt (so e.g. extended globbing works) # Copy shopt (so e.g. extended globbing works)
# But force expand_aliases as aliases otherwise do not work # But force expand_aliases as aliases otherwise do not work
PARALLEL_ENV="` PARALLEL_ENV="`
@ -206,8 +229,8 @@ env_parallel() {
unset _grep_REGEXP unset _grep_REGEXP
unset _ignore_UNDERSCORE unset _ignore_UNDERSCORE
# Test if environment is too big # Test if environment is too big
if [ "`which true`" == "$_which_true" ] ; then if [ "`_which true`" == "$_which_true" ] ; then
`which parallel` "$@"; `_which parallel` "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;
return $_parallel_exit_CODE return $_parallel_exit_CODE
@ -287,9 +310,9 @@ _parset_main() {
else else
# $_parset_name does not contain , or space # $_parset_name does not contain , or space
# => $_parset_name is the name of the array to put data into # => $_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 # 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 $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi
} }

View file

@ -274,7 +274,7 @@ _parset_main() {
# => $1 is the name of the array to put data into # => $1 is the name of the array to put data into
# Supported in: bash # Supported in: bash
# Arrays do not work in: ash dash # 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 $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi
} }

View file

@ -252,7 +252,7 @@ _parset_main() {
# => $1 is the name of the array to put data into # => $1 is the name of the array to put data into
# Supported in: bash # Supported in: bash
# Arrays do not work in: ash dash # 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 $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi
} }

View file

@ -264,8 +264,8 @@ _parset_main() {
} }
exit $exitval; exit $exitval;
' || return 255 ' || return 255
if echo "$_parset_name" | grep -E ',| ' >/dev/null ; then if perl -e 'exit not grep /,| /, @ARGV' "$_parset_name" ; then
# $1 contains , or space # $_parset_name contains , or space
# Split on , or space to get the names # Split on , or space to get the names
eval "$( eval "$(
# Compute results into files # Compute results into files
@ -278,11 +278,11 @@ _parset_main() {
) )
)" )"
else else
# $1 contains no space or , # $_parset_name does not contain , or space
# => $1 is the name of the array to put data into # => $_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 # 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 $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi
} }

View file

@ -245,7 +245,7 @@ _parset_main() {
# => $1 is the name of the array to put data into # => $1 is the name of the array to put data into
# Supported in: bash # Supported in: bash
# Arrays do not work in: ash dash # 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 $_\`\" "' ) )" perl -pe 'chop;$_="\"\`cat $_; rm $_\`\" "' ) )"
fi fi
} }

View file

@ -1110,6 +1110,10 @@ sub parse_options {
$Global::debug = $opt::D; $Global::debug = $opt::D;
$Global::shell = $ENV{'PARALLEL_SHELL'} || parent_shell($$) $Global::shell = $ENV{'PARALLEL_SHELL'} || parent_shell($$)
|| $ENV{'SHELL'} || "/bin/sh"; || $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:; $Global::cshell = $Global::shell =~ m:/csh:;
if(defined $opt::X) { $Global::ContextReplace = 1; } if(defined $opt::X) { $Global::ContextReplace = 1; }
if(defined $opt::silent) { $Global::verbose = 0; } if(defined $opt::silent) { $Global::verbose = 0; }
@ -4525,10 +4529,14 @@ sub which {
# Returns: # Returns:
# @full_path = full paths to @programs. Nothing if not found # @full_path = full paths to @programs. Nothing if not found
my @which; my @which;
::debug("which", "@_ in $ENV{'PATH'}"); ::debug("which", "@_ in $ENV{'PATH'}\n");
for my $prg (@_) { for my $prg (@_) {
push(@which, grep { not -d $_ and -x $_ } push(@which, grep { not -d $_ and -x $_ }
map { $_."/".$prg } split(":",$ENV{'PATH'})); map { $_."/".$prg } split(":",$ENV{'PATH'}));
if($prg =~ m:/:) {
# Including path
push(@which, grep { not -d $_ and -x $_ } $prg);
}
} }
return @which; return @which;
} }

View file

@ -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<parallel>. This will You have now learned the basic use of GNU B<parallel>. This will
probably cover most cases of your use of GNU B<parallel>. probably cover most cases of your use of GNU B<parallel>.
The rest of this document is simply to go into more details on each of The rest of this document will go into more details on each of the
the sections and cover special use cases. sections and cover special use cases.
=head1 Learn GNU Parallel in an hour =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 -a seq-6 echo Dice1={1} Dice2={2}
parallel -a seq6 echo Dice1={1} Dice2={2} :::: seq-6 parallel -a seq6 echo Dice1={1} Dice2={2} :::: seq-6
parallel echo Dice1={1} Dice2={2} ::: 1 2 3 4 5 6 :::: 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 '-': If stdin (standard input) is the only input source, you do not need the '-':
@ -165,22 +165,106 @@ GNU B<parallel> has some replacement strings to make it easier
=head2 Controlling the output =head2 Controlling the output
parset =head3 parset
B<parset> is a shell function to get the output from GNU B<parallel>
into shell variables.
B<parset> is fully supported for B<Bash/Zsh/Ksh> and partially supported
for B<ash/dash>. I will assume you run B<Bash>.
To activate B<parset> you have to run:
. `which env_parallel.bash`
(replace B<bash> 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<parset> 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 sql
cvs cvs
=head2 Controlling the execution =head2 Controlling the execution
=head3 Remote execution --dryrun -v
=head2 Remote execution
For this section you must have B<ssh> 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<ssh-agent>.
=head3 Workers
=head3 --transferfile
B<--transferfile> I<filename> will transfer I<filename> to the
worker. I<filename> 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 =head2 Pipe mode
--pipepart
=head2 That's it =head2 That's it
=head1 Advanced usage =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. Interfacing with R.
@ -208,7 +292,7 @@ Interfacing with HTML/?
--termseq --termseq
=head3 Remote execution =head2 Remote execution
seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo seq 10 | parallel --sshlogin 'ssh -i "key.pem" a@b.com' echo

View file

@ -110,7 +110,7 @@ So you must be able to do this:
ssh $SERVER2 echo works ssh $SERVER2 echo works
It can be setup by running 'ssh-keygen -t dsa; ssh-copy-id $SERVER1' 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 =back

View file

@ -1391,7 +1391,7 @@ par_bash_environment_too_big() {
echo 'bug #50815: env_parallel should warn if the environment is too big' echo 'bug #50815: env_parallel should warn if the environment is too big'
. `which env_parallel.bash`; . `which env_parallel.bash`;
bigvar="$(perl -e 'print "x"x121000')" bigvar="$(perl -e 'print "x"x120000')"
env_parallel echo ::: OK_bigvar env_parallel echo ::: OK_bigvar
env_parallel -S lo echo ::: OK_bigvar_remote 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 env_parallel -S lo echo ::: OK_bigvar_quote_remote
bigvar=u 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 echo ::: OK_bigfunc
env_parallel -S lo echo ::: OK_bigfunc_remote 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 echo ::: OK_bigfunc_quote
env_parallel -S lo echo ::: OK_bigfunc_quote_remote env_parallel -S lo echo ::: OK_bigfunc_quote_remote
bigfunc() { true; } 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 | parallel --delay $D -j$P --tag -k '{} 2>&1'
#compgen -A function | grep par_ | sort | #compgen -A function | grep par_ | sort |
compgen -A function | grep par_ | sort -r | 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:/'

View file

@ -28,6 +28,8 @@ echo '### Tests on polarhome machines'
echo 'Setup on polarhome machines' echo 'Setup on polarhome machines'
# Avoid the stupid /etc/issue.net banner at Polarhome: -oLogLevel=quiet # 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 & stdout parallel -kj0 --delay 0.2 ssh -oLogLevel=quiet {} mkdir -p bin ::: $POLAR &
par_onall() { par_onall() {
@ -88,18 +90,43 @@ par_onall 'func() { cat <(echo bash only A); };export -f func; bin/parallel func
echo echo
echo '### Does PARALLEL_SHELL help exporting a bash function not kill parallel' echo '### Does PARALLEL_SHELL help exporting a bash function not kill parallel'
echo 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
echo '### env_parallel echo :::: <(echo OK)' echo '### env_parallel echo :::: <(echo OK)'
echo '(bash only)' echo '(bash ksh zsh only)'
echo echo
par_onall 'bin/env_parallel --install && echo {}' ::: install-OK 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; '\
par_onall 'source setupenv || . `pwd`/setupenv; env_parallel echo reading from process substitution :::: <(echo {})' ::: OK | '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 # csh on NetBSD does not support process substitution
grep -v ': /tmp/.*: No such file or directory' 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')'; }' # eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }'
# env_parallel myfunc ::: a | wc # OK # env_parallel myfunc ::: a | wc # OK
# eval 'myfunc2() { echo '$(perl -e 'print "x"x120000')'; }' # eval 'myfunc2() { echo '$(perl -e 'print "x"x120000')'; }'

View file

@ -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
par_bash_environment_too_big OK_bigfunc_quote_remote par_bash_environment_too_big OK_bigfunc_quote_remote
par_bash_environment_too_big Rest should fail 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env
par_bash_environment_too_big env_parallel: Error: And the use '--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 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: 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: 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: env_parallel --record-env

View file

@ -452,6 +452,7 @@ centos.polarhome.com bash only B
debian-ppc.polarhome.com bash only B debian-ppc.polarhome.com bash only B
debian.polarhome.com bash only B debian.polarhome.com bash only B
freebsd.polarhome.com bash only B freebsd.polarhome.com bash only B
hpux-ia64.polarhome.com bash only B
macosx.polarhome.com bash only B macosx.polarhome.com bash only B
mandriva.polarhome.com bash only B mandriva.polarhome.com bash only B
miros.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-x86.polarhome.com bash only B
solaris.polarhome.com bash only B solaris.polarhome.com bash only B
suse.polarhome.com bash only B suse.polarhome.com bash only B
tru64.polarhome.com bash only B
ubuntu.polarhome.com bash only B ubuntu.polarhome.com bash only B
unixware.polarhome.com
### env_parallel echo :::: <(echo OK) ### env_parallel echo :::: <(echo OK)
(bash only) (bash ksh zsh only)
aix.polarhome.com Installed env_parallel in: aix.polarhome.com Installed env_parallel in:
aix.polarhome.com /home/t/tange/.bashrc 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 /home/t/tange/.tcshrc
freebsd.polarhome.com install-OK freebsd.polarhome.com install-OK
hpux-ia64.polarhome.com No such file or directory: bash 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 Installed env_parallel in:
macosx.polarhome.com /Users/tange/.bashrc macosx.polarhome.com /Users/tange/.bashrc
macosx.polarhome.com /Users/tange/.shrc 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 tru64.polarhome.com reading from process substitution OK
ubuntu.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 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
macosx.polarhome.com ### Test if empty command in process list causes problems macosx.polarhome.com ### Test if empty command in process list causes problems
macosx.polarhome.com macosx.polarhome.com

View file

@ -859,6 +859,7 @@ ORACLE_SID
PARALLEL PARALLEL
PARALLEL_HOME PARALLEL_HOME
PARALLEL_PID PARALLEL_PID
PARALLEL_RSYNC_OPTS
PARALLEL_SEQ PARALLEL_SEQ
PARALLEL_TMP PARALLEL_TMP
PATH PATH