diff --git a/NEWS b/NEWS index 8d65fee6..6e849272 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,70 @@ +20101113 + +* Using -j myfile the number of jobs can be changed while GNU Parallel + is running simply by changing the content of myfile. + +* Implemented --profile to use different .parallel/config for + different situations. + +* Ugly newlines in $PARALLEL and .parallel/config are no longer + needed. Instead you have to use \ in front of special shell + characters. + +* --workdir puts the files transferred to remote machines in a + specified directory. + +* $PARALLEL_PID is set to the process id of GNU Parallel. + +* $PARALLEL_SEQ is set to the sequence number of the job. + +* -v now only shows the command to run. Use -v -v to show the + ssh/rsync wrapping. + +* Slow spawning error is now only a warning. + +* If stdin is a tty and input is read from stdin you now get a + warning. + +* GNU sql: \n and \x0a in arguments is replaced with newline. + +* Patch for Debian package and spelling mistakes. Thanks to Rogério + Brito + +* Mac OS X Homebrew package. Thanks to Jonathan Palardy + +* FreeBSD port. Thanks to Chris Howey + +* Pardus package. Thanks to Fethican Coşkuner + + +* First review in Chinese. Thanks to 曾義峰: + http://antbsd.twbbs.org/~ant/wordpress/?p=2876 + +* First review in print: + http://www.linux-magazine.com/Issues/2010 Nov 2010 + +* First review in Spanish: + http://www.muylinux.com/2010/10/18/gnu-parallel-computacion-paralela-a-golpe-de-comando + +* First review in Dutch thanks to Koen Vervloesem : + http://techworld.nl/technologie/33493/gebruik-al-je-processorkernen-met-gnu-parallel.html + +* Blog review thanks to R. Tyler Croy : + http://unethicalblogger.com/posts/2010/11/gnuparallel_changed_my_life + +* 5000 views of the intro video: + http://www.youtube.com/watch?v=OpaiGYxkSuQ + +* As usual a bunch of bugfixes and more usage examples in the man + page. + +* GNU Parallel was presented at FSCONS 2010-11-07: + http://www.fscons.org/fs/gnu-parallel Hopefully the + video will be online soon. + + 20100922 * See GNU Parallel live at FSCONS 2010-11-07: diff --git a/aclocal.m4 b/aclocal.m4 index af39c71a..fa01d2d9 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.65],, -[m4_warning([this file was generated for autoconf 2.65. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, +[m4_warning([this file was generated for autoconf 2.67. 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 08249972..43fdaf24 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.65 for parallel 20100922. +# Generated by GNU Autoconf 2.67 for parallel 20101113. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 ERROR [LINENO LOG_FD] -# --------------------------------- +# as_fn_error STATUS 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=$?; 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 + 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 fi - $as_echo "$as_me: error: $1" >&2 + $as_echo "$as_me: error: $2" >&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, Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` @@ -551,8 +551,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='parallel' PACKAGE_TARNAME='parallel' -PACKAGE_VERSION='20100922' -PACKAGE_STRING='parallel 20100922' +PACKAGE_VERSION='20101113' +PACKAGE_STRING='parallel 20101113' PACKAGE_BUGREPORT='bug-parallel@gnu.org' PACKAGE_URL='' @@ -688,8 +688,9 @@ do fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -734,7 +735,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 @@ -760,7 +761,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 @@ -964,7 +965,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 @@ -980,7 +981,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 @@ -1010,8 +1011,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" ;; *=*) @@ -1019,7 +1020,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 ;; @@ -1037,13 +1038,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 @@ -1066,7 +1067,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' @@ -1080,8 +1081,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 @@ -1096,9 +1097,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. @@ -1137,11 +1138,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 @@ -1167,7 +1168,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures parallel 20100922 to adapt to many kinds of systems. +\`configure' configures parallel 20101113 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1181,7 +1182,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 @@ -1233,7 +1234,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of parallel 20100922:";; + short | recursive ) echo "Configuration of parallel 20101113:";; esac cat <<\_ACEOF @@ -1300,10 +1301,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -parallel configure 20100922 -generated by GNU Autoconf 2.65 +parallel configure 20101113 +generated by GNU Autoconf 2.67 -Copyright (C) 2009 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1317,8 +1318,8 @@ cat >config.log <<_ACEOF 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.65. Invocation command line was +It was created by parallel $as_me 20101113, which was +generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -1428,11 +1429,9 @@ trap 'exit_status=$? { echo - cat <<\_ASBOX -## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## -## ---------------- ## -_ASBOX +## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( @@ -1466,11 +1465,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - cat <<\_ASBOX -## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## -## ----------------- ## -_ASBOX +## ----------------- ##" echo for ac_var in $ac_subst_vars do @@ -1483,11 +1480,9 @@ _ASBOX echo if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## -## ------------------- ## -_ASBOX +## ------------------- ##" echo for ac_var in $ac_subst_files do @@ -1501,11 +1496,9 @@ _ASBOX fi if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## -## ----------- ## -_ASBOX +## ----------- ##" echo cat confdefs.h echo @@ -1560,7 +1553,12 @@ _ACEOF ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE + # 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 elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site @@ -1575,7 +1573,11 @@ 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" + . "$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 ; } fi done @@ -1651,7 +1653,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. ## @@ -1668,16 +1670,22 @@ am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - 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 + 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 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, @@ -1793,11 +1801,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 @@ -1819,7 +1827,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 @@ -1829,7 +1837,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 @@ -2067,7 +2075,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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -2075,7 +2083,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;; @@ -2109,7 +2117,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 @@ -2125,7 +2133,7 @@ fi # Define the identity of the package. PACKAGE='parallel' - VERSION='20100922' + VERSION='20101113' cat >>confdefs.h <<_ACEOF @@ -2252,6 +2260,7 @@ 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$//' @@ -2414,19 +2423,19 @@ export LANGUAGE (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- +# as_fn_error STATUS 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=$?; 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 + 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 fi - $as_echo "$as_me: error: $1" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -2622,7 +2631,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 @@ -2675,8 +2684,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by parallel $as_me 20100922, which was -generated by GNU Autoconf 2.65. Invocation command line was +This file was extended by parallel $as_me 20101113, which was +generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2737,11 +2746,11 @@ _ACEOF 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.65, +parallel config.status 20101113 +configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" -Copyright (C) 2009 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -2759,11 +2768,16 @@ 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 @@ -2785,6 +2799,7 @@ 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;; @@ -2797,7 +2812,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 ;; @@ -2806,7 +2821,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" @@ -2859,7 +2874,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 @@ -2896,7 +2911,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. @@ -2913,7 +2928,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 @@ -2927,18 +2942,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 @@ -3027,20 +3042,28 @@ 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 $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries 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[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// s/^[^=]*=[ ]*$// }' fi @@ -3068,7 +3091,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 @@ -3153,7 +3176,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" @@ -3166,7 +3189,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 @@ -3194,7 +3217,7 @@ do [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "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'" @@ -3221,7 +3244,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 @@ -3358,22 +3381,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) # @@ -3384,19 +3407,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" @@ -3445,7 +3468,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. @@ -3466,7 +3489,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 $? + $ac_cs_success || as_fn_exit 1 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/configure.ac b/configure.ac index e28b5fc0..0da77b64 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([parallel], [20100922], [bug-parallel@gnu.org]) +AC_INIT([parallel], [20101113], [bug-parallel@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ diff --git a/doc/release_new_version b/doc/release_new_version index b4bf64ee..6c350c5d 100644 --- a/doc/release_new_version +++ b/doc/release_new_version @@ -24,9 +24,9 @@ autoreconf --install -W gnu ./configure make && sudo make install -== Unittest == +== Testsuite == -cd unittest; make unittest +cd testsuite; make == Update NEWS == @@ -119,7 +119,7 @@ cc:Peter Simons , Sandro Cazzaniga , Andrew McFague , Steven M. Christensen , Chris Howey , Fethican Coşkuner , Rogério Brito , Jonathan Palardy , - Koen Vervloesem , + Koen Vervloesem , R. Tyler Croy Subject: GNU Parallel 2010XXXX released @@ -131,6 +131,23 @@ New in this release: * Using -j myfile the number of jobs can be changed while GNU Parallel is running simply by changing the content of myfile. +* Implemented --profile to use different .parallel/config for + different situations. + +* Ugly newlines in $PARALLEL and .parallel/config are no longer + needed. Instead you have to use \ in front of special shell + characters. + +* --workdir puts the files transferred to remote machines in a + specified directory. + +* $PARALLEL_PID is set to the process id of GNU Parallel. + +* $PARALLEL_SEQ is set to the sequence number of the job. + +* -v now only shows the command to run. Use -v -v to show the + ssh/rsync wrapping. + * Slow spawning error is now only a warning. * If stdin is a tty and input is read from stdin you now get a @@ -162,16 +179,18 @@ New in this release: dot eu>: http://techworld.nl/technologie/33493/gebruik-al-je-processorkernen-met-gnu-parallel.html -* 3500 views of the intro video: +* Blog review thanks to R. Tyler Croy : + http://unethicalblogger.com/posts/2010/11/gnuparallel_changed_my_life + +* 5000 views of the intro video: http://www.youtube.com/watch?v=OpaiGYxkSuQ * As usual a bunch of bugfixes and more usage examples in the man page. -Old in this release: - -* See GNU Parallel live at FSCONS 2010-11-07: - http://www.fscons.org/fs/gnu-parallel +* GNU Parallel was presented at FSCONS 2010-11-07: + http://www.fscons.org/fs/gnu-parallel Hopefully the + video will be online soon. = About GNU Parallel = diff --git a/src/parallel b/src/parallel index 80c3b84b..1add1ac9 100755 --- a/src/parallel +++ b/src/parallel @@ -858,6 +858,8 @@ not need this option. Verbose. Print the job to be run on STDOUT. Can be reversed with B<--silent>. See also B<-t>. +Use B<-v> B<-v> to print the wrapping ssh command when running remotely. + =item B<--version> @@ -1091,7 +1093,7 @@ B Based on this we can let GNU B generate 10 Bs per day: I B<| parallel -I {o} seq -w 1 10 "|" parallel wget -http://www.website.com/path/to/{o}_{}.jpg> +http://www.example.com/path/to/{o}_{}.jpg> =head1 EXAMPLE: Rewriting a for-loop and a while-loop @@ -1124,7 +1126,7 @@ B If the processing requires more steps the for-loop like this: (for x in `cat list` ; do - no_extension=${x%.png}; + no_extension=${x%.*}; do_something $x scale $no_extension.jpg do_step2 <$x $no_extension done) | process_output @@ -1132,7 +1134,7 @@ If the processing requires more steps the for-loop like this: and while-loops like this: cat list | (while read x ; do - no_extension=${x%.png}; + no_extension=${x%.*}; do_something $x scale $no_extension.jpg do_step2 <$x $no_extension done) | process_output @@ -2547,7 +2549,7 @@ sub get_options_from_array { sub parse_options { # Returns: N/A # Defaults: - $Global::version = 201011002; + $Global::version = 201011133; $Global::progname = 'parallel'; $Global::debug = 0; $Global::verbose = 0; @@ -2730,27 +2732,25 @@ sub read_options { # @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 /)) { + $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 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 + $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 myself to split $ARGV[0] 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(); + Getopt::Long::Configure("bundling","pass_through"); + # Check if there is a --profile to set $::opt_profile + GetOptions("profile|J=s" => \$::opt_profile) || 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"); + $ENV{'HOME'}."/.parallelrc"); my @profiles = @config_profiles; if($::opt_profile) { # --profile overrides default profiles @@ -2774,6 +2774,7 @@ sub read_options { } } } + Getopt::Long::Configure("bundling","require_order"); get_options_from_array(\@ARGV_profile) || die_usage(); # Add options from shell variable $PARALLEL $ENV{'PARALLEL'} and @ARGV_env = shell_unquote(split/(? 0) { - debug("jobs running: $Global::total_running Memory usage:".my_memory_usage()."\n"); + debug("jobs running: ",$Global::total_running," Memory usage:".my_memory_usage()."\n"); sleep 1; reaper(); # Some systems fail to catch the SIGCHLD if($::opt_progress) { @@ -4949,7 +4950,7 @@ sub my_memory_usage { my @procinfo = split(/\s+/,$data); - return $procinfo[22]; + return undef_as_zero($procinfo[22]); } else { return 0; } diff --git a/src/sql b/src/sql index 88d7b0ca..08f33ddc 100755 --- a/src/sql +++ b/src/sql @@ -528,7 +528,7 @@ $Global::Initfile && unlink $Global::Initfile; exit ($err); sub parse_options { - $Global::version = 20100922; + $Global::version = 20101113; $Global::progname = 'sql'; # This must be done first as this may exec myself diff --git a/testsuite/tests-to-run/test15.sh b/testsuite/tests-to-run/test15.sh index 372a9d13..35cc10e3 100755 --- a/testsuite/tests-to-run/test15.sh +++ b/testsuite/tests-to-run/test15.sh @@ -156,6 +156,13 @@ echo line 1Nline 2Nline 3 | parallel -k --delimiter N echo This is printf "delimiter NUL line 1\0line 2\0line 3" | parallel -k -d '\0' echo printf "delimiter TAB line 1\tline 2\tline 3" | parallel -k --delimiter '\t' echo +echo '### Hans found a bug giving unitialized variable' +echo >/tmp/parallel_f1 +echo >/tmp/parallel_f2' +' +echo /tmp/parallel_f1 /tmp/parallel_f2 | stdout parallel -kv --delimiter ' ' gzip +rm /tmp/parallel_f* + echo '### Test --max-chars and -s: Max number of chars in a line' (echo line 1;echo line 1;echo line 2) | parallel -k --max-chars 25 -X echo (echo line 1;echo line 1;echo line 2) | parallel -k -s 25 -X echo diff --git a/testsuite/tests-to-run/test21.sh b/testsuite/tests-to-run/test21.sh index b73866c8..1c914a72 100644 --- a/testsuite/tests-to-run/test21.sh +++ b/testsuite/tests-to-run/test21.sh @@ -3,15 +3,22 @@ SERVER1=parallel-server3 SERVER2=parallel-server2 -echo '### Test $PARALLEL' +echo '### Test $PARALLEL - single line' echo | PARALLEL=--number-of-cpus parallel +seq 1 2 | PARALLEL="-S$SERVER1 -Sssh\ -l\ parallel\ $SERVER2 -j1" parallel -kvv echo + +echo '### Test $PARALLEL - multi line' seq 1 2 | PARALLEL="-S$SERVER1 --Sssh -l parallel $SERVER2 +-Sssh\ -l\ parallel\ $SERVER2 -j1" parallel -kvv echo -echo '### Test ~/.parallel/config' +echo '### Test ~/.parallel/config - single line' +echo "-S$SERVER1 -Sssh\ -l\ parallel\ $SERVER2 -j1" > ~/.parallel/config +seq 1 2 | parallel -kvv echo + +echo '### Test ~/.parallel/config - multi line' echo "-S$SERVER1 --Sssh -l parallel $SERVER2 +-Sssh\ -l\ parallel\ $SERVER2 -j1" > ~/.parallel/config seq 1 2 | parallel -kvv echo rm ~/.parallel/config diff --git a/testsuite/tests-to-run/test29.sh b/testsuite/tests-to-run/test29.sh index 3536253b..4bf590c2 100644 --- a/testsuite/tests-to-run/test29.sh +++ b/testsuite/tests-to-run/test29.sh @@ -62,4 +62,4 @@ echo '### Test of --trim n' parallel -k -C %+ echo '"{1}_{3}_{2}_{4}"' ::: 'a% c %%b' 'a%c% b %d' echo '### Test of bug: If input is empty string' -(echo ; echo abcbdbebf;echo abc) | parallel --colsep b -v echo {1}{2} +(echo ; echo abcbdbebf;echo abc) | parallel -k --colsep b -v echo {1}{2} diff --git a/testsuite/tests-to-run/test33.sh b/testsuite/tests-to-run/test33.sh index 0c994e58..5dd1b149 100644 --- a/testsuite/tests-to-run/test33.sh +++ b/testsuite/tests-to-run/test33.sh @@ -5,8 +5,8 @@ stdout parallel -j no_such_file echo ::: 1 echo '### Test of -j filename' echo 3 >/tmp/jobs_to_run -parallel -j /tmp/jobs_to_run -v sleep 0.{} ::: 9 8 7 6 5 -# Should give 7 8 9 5 6 +parallel -j /tmp/jobs_to_run -v sleep 0.{} ::: 9 8 7 6 4 +# Should give 7 8 9 4 6 echo '### Test of -j filename with file content changing' (echo 1 >/tmp/jobs_to_run; sleep 3; echo 10 >/tmp/jobs_to_run) & diff --git a/testsuite/tests-to-run/test36.sh b/testsuite/tests-to-run/test36.sh index e4e36ef6..e20dbff3 100644 --- a/testsuite/tests-to-run/test36.sh +++ b/testsuite/tests-to-run/test36.sh @@ -10,7 +10,7 @@ echo '### Test $PARALLEL_SEQ - remote' seq 1 20 | parallel -kN2 -S $SERVER1,parallel@$SERVER2 echo arg1:{1} seq:'$'PARALLEL_SEQ arg2:{2} echo '### Test $PARALLEL_PID - local' -seq 1 20 | parallel -kN2 echo arg1:{1} seq:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d/0/g' +seq 1 20 | parallel -kN2 echo arg1:{1} pid:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d{3,}/0/g' echo '### Test $PARALLEL_PID - remote' -seq 1 20 | parallel -kN2 -S $SERVER1,parallel@$SERVER2 echo arg1:{1} seq:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d/0/g' +seq 1 20 | parallel -kN2 -S $SERVER1,parallel@$SERVER2 echo arg1:{1} pid:'$'PARALLEL_PID arg2:{2} | perl -pe 's/\d{3,}/0/g' diff --git a/testsuite/tests-to-run/test37.sh b/testsuite/tests-to-run/test37.sh index 7deab73e..bb0d64ab 100644 --- a/testsuite/tests-to-run/test37.sh +++ b/testsuite/tests-to-run/test37.sh @@ -1,5 +1,8 @@ #!/bin/bash +SERVER1=parallel-server3 +SERVER2=parallel-server2 + echo '### Test $PARALLEL' PARALLEL="-k -j1 @@ -24,40 +27,40 @@ PARALLEL="-k --jobs 1 echo 1" parallel -v echo 2 ::: a b c echo '### Test ugly quoting from $PARALLEL' PARALLEL="-k --jobs 1 perl -pe '\$a=1; print\$a'" parallel -v ::: <(echo a) <(echo b) -PARALLEL='-k --jobs 1 -S newton perl -pe "\\$a=1; print\\$a"' parallel -v ::: /etc/passwd +PARALLEL='-k --jobs 1 -S '$SERVER1' perl -pe "\\$a=1; print\\$a"' parallel -v ::: /bin/gunzip echo '### Test ugly quoting from profile file' -cat </tmp/parallel_profile +cat <~/.parallel/test_profile -k --jobs 1 perl -pe '\$a=1; print \$a' EOF -parallel -v -J /tmp/parallel_profile ::: <(echo a) <(echo b) +parallel -v -J test_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 +PARALLEL='-k --jobs 1 echo' parallel -S ssh\ $SERVER1\ ssh\ parallel@$SERVER2 -v ::: /bin/gunzip +PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a"' parallel -S ssh\ $SERVER1\ ssh\ parallel@$SERVER2 -vv ::: /bin/gunzip echo '### Test quoting of $ in command from profile file' -cat </tmp/parallel_profile +cat <~/.parallel/test_profile -k --jobs 1 perl -pe '\\\$a=1; print \\\$a' EOF -parallel -v -J /tmp/parallel_profile -S ssh\ newton\ ssh\ maxwell ::: /etc/passwd +parallel -v -J test_profile -S ssh\ $SERVER1\ ssh\ parallel@$SERVER2 ::: /bin/gunzip 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 +PARALLEL='-k --jobs 1 perl -pe "\\$a=1; print \\$a" ' parallel -S ssh\ $SERVER1\ ssh\ parallel@$SERVER2 -v ::: /bin/gunzip 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' +cat <~/.parallel/test_profile +-k --jobs 1 -S ssh\ $SERVER1\ ssh\ parallel@$SERVER2 perl -pe '\$a=1; print \$a' EOF -parallel -v -J /tmp/parallel_profile ::: /etc/passwd +parallel -v -J test_profile ::: /bin/gunzip 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 +PARALLEL='-k --jobs 1 -S ssh\ '$SERVER1'\ ssh\ parallel@'$SERVER2' perl -pe "\\$a=1; print \\$a" ' parallel -v ::: /bin/gunzip 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' +cat <~/.parallel/test_profile +-k --jobs 1 --sshlogin ssh\ $SERVER1\ ssh\ parallel@$SERVER2 perl -pe '\$a=1; print \$a' EOF -parallel -v -J /tmp/parallel_profile ::: /etc/passwd +parallel -v -J test_profile ::: /bin/gunzip 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 +PARALLEL='-k --jobs 1 --sshlogin ssh\ '$SERVER1'\ ssh\ parallel@'$SERVER2' perl -pe "\\$a=1; print \\$a" ' parallel -v ::: /bin/gunzip diff --git a/testsuite/wanted-results/test15 b/testsuite/wanted-results/test15 index 319324f3..1df0a237 100644 --- a/testsuite/wanted-results/test15 +++ b/testsuite/wanted-results/test15 @@ -266,6 +266,10 @@ line 3 delimiter TAB line 1 line 2 line 3 +### Hans found a bug giving unitialized variable +gzip /tmp/parallel_f1 +gzip /tmp/parallel_f2' +' ### Test --max-chars and -s: Max number of chars in a line line 1 line 1 line 2 diff --git a/testsuite/wanted-results/test21 b/testsuite/wanted-results/test21 index e627da8f..1eff743c 100644 --- a/testsuite/wanted-results/test21 +++ b/testsuite/wanted-results/test21 @@ -1,10 +1,20 @@ -### Test $PARALLEL +### Test $PARALLEL - single line 1 ssh -l parallel parallel-server2 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 1; 1 ssh parallel-server3 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 2; 2 -### Test ~/.parallel/config +### Test $PARALLEL - multi line +ssh -l parallel parallel-server2 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 1; +1 +ssh parallel-server3 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 2; +2 +### Test ~/.parallel/config - single line +ssh -l parallel parallel-server2 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 1; +1 +ssh parallel-server3 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 2; +2 +### Test ~/.parallel/config - multi line ssh -l parallel parallel-server2 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 1; 1 ssh parallel-server3 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; echo\ 2; diff --git a/testsuite/wanted-results/test33 b/testsuite/wanted-results/test33 index 329b6638..3e1ad0e4 100644 --- a/testsuite/wanted-results/test33 +++ b/testsuite/wanted-results/test33 @@ -10,7 +10,7 @@ See 'man parallel' for the options sleep 0.7 sleep 0.8 sleep 0.9 -sleep 0.5 +sleep 0.4 sleep 0.6 ### Test of -j filename with file content changing sleep 3.3 diff --git a/testsuite/wanted-results/test36 b/testsuite/wanted-results/test36 index d3acad55..72d345c8 100644 --- a/testsuite/wanted-results/test36 +++ b/testsuite/wanted-results/test36 @@ -21,24 +21,24 @@ arg1:15 seq:8 arg2:16 arg1:17 seq:9 arg2:18 arg1:19 seq:10 arg2:20 ### Test $PARALLEL_PID - local -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 +arg1:1 pid:0 arg2:2 +arg1:3 pid:0 arg2:4 +arg1:5 pid:0 arg2:6 +arg1:7 pid:0 arg2:8 +arg1:9 pid:0 arg2:10 +arg1:11 pid:0 arg2:12 +arg1:13 pid:0 arg2:14 +arg1:15 pid:0 arg2:16 +arg1:17 pid:0 arg2:18 +arg1:19 pid:0 arg2:20 ### Test $PARALLEL_PID - remote -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:0 -arg0:0 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 -arg0:00 seq:00000 arg0:00 +arg1:1 pid:0 arg2:2 +arg1:3 pid:0 arg2:4 +arg1:5 pid:0 arg2:6 +arg1:7 pid:0 arg2:8 +arg1:9 pid:0 arg2:10 +arg1:11 pid:0 arg2:12 +arg1:13 pid:0 arg2:14 +arg1:15 pid:0 arg2:16 +arg1:17 pid:0 arg2:18 +arg1:19 pid:0 arg2:20 diff --git a/testsuite/wanted-results/test37 b/testsuite/wanted-results/test37 new file mode 100644 index 00000000..151162cf --- /dev/null +++ b/testsuite/wanted-results/test37 @@ -0,0 +1,75 @@ +### Test $PARALLEL +a +b +c +a +b +c +a +b +c +echo 1 echo 2 a +1 echo 2 a +echo 1 echo 2 b +1 echo 2 b +echo 1 echo 2 c +1 echo 2 c +a +b +c +echo 1 echo 2 a +1 echo 2 a +echo 1 echo 2 b +1 echo 2 b +echo 1 echo 2 c +1 echo 2 c +### Test ugly quoting from $PARALLEL +perl -pe '$a=1; print$a' /dev/fd/63 +1a +perl -pe '$a=1; print$a' /dev/fd/62 +1b +perl -pe "\$a=1; print\$a" /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test ugly quoting from profile file +perl -pe '$a=1; print $a' /dev/fd/63 +1a +perl -pe '$a=1; print $a' /dev/fd/62 +1b +echo /bin/gunzip +/bin/gunzip +ssh parallel-server3 ssh parallel@parallel-server2 PARALLEL_SEQ=$PARALLEL_SEQ\;export PARALLEL_SEQ\;PARALLEL_PID=$PARALLEL_PID\;export PARALLEL_PID\; perl\ -pe\ \"\\\$a=1\;\ print\ \\\$a\"\ /bin/gunzip; +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test quoting of $ in command from profile file +perl -pe '$a=1; print $a' /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test quoting of $ in command from $PARALLEL +perl -pe "\$a=1; print \$a" /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test quoting of space in arguments (-S) from profile file +perl -pe '$a=1; print $a' /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test quoting of space in arguments (-S) from $PARALLEL +perl -pe "\$a=1; print \$a" /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test quoting of space in long arguments (--sshlogin) from profile file +perl -pe '$a=1; print $a' /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@" +### Test quoting of space in arguments (-S) from $PARALLEL +perl -pe "\$a=1; print \$a" /bin/gunzip +1#!/bin/bash +1PATH=${GZIP_BINDIR-'/bin'}:$PATH +1exec gzip -d "$@"