This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: dumb escaping question when using Cygwin + NT commands



> -----Original Message-----
> From: Randall R Schulz [mailto:rrschulz@cris.com]
> Sent: Wednesday, September 18, 2002 6:30 PM
> To: cygwin@cygwin.com
> Subject: Re: dumb escaping question when using Cygwin + NT commands
> 
> 
> Scott,
> 
> At 15:15 2002-09-18, Scott Prive wrote:
> 
> >Hello,
> >
> >I get this odd problem when calling NT commands from Cygwin. I am 
> >single-quoting the data, but the way I'm doing things 
> (probably wrong...) 
> >does not like passing $1 function arguments to NT commands. 
> If I hardcode 
> >the arguments internally, everything works.
> >
> >The two example functions below are intended to behave identical.
> >
> >#!/bin sh
> >
> >mount_drive () {
> >    # Syntax: net 'use' '*' '\\redhat\foo' 'foo' '/user:foo'
> >    net 'use' 'F:' '\\redhat\foo' 'foo' '/user:foo'
> >
> >    echo "The command returned $?"
> >    return $?;
> >}
> 
> Note that the status ($?) you're returning from the 
> "mount_drive" shell 
> procedure is that of the "echo" command, not that printed 
> _by_ the echo 
> command.
> 
> The only arguments in this example for which quoting changes the net 
> argument passed to the underlying command is the one that 
> includes "redhat" 
> and the asterisk. The others contain no special characters requiring 
> quoting or escaping to inhibit special interpretation.
> 
> 
> >mount_drive2 () {
> >    net '$1' '$2' '$3' '$4' '$5'
> >    echo "we saw in mount_drive2: '$1' '$2' '$3' '$4' '$5' "
> >
> >    echo "The command returned $?"
> >    return $?;
> >}
> 
> The same "$?" issue exists here, of course.
> 
> You need to be aware of the difference between 'single 
> quotes' and "double 
> quotes." Variable expansion is inhibited in single-quoted 
> arguments, but 
> not in double-quoted ones. Furthermore, double quoted 
> arguments protect 
> single quotes, making the non-special. So you've probably 
> confused yourself 
> into thinking that in this example the "net" command saw the 
> arguments you 
> passed to the "mount_drive2" procedure. It did not. It saw 
> arguments each 
> consisting of a dollar sign followed by a digit. Then you 
> echoed a single 
> argument composed of some fixed text, some single quote marks 
> and some 
> expanded positional parameters.

Doh!

Thanks. A good nights sleep and coffee got me thinking about this on the way to work, and then I read your post. 

I misled myself because the ECHO command "worked". A debugging habit from Perl is I would print out my variables. Since the echo worked, I never questioned what I was doing with quotes.

I assumed quotes controlled how data gets sent to commands, but apparently that's an oversimplification: quotes protect data being sent to a NEW PROCESS.. and builtins like "echo" are NOT a new process (`type echo). This explains why the echo command understood what the heck was inside '$2', but the echo command did not. 

Of course you know this; I'm just filling in the blanks for the benefit of mailing list and Google searches. For all of last night, I actually believed the problem was due to mixing NT commands and Cygwin.

Thanks again.

> 
> 
> >#
> >mount_drive
> >mount_drive2 'use' 'G:' '\\redhat\foo' 'foo' '/user:foo'
> >############# END SCRIPT
> >
> >
> >the output I get from mount_drive2 is standard "usage info", 
> indicating I 
> >passed arguments incorrectly. However the debug echo *looks* correct.
> >
> >Someone please point out my mistake, else I'm doomed to some 
> ugly hackish 
> >workarounds ;-)
> >
> >Thanks,
> >
> >Scott
> 
> 
> Randall Schulz
> Mountain View, CA USA
> 
> 
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Bug reporting:         http://cygwin.com/bugs.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
> 
> 

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]