ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Parks" <davidpark...@yahoo.com>
Subject Ant 1.8.3alpha: <exec> task fails to handle quotes within quotes command lines
Date Tue, 28 Jun 2011 03:34:32 GMT
I'm trying to run a command with both single and double quotes through <exec
...>. I am using last nights build of ant 1.8.3alpha (I should note the same
behavior on 1.8.2). But the arguments appear to be incorrectly passed to the
command line, as per the following demonstration.

This command runs from a DOS command line perfectly:

c:\cygwin\bin\bash.exe -c 'read var;expect -d -c "spawn rsync -aOvz
--chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r -e ssh .
davidparks21@192.168.1.15:/tmp/website" -c "expect password:" -c "send
${var}\r" -c "expect" -c "wait"'

The purpose of the above command is to use rsync over ssh, read the password
off STDIN and use it to script the interactive password requirement of ssh
when used under rsync - without the need for insecure key files or leaking
the password on the command line.

Last night I built ANT 1.8.3 off SVN and created the following similar
solution to resounding success using the <sshexec ...> task (again, no
insecure key file, leaked passwords on the command line, or external file
dependencies):

<input message="Enter username for ${website.host}:"
addproperty="host.username" />
<input message="Enter password for ${website.host}:"
addproperty="host.password" />
<sshexec host="${website.host}" trust="true"
         username="${host.username}" password="${host.password}"
         inputstring="${host.password}"
         command='read var; expect -c "spawn sudo chmod u+x
/usr/local/website/bin/start_website" -c "expect ${host.username}:" -c "send
${var}\r" -c "wait"' />


Below I show the ANT task in question (and a couple of debug echo
statements) with the output.

I've tried every form of quoting I can think of, and it won't run from ANT.
Here's my best shot.

Description of the ANT Tasks:
 - The first echo outputs the arg line so it can easily be seen in output
that quotes are resolved properly
 - the exec calls bash and passes it 2 arguments (-c) and
(the_read+expect_commands), the same as is being done in the command line
shown above that works in DOS
 - The output shows nothing from the <exec> command, but ${debug.exec} shows
that something went terribly wrong with the passed arguments. It appears to
have split them even though <arg value=.../> was being used.

I've tried quoting or not quoting the second argument, escaping quotes,
using the deprecated commandline option, and a host of other things related
to the way quotes are presented. All result in the same or worse scenario.

===============
ANT Task
===============
<property name="qq" value='"' />

<echo message='read var;expect -d -c "spawn rsync -aOvz
--chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r -e ssh .
davidparks21@192.168.1.15:/tmp/website" -c "expect password:" -c "send
${var}\r" -c "expect" -c "wait"' />
<message="-------------------------" />
		
<exec executable="${cygwin.dir}\bin\bash.exe" 
	  dir="${production.config.dir}/${versionName}/WEBSERVER" 
	  inputstring="${host.password}" 
	  outputproperty="debug.exec">
	<arg value="-c" />
	<arg value='read var;expect -d -c "spawn rsync -aOvz
--chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r -e ssh .
davidparks21@192.168.1.15:/tmp/website" -c "expect password:" -c "send
${var}\r" -c "expect" -c "wait"' />
	<env key="PATH" path="${cygwin.dir}\bin" />
</exec>

<echo message="-------------------------" />
<echo message="${debug.exec}" />

======================
And the output is:
======================

     [echo] read var;expect -d -c "spawn rsync -aOvz
--chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r -e ssh .
davidparks21@192.168.1.15:/tmp/website" -c "expect password:" -c "send
${var}\r" -c "expect" -c "wait"
     [echo] -------------------------
     [echo] -------------------------
     [echo] expect version 5.26
     [echo] usage: spawn [spawn-args] program [program-args]
     [echo]     while executing
     [echo] "spawn"
     [echo] argv[0] = expect  argv[1] = -d  argv[2] = -c  argv[3] = spawn  
     [echo] set argc 0
     [echo] set argv0 "expect"
     [echo] set argv ""


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message