> -----Original Message-----
> From: Randall R Schulz [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, September 18, 2002 6:30 PM
> To: [EMAIL PROTECTED]
> 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/