r.mapcalc script and pipes

If I type
set ima = vegetation1
r.mapcalc res = $ima * $ima

r.mapcalc works without problems, but if I type
r.mapcalc < test

where test is a file whose only line is:
res = $ima * $ ima

then r.mapcalc says <$ima> not found, that is, it does not interpret
$ima as the value of ima. If I write test as,
'res = ' $ima '*' $ima

then r.mapcalc gets confused and me too.

I have to use this piping because r.mapcalc is within a loop in an
script, ima takes different values and the expression actually passed
to r.mapcalc is complex.
Is there any way to get r.mapcalc to interpret $ima when piped?

Thamks,
Agus

In <9307200041.AA08840@Jasper.Stanford.EDU> lobo@Jasper.Stanford.EDU (Agustin Lobo) writes:

If I type
set ima = vegetation1
r.mapcalc res = $ima * $ima

r.mapcalc works without problems, but if I type
r.mapcalc < test

where test is a file whose only line is:
res = $ima * $ ima

then r.mapcalc says <$ima> not found, that is, it does not interpret
$ima as the value of ima. If I write test as,
'res = ' $ima '*' $ima

then r.mapcalc gets confused and me too.

Your confusion has do do with Unix. r.mapcalc knows nothing about
the $. Unix changes $ima to vegetation1 and r.mapcalc sees vegetation1,
not $ima. This only happens if Unix sees the $ which it will if you
put the expression on the command line. But if you put it into a file
and then send the file into r.mapcal (r.mapcalc < test) Unix doesn't
look into the file and substitute vegetation1 for $ima so r.mapcalc
sees $ima and gets confused (and you too).

You will have to learn some shell programming - but you can look
at shade.rel.sh for an example of how you might do what you want to do.

I have to use this piping because r.mapcalc is within a loop in an
script, ima takes different values and the expression actually passed
to r.mapcalc is complex.
Is there any way to get r.mapcalc to interpret $ima when piped?

Thamks,
Agus

--
Michael Shapiro shapiro@zorro.cecer.army.mil
U.S. Army CERL (217) 373-7277
P.O. Box 9005
Champaign, Ill. 61826-9005