problems with script

Igor Pechtchanski pechtcha@cs.nyu.edu
Tue Apr 13 22:12:00 GMT 2004


On Tue, 13 Apr 2004, Christopher Spears wrote:

> --- Igor Pechtchanski <xxxxxxxx@xx.xxx.xxx> wrote:
                         ^^^^^^^^^^^^^^^^^^^
<http://cygwin.com/acronyms/#PCYMTNQREAIYR>

> > On Tue, 13 Apr 2004, Christopher Spears wrote:
> >
> > > I created the following script:
> > >
> > > #!/bin/tcsh
> > >
> > > #csh script to prepend standard input to file argument
> > > #Version 1
> > >
> > > #name temp file
> > > set tf = /tmp/ppd.$$
> > >
> > > #get argument name
> > > set dest = $argv[1]
> > >
> > > #copy standard input, $dest to $tf
> > > cat - $dest > $tf
> > >
> > > #replace original file
> > > mv $tf $dest
> > >
> > > However, when I run the script in the tcsh with the
> > > following command line:
> > > (date; du ~) | ./ppd.txt ~/disk_storage&
> > >
> > > I get a syntax error (set: Syntax Error).
> > >
> > > I posted this script on an online Linux forum.  A
> > > member copied it into vi, and it worked fine.  Is
> > > there something in Cygwin that I need to do?  I have
> > > written #!/bin/tcsh at the top, and I haved used set
> > > before in tcsh.
> >
> > Nope.  WFM in Cygwin 1.5.9, tcsh 6.12.00, Win2k.  This could be caused
> > by the presence of a control character in your script (e.g., if you
> > edited it in MS Word).  Try changing the first line to "#!/bin/tcsh
> > -x" to see exactly which commands are invoked.  Pipe stderr through
> > "cat -A" to see any special characters.
> >       Igor
>
> I changed the first line to "!/bin/tcsh -x", and then tried to run the
> script again.  Here are the results:
>
> set tf = /tmp/ppd.1316
> set dest = /home/Christopher Spears/disk_storage
> set: Syntax error
>
> So it seems the first two lines work...Right?

Nope.  The lines are printed *before* they're executed.  Your problem is
missing quotes.  This is a common pitfall in Cygwin, as spaces in
filenames are much more common in Windows than in Unix (although a space
is a valid filename character in any Unix implementation).
Change lines 10, 13, and 16 of your script to

10 	set dest = "$argv[1]"

13 	cat - "$dest" > "$tf"

16 	mv "$tf" "$dest"

respectively, and your script should work.  You should really quote
accesses to any variable that may potentially contain whitespace.

> What is stderr?

stderr is a common abbreviation of the "standard error" output stream,
usually associated with file descriptor 2 (called "diagnostic output" in
tcsh-speak).  See "man bash" (search for "REDIRECTION") or "man tcsh"
(search for "Input\/output$").
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster."  -- Patrick Naughton

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list