Fixed env_parallel not working on old versions of Bash.

https://lists.gnu.org/archive/html/bug-parallel/2017-07/msg00000.html
This commit is contained in:
Ole Tange 2017-07-06 17:22:50 +02:00
parent 8e22009706
commit 10b4539b1f
3 changed files with 23 additions and 10 deletions

View file

@ -97,13 +97,10 @@ env_parallel() {
' -- "$@" ' -- "$@"
} }
if which parallel | grep 'no parallel in' >/dev/null; then
echo 'env_parallel: Error: parallel must be in $PATH.' >&2 # Bash 'which' is broken in version 3.2.25 and 4.2.39
return 255 # The crazy '[ "`...`" == "" ]' is needed for the same reason
fi if [ "`which parallel`" == "" ]; then
if which parallel >/dev/null; then
true which on linux
else
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
@ -115,7 +112,7 @@ env_parallel() {
_ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`" _ignore_UNDERSCORE="`_get_ignored_VARS \"$@\"`"
# --record-env # --record-env
if perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; then if [ "`perl -e 'exit grep { /^--record-env$/ } @ARGV' -- "$@"; echo $?`" == 0 ] ; then
true skip true skip
else else
(_names_of_ALIASES; (_names_of_ALIASES;
@ -152,6 +149,7 @@ env_parallel() {
fi fi
unset _variable_NAMES unset _variable_NAMES
_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="`
@ -165,7 +163,7 @@ env_parallel() {
unset _list_variable_VALUES unset _list_variable_VALUES
unset _list_function_BODIES unset _list_function_BODIES
# Test if environment is too big # Test if environment is too big
if `which true` >/dev/null ; then if [ "`which true`" == "$_which_true" ] ; then
`which parallel` "$@"; `which parallel` "$@";
_parallel_exit_CODE=$? _parallel_exit_CODE=$?
unset PARALLEL_ENV; unset PARALLEL_ENV;

View file

@ -1376,7 +1376,7 @@ sub check_invalid_option_combinations {
sub init_globals { sub init_globals {
# Defaults: # Defaults:
$Global::version = 20170624; $Global::version = 20170706;
$Global::progname = 'parallel'; $Global::progname = 'parallel';
$Global::infinity = 2**31; $Global::infinity = 2**31;
$Global::debug = 0; $Global::debug = 0;

View file

@ -66,6 +66,21 @@ echo '### Does PARALLEL_SHELL help exporting a bash function not kill parallel'
echo echo
PARALLEL_SHELL=/bin/bash parallel --retries $RETRIES --onall -j0 -k --tag --timeout $TIMEOUT $S_POLAR 'func() { cat <(echo bash only B); };export -f func; bin/parallel func ::: ' ::: 1 2>&1 | sort PARALLEL_SHELL=/bin/bash parallel --retries $RETRIES --onall -j0 -k --tag --timeout $TIMEOUT $S_POLAR 'func() { cat <(echo bash only B); };export -f func; bin/parallel func ::: ' ::: 1 2>&1 | sort
echo
echo '### env_parallel echo :::: <(echo OK)'
echo '(bash only)'
echo
parallel --retries $RETRIES --onall -j0 -k --tag --timeout $TIMEOUT $S_POLAR 'bin/env_parallel --install'
parallel --retries $RETRIES --onall -j0 -k --tag --timeout $TIMEOUT $S_POLAR 'env_parallel echo env_parallel ::: OK'
parallel --retries $RETRIES --onall -j0 -k --tag --timeout $TIMEOUT $S_POLAR 'env_parallel echo reading from process substitution :::: <(echo OK)'
# eval 'myfunc() { echo '$(perl -e 'print "x"x20000')'; }'
# env_parallel myfunc ::: a | wc # OK
# eval 'myfunc2() { echo '$(perl -e 'print "x"x120000')'; }'
# env_parallel myfunc ::: a | wc # Fail too big env
# Can this be made faster using `ssh -M`?
# Can it be moved to virtualbox?
# Started earlier - therefore wait # Started earlier - therefore wait
wait; cat /tmp/test_empty_cmd wait; cat /tmp/test_empty_cmd
rm /tmp/test_empty_cmd rm /tmp/test_empty_cmd