From: Ethan Mallove (ethan.mallove_at_[hidden])
Date: 2006-11-03 12:08:33


On Fri, Nov/03/2006 09:54:06AM, Jeff Squyres wrote:
> On Nov 3, 2006, at 9:46 AM, Ethan Mallove wrote:
>
> >> So just to confirm -- this works:
> >>
> >> command = ./configure --with-mpi-dir=&test_prefix(); gmake
> >>
> >> Right?
> >
> > Right. I still like doing trim_quotes before returning, so
> > that we're more forgiving in allowing ''both'' of these:
> >
> > shell_build_command = configure --with-mpi-dir=&test_prefix(); gmake
> > shell_build_command = "configure --with-mpi-dir=&test_prefix(); gmake"
>
> But what if there are cases where I *do* want quotes?
>
> I'm more in favor of being as literal as possible. What
> you type for the shell_build_command will be directly
> launched. This provides greater flexiblity for if you
> *do* need quotes. For example:
>
> shell_build_command = ./configure "CFLAGS=-g -O"
>
> In this case you definitely do not want to remove the quotes.
>
> More specifically, proper quoting handling is a really,
> really tricky task and I don't really want to tackle it.
> :-)
>

Ah, sorry I was unclear. trim_quotes (not strip_quotes) will
remove only leading and trailing quotes. But right, it would
wreck something like this:

  shell_build_command = ./configure &my_cflags()

If you wanted the above to expand to:

  shell_build_command = ./configure "CFLAGS=-g -O"

My last proposal would be this:

---
Index: lib/MTT/DoCommand.pm
===================================================================
--- lib/MTT/DoCommand.pm	(revision 411)
+++ lib/MTT/DoCommand.pm	(working copy)
@@ -194,6 +194,11 @@
             select STDOUT;
             $| = 1;
 
+            # Remove leading/trailing quotes, which
+            # protects against a common funclet syntax error
+            @$tokens[0] =~ s/^\"+//;
+            @$tokens[(@$tokens - 1)] =~ s/\"+$//;
+
             # Run it!
 
             exec(@$tokens) ||
@@ -323,6 +328,11 @@
         $max_stdout_lines, $max_stderr_lines) = @_;
 
     my ($fh, $filename) = tempfile();
+
+    # Remove leading/trailing quotes, which
+    # protects against a common funclet syntax error
+    $cmds =~ s/^\"+|\"+$//g;
+
     print $fh ":\n$cmds\n";
     close($fh);
     chmod(0700, $filename);
 ----
Point taken about being literal. My thinking is that most
will be only guessing about the quoting mechanism of
funclets (as I was for a bit), and there would never be a
real case for sending '"cmd"' to exec().
-Ethan
> -- 
> Jeff Squyres
> Server Virtualization Business Unit
> Cisco Systems
> 
> _______________________________________________
> mtt-users mailing list
> mtt-users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users