From ea0dfc913e6be5e47746cbd853c9cb17f3831c0a Mon Sep 17 00:00:00 2001 From: Ole Tange Date: Tue, 2 Nov 2010 17:10:19 +0100 Subject: [PATCH] parallel: Implemented --profile. Untested. --- aclocal.m4 | 4 +- configure | 249 ++++++++++++-------------- doc/FUTURE_IDEAS | 28 +-- src/parallel | 298 +++++++++++++++++++------------ testsuite/tests-to-run/test37.sh | 63 +++++++ 5 files changed, 365 insertions(+), 277 deletions(-) create mode 100644 testsuite/tests-to-run/test37.sh diff --git a/aclocal.m4 b/aclocal.m4 index fa01d2d9..af39c71a 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -13,8 +13,8 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, -[m4_warning([this file was generated for autoconf 2.67. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) diff --git a/configure b/configure index e28121ce..08249972 100755 --- a/configure +++ b/configure @@ -1,13 +1,13 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for parallel 20100922. +# Generated by GNU Autoconf 2.65 for parallel 20100922. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -318,7 +318,7 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p @@ -358,19 +358,19 @@ else fi # as_fn_arith -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. +# script with status $?, using 1 if that was 0. as_fn_error () { - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi - $as_echo "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error @@ -532,7 +532,7 @@ test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` @@ -688,9 +688,8 @@ do fi case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -735,7 +734,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -761,7 +760,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -965,7 +964,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -981,7 +980,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1011,8 +1010,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) @@ -1020,7 +1019,7 @@ Try \`$0 --help' for more information" # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1038,13 +1037,13 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" + as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1067,7 +1066,7 @@ do [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1081,8 +1080,8 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1097,9 +1096,9 @@ test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" + as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" + as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. @@ -1138,11 +1137,11 @@ else fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1182,7 +1181,7 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages + -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files @@ -1302,9 +1301,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF parallel configure 20100922 -generated by GNU Autoconf 2.67 +generated by GNU Autoconf 2.65 -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1319,7 +1318,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by parallel $as_me 20100922, which was -generated by GNU Autoconf 2.67. Invocation command line was +generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -1429,9 +1428,11 @@ trap 'exit_status=$? { echo - $as_echo "## ---------------- ## + cat <<\_ASBOX +## ---------------- ## ## Cache variables. ## -## ---------------- ##" +## ---------------- ## +_ASBOX echo # The following way of writing the cache mishandles newlines in values, ( @@ -1465,9 +1466,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + cat <<\_ASBOX +## ----------------- ## ## Output variables. ## -## ----------------- ##" +## ----------------- ## +_ASBOX echo for ac_var in $ac_subst_vars do @@ -1480,9 +1483,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + cat <<\_ASBOX +## ------------------- ## ## File substitutions. ## -## ------------------- ##" +## ------------------- ## +_ASBOX echo for ac_var in $ac_subst_files do @@ -1496,9 +1501,11 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; fi if test -s confdefs.h; then - $as_echo "## ----------- ## + cat <<\_ASBOX +## ----------- ## ## confdefs.h. ## -## ----------- ##" +## ----------- ## +_ASBOX echo cat confdefs.h echo @@ -1553,12 +1560,7 @@ _ACEOF ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site @@ -1573,11 +1575,7 @@ do { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } + . "$ac_site_file" fi done @@ -1653,7 +1651,7 @@ if $ac_cache_corrupted; then $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -1670,22 +1668,16 @@ am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -1801,11 +1793,11 @@ am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's @@ -1827,7 +1819,7 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + as_fn_error "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi @@ -1837,7 +1829,7 @@ then # Ok. : else - as_fn_error $? "newly created file is older than distributed files! + as_fn_error "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -2075,7 +2067,7 @@ done $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -2083,7 +2075,7 @@ SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; @@ -2117,7 +2109,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2260,7 +2252,6 @@ DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= -U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' @@ -2423,19 +2414,19 @@ export LANGUAGE (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. +# script with status $?, using 1 if that was 0. as_fn_error () { - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi - $as_echo "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error @@ -2631,7 +2622,7 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p @@ -2685,7 +2676,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by parallel $as_me 20100922, which was -generated by GNU Autoconf 2.67. Invocation command line was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2747,10 +2738,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ parallel config.status 20100922 -configured by $0, generated by GNU Autoconf 2.67, +configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -2768,16 +2759,11 @@ ac_need_defaults=: while test $# != 0 do case $1 in - --*=?*) + --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; *) ac_option=$1 ac_optarg=$2 @@ -2799,7 +2785,6 @@ do $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; @@ -2812,7 +2797,7 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' + as_fn_error "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; @@ -2821,7 +2806,7 @@ Try \`$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' + -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" @@ -2874,7 +2859,7 @@ do "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -2911,7 +2896,7 @@ $debug || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. @@ -2928,7 +2913,7 @@ if test "x$ac_cr" = x; then fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' + ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi @@ -2942,18 +2927,18 @@ _ACEOF echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi @@ -3042,28 +3027,20 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 + || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// s/^[^=]*=[ ]*$// }' fi @@ -3091,7 +3068,7 @@ for ac_last_try in false false :; do if test -z "$ac_t"; then break elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi @@ -3176,7 +3153,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" @@ -3189,7 +3166,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -3217,7 +3194,7 @@ do [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" @@ -3244,7 +3221,7 @@ $as_echo "$as_me: creating $ac_file" >&6;} case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -3381,22 +3358,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 +which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} +which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # @@ -3407,19 +3384,19 @@ which seems to be undefined. Please make sure it is defined" >&2;} $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + || as_fn_error "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 + || as_fn_error "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" @@ -3468,7 +3445,7 @@ _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. @@ -3489,7 +3466,7 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 + $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 diff --git a/doc/FUTURE_IDEAS b/doc/FUTURE_IDEAS index 3d6b0f62..52d6702e 100644 --- a/doc/FUTURE_IDEAS +++ b/doc/FUTURE_IDEAS @@ -289,24 +289,9 @@ distribute the arguments evenly if running -X. =head1 options -One char options not used: A D F G J K O Q R T Z +One char options not used: A F G K O Q R T Z - -=head2 mutex - -mutex -b -n -l lockid -m max_locks [command] -mutex -u lockid - --b run command in background --l lockfile will lock using the lockid --n nonblocking --m maximal number of locks (default 1) --u unlock - -If command given works like: mutex -l lockfile -n number_of_locks ; command; mutex -u lockfile -If -b given works like: mutex -l lockfile -n number_of_locks ; (command; mutex -u lockfile)& - -Kan vi finde på lockid som giver mening? +=head1 sem Parallelize so this can be done: mdm.screen find dir -execdir mdm-run cmd {} \; @@ -315,15 +300,6 @@ find dir -execdir par$ --communication-file /tmp/comfile cmd {} \; find dir -execdir mutex -j4 -b cmd {} \; -=head2 Comfile - -This will put a lock on /tmp/comfile. The number of locks is the number of running commands. -If the number is smaller than -j then it will start a process in the background ( cmd & ), -otherwise wait. - -par$ --wait /tmp/comfile will wait until no more locks on the file - - =head1 Unlikely diff --git a/src/parallel b/src/parallel index adb6faf7..729cad29 100755 --- a/src/parallel +++ b/src/parallel @@ -559,6 +559,19 @@ from the terminal. Only run the command line if the response starts with 'y' or 'Y'. Implies B<-t>. +=item B<--profile> I + +=item B<-J> I + +Use profile I for options. This is useful if you want to +have multiple profiles. You could have one profile for running jobs in +parallel on the local machine and a different profile for running jobs +on remote machines. See the section PROFILE FILES for examples. + +I corresponds to the file ~/.parallel/I. + +Default: config + =item B<--quote> =item B<-q> @@ -1564,10 +1577,8 @@ B =item $PARALLEL The environment variable $PARALLEL will be used as default options for -GNU B. However, because some options take arguments the -options need to be split into groups in which only the last option -takes an argument. Each group of options should be put on a line of its -own. +GNU B. If the variable contains special shell characters +(e.g. $, *, or space) then these need to be to be escaped with \. B @@ -1581,16 +1592,14 @@ B can be written as: -B - -Notice the newline in the middle is needed because both B<-S> and -B<-j> take an argument and thus both need to be at the end of a group. +Notice the \ in the middle is needed because 'myssh' and 'user@server' +must be one argument. =back -=head1 CONFIG FILE +=head1 DEFAULT PROFILE (CONFIG FILE) The file ~/.parallel/config (formerly known as .parallelrc) will be read if it exists. Lines starting with '#' will be ignored. It can be @@ -1601,15 +1610,30 @@ Options on the command line takes precedence over the environment variable $PARALLEL which takes precedence over the file ~/.parallel/config. +=head1 PROFILE FILES -The file ~/.parallel/config will be read if it exists. It should be -formatted like the environment variable $PARALLEL. Lines starting with -'#' will be ignored. - -Options on the command line takes precedence over the environment -variable $PARALLEL which takes precedence over the file +If B<--profile> set, GNU B will read the profile from that file instead of ~/.parallel/config. +Example: Profile for running every command with B<-j+0> and B + + echo -j+0 nice > ~/.parallel/nice_profile + parallel -J nice_profile bzip2 -9 ::: * + +Example: Profile for running a perl script before every command: + + echo "perl -e '\$a=\$\$; print \$a,\" \",'\$PARALLEL_SEQ',\" \";';" > ~/.parallel/pre_perl + parallel -J pre_perl echo ::: * + +Note how the $ and " need to be quoted using \. + +Example: Profile for running distributed jobs with B on the +remote machines: + + echo -S .. nice > ~/.parallel/dist + parallel -J dist --trc {.}.bz2 bzip2 -9 ::: * + + =head1 EXIT STATUS If B<--halt-on-error> 0 or not specified: @@ -2381,9 +2405,9 @@ B(1), B(1), B(1), B(1) use IPC::Open3; use Symbol qw(gensym); use IO::File; -use POSIX qw/:sys_wait_h setsid/; -use File::Temp qw/tempfile tempdir/; -use Getopt::Long; +use POSIX qw(:sys_wait_h setsid); +use File::Temp qw(tempfile tempdir); +use Getopt::Long qw(GetOptionsFromArray); use strict; do_not_reap(); @@ -2432,6 +2456,84 @@ sub acquire_semaphore { return $sem; } +sub get_options_from_array { + # Run GetOptionsFromArray on @array + # Returns: + # true if parsing worked + # false if parsing failed + # @array is changed + my $array_ref = shift; + return GetOptionsFromArray + ($array_ref, + "debug|D" => \$::opt_D, + "xargs|m" => \$::opt_m, + "X" => \$::opt_X, + "v" => \@::opt_v, + "silent" => \$::opt_silent, + "keep-order|keeporder|k" => \$::opt_k, + "group|g" => \$::opt_g, + "ungroup|u" => \$::opt_u, + "command|c" => \$::opt_c, + "file|f" => \$::opt_f, + "null|0" => \$::opt_0, + "quote|q" => \$::opt_q, + "I=s" => \$::opt_I, + "extensionreplace|U=s" => \$::opt_U, + "jobs|j=s" => \$::opt_P, + "max-line-length-allowed" => \$::opt_max_line_length_allowed, + "number-of-cpus" => \$::opt_number_of_cpus, + "number-of-cores" => \$::opt_number_of_cores, + "use-cpus-instead-of-cores" => \$::opt_use_cpus_instead_of_cores, + "sshlogin|S=s" => \@::opt_sshlogin, + "sshloginfile=s" => \$::opt_sshloginfile, + "controlmaster|M" => \$::opt_controlmaster, + "return=s" => \@::opt_return, + "trc=s" => \@::opt_trc, + "transfer" => \$::opt_transfer, + "cleanup" => \$::opt_cleanup, + "basefile|B=s" => \@::opt_basefile, + "workdir|W=s" => \$::opt_workdir, + "halt-on-error|H=s" => \$::opt_halt_on_error, + "retries=i" => \$::opt_retries, + "progress" => \$::opt_progress, + "eta" => \$::opt_eta, + "arg-sep|argsep=s" => \$::opt_arg_sep, + "arg-file-sep|argfilesep=s" => \$::opt_arg_file_sep, + "trim=s" => \$::opt_trim, + "profile|J=s" => \$::opt_profile, + # xargs-compatibility - implemented, man, unittest + "max-procs|P=s" => \$::opt_P, + "delimiter|d=s" => \$::opt_d, + "max-chars|s=i" => \$::opt_s, + "arg-file|a=s" => \@::opt_a, + "no-run-if-empty|r" => \$::opt_r, + "replace|i:s" => \$::opt_i, + "E=s" => \$::opt_E, + "eof|e:s" => \$::opt_E, + "max-args|n=i" => \$::opt_n, + "max-replace-args|N=i" => \$::opt_N, + "colsep|col-sep|C=s" => \$::opt_colsep, + "help|h" => \$::opt_help, + "L=i" => \$::opt_L, + "max-lines|l:i" => \$::opt_l, + "interactive|p" => \$::opt_p, + "verbose|t" => \$::opt_verbose, + "version|V" => \$::opt_version, + "show-limits" => \$::opt_show_limits, + "exit|x" => \$::opt_x, + # Semaphore + "semaphore" => \$::opt_semaphore, + "semaphoretimeout=i" => \$::opt_semaphoretimeout, + "semaphorename|id=s" => \$::opt_semaphorename, + "fg" => \$::opt_fg, + "bg" => \$::opt_bg, + "wait" => \$::opt_wait, + # Shebang #!/usr/bin/parallel -Yotheroptions + "Y|shebang|hashbang" => \$::opt_shebang, + "skip-first-line" => \$::opt_skip_first_line, + ); +} + sub parse_options { # Returns: N/A # Defaults: @@ -2457,101 +2559,8 @@ sub parse_options { $Global::arg_file_sep = "::::"; $Global::trim = 'n'; - # This must be done first as this may exec myself - if(defined $ARGV[0] and ($ARGV[0]=~/^-Y/ or $ARGV[0]=~/^--shebang / or - $ARGV[0]=~/^--hashbang /)) { - # Program is called from #! line in script - $ARGV[0]=~s/^-Y //; # remove -Y if on its own - $ARGV[0]=~s/^-Y/-/; # remove -Y if bundled with other options - $ARGV[0]=~s/^--shebang //; # remove --shebang if it is set - $ARGV[0]=~s/^--hashbang //; # remove --hashbang if it is set - my $argfile = pop @ARGV; - # exec myself to split @ARGV into separate fields - exec "$0 --skip-first-line -a $argfile @ARGV"; - } + @ARGV=read_options(); - # Add options from .parallel/config - for my $parallel_config ($ENV{'HOME'}."/.parallel/config", - $ENV{'HOME'}."/.parallelrc") { - if(-r $parallel_config) { - open (IN, "<", $parallel_config) || die; - while() { - /^\s*\#/ and next; - chomp; - unshift @ARGV, $_; - } - close IN; - } - } - # Add options from shell variable $PARALLEL - $ENV{'PARALLEL'} and unshift @ARGV, split/\n/, $ENV{'PARALLEL'}; - Getopt::Long::Configure ("bundling","require_order"); - GetOptions("debug|D" => \$::opt_D, - "xargs|m" => \$::opt_m, - "X" => \$::opt_X, - "v" => \@::opt_v, - "silent" => \$::opt_silent, - "keep-order|keeporder|k" => \$::opt_k, - "group|g" => \$::opt_g, - "ungroup|u" => \$::opt_u, - "command|c" => \$::opt_c, - "file|f" => \$::opt_f, - "null|0" => \$::opt_0, - "quote|q" => \$::opt_q, - "I=s" => \$::opt_I, - "extensionreplace|U=s" => \$::opt_U, - "jobs|j=s" => \$::opt_P, - "max-line-length-allowed" => \$::opt_max_line_length_allowed, - "number-of-cpus" => \$::opt_number_of_cpus, - "number-of-cores" => \$::opt_number_of_cores, - "use-cpus-instead-of-cores" => \$::opt_use_cpus_instead_of_cores, - "sshlogin|S=s" => \@::opt_sshlogin, - "sshloginfile=s" => \$::opt_sshloginfile, - "controlmaster|M" => \$::opt_controlmaster, - "return=s" => \@::opt_return, - "trc=s" => \@::opt_trc, - "transfer" => \$::opt_transfer, - "cleanup" => \$::opt_cleanup, - "basefile|B=s" => \@::opt_basefile, - "workdir|W=s" => \$::opt_workdir, - "halt-on-error|H=s" => \$::opt_halt_on_error, - "retries=i" => \$::opt_retries, - "progress" => \$::opt_progress, - "eta" => \$::opt_eta, - "arg-sep|argsep=s" => \$::opt_arg_sep, - "arg-file-sep|argfilesep=s" => \$::opt_arg_file_sep, - "trim=s" => \$::opt_trim, - # xargs-compatibility - implemented, man, unittest - "max-procs|P=s" => \$::opt_P, - "delimiter|d=s" => \$::opt_d, - "max-chars|s=i" => \$::opt_s, - "arg-file|a=s" => \@::opt_a, - "no-run-if-empty|r" => \$::opt_r, - "replace|i:s" => \$::opt_i, - "E=s" => \$::opt_E, - "eof|e:s" => \$::opt_E, - "max-args|n=i" => \$::opt_n, - "max-replace-args|N=i" => \$::opt_N, - "colsep|col-sep|C=s" => \$::opt_colsep, - "help|h" => \$::opt_help, - "L=i" => \$::opt_L, - "max-lines|l:i" => \$::opt_l, - "interactive|p" => \$::opt_p, - "verbose|t" => \$::opt_verbose, - "version|V" => \$::opt_version, - "show-limits" => \$::opt_show_limits, - "exit|x" => \$::opt_x, - # Semaphore - "semaphore" => \$::opt_semaphore, - "semaphoretimeout=i" => \$::opt_semaphoretimeout, - "semaphorename|id=s" => \$::opt_semaphorename, - "fg" => \$::opt_fg, - "bg" => \$::opt_bg, - "wait" => \$::opt_wait, - # Shebang #!/usr/bin/parallel -Yotheroptions - "Y|shebang|hashbang" => \$::opt_shebang, - "skip-first-line" => \$::opt_skip_first_line, - ) || die_usage(); if(defined @::opt_v) { $Global::verbose = $#::opt_v+1; } # Convert -v -v to v=2 $Global::debug = (defined $::opt_D); if(defined $::opt_m) { $Global::xargs = 1; } @@ -2604,10 +2613,12 @@ sub parse_options { } if(grep /^$Global::arg_sep$/o, @ARGV) { + # Deal with ::: @ARGV=read_args_from_command_line(); } if(grep /^$Global::arg_file_sep$/o, @ARGV) { + # Deal with :::: @ARGV=convert_argfiles_from_command_line_to_multiple_opt_a(); } @@ -2703,6 +2714,67 @@ sub parse_options { } } +sub read_options { + # Read options from command line, profile and $PARALLEL + # Returns: + # @ARGV without --options + # This must be done first as this may exec myself + if(defined $ARGV[0] and ($ARGV[0]=~/^-Y/ or $ARGV[0]=~/^--shebang / or + $ARGV[0]=~/^--hashbang /)) { + # Program is called from #! line in script + $ARGV[0]=~s/^-Y //; # remove -Y if on its own + $ARGV[0]=~s/^-Y/-/; # remove -Y if bundled with other options + $ARGV[0]=~s/^--shebang //; # remove --shebang if it is set + $ARGV[0]=~s/^--hashbang //; # remove --hashbang if it is set + my $argfile = pop @ARGV; + # exec myself to split @ARGV into separate fields + exec "$0 --skip-first-line -a $argfile @ARGV"; + } + + Getopt::Long::Configure ("bundling","require_order"); + # First check if there is a --profile to set $::opt_profile + my @ARGV_copy = @ARGV; + get_options_from_array (\@ARGV_copy) || die_usage(); + # Add options from .parallel/config and other profiles + my @ARGV_profile = (); + my @ARGV_env = (); + + my @config_profiles = ($ENV{'HOME'}."/.parallel/config", + $ENV{'HOME'}."/.parallelrc"); + my @profiles = @config_profiles; + if($::opt_profile) { + # --profile overrides default profiles + @profiles = ($ENV{'HOME'}."/.parallel/".$::opt_profile); + } + for my $profile (@profiles) { + if(-r $profile) { + open (IN, "<", $profile) || die; + while() { + /^\s*\#/ and next; + chomp; + push @ARGV_profile, shell_unquote(split/(?/tmp/parallel_profile +-k --jobs 1 perl -pe '\$a=1; print \$a' +EOF +parallel -v -J /tmp/parallel_profile ::: <(echo a) <(echo b) + +PARALLEL='-k --jobs 1 echo' parallel -S ssh\ newton\ ssh\ maxwell -v ::: /etc/passwd +PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a"' parallel -S ssh\ newton\ ssh\ maxwell -vv ::: /etc/passwd + +echo '### Test quoting of $ in command from profile file' +cat </tmp/parallel_profile +-k --jobs 1 perl -pe '\\\$a=1; print \\\$a' +EOF +parallel -v -J /tmp/parallel_profile -S ssh\ newton\ ssh\ maxwell ::: /etc/passwd + +echo '### Test quoting of $ in command from $PARALLEL' +PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a" ' parallel -S ssh\ newton\ ssh\ maxwell -v ::: /etc/passwd + +echo '### Test quoting of space in arguments (-S) from profile file' +cat </tmp/parallel_profile +-k --jobs 1 -S ssh\ newton\ ssh\ maxwell perl -pe '\$a=1; print \$a' +EOF +parallel -v -J /tmp/parallel_profile ::: /etc/passwd + +echo '### Test quoting of space in arguments (-S) from $PARALLEL' +PARALLEL='-k --jobs 1 -S ssh\ newton\ ssh\ maxwell perl -pe "\\$a=1; print \\$a" ' parallel -v ::: /etc/passwd + +echo '### Test quoting of space in long arguments (--sshlogin) from profile file' +cat </tmp/parallel_profile +-k --jobs 1 --sshlogin ssh\ newton\ ssh\ maxwell perl -pe '\$a=1; print \$a' +EOF +parallel -v -J /tmp/parallel_profile ::: /etc/passwd + +echo '### Test quoting of space in arguments (-S) from $PARALLEL' +PARALLEL='-k --jobs 1 --sshlogin ssh\ newton\ ssh\ maxwell perl -pe "\\$a=1; print \\$a" ' parallel -v ::: /etc/passwd