[GRASS-user] run commands sequentially - help please

Patton, Eric epatton at nrcan.gc.ca
Thu Aug 3 13:28:13 EDT 2006


Here's the script I use for batch importing Arc maps:

# Prompt for search pattern and provide clean exit.

echo -e "\nEnter the Arc Grid search pattern for g.mlist or type \"q\" to
quit: "
read PATTERN

if [ "$PATTERN" = "q" -o "$PATTERN" = "Q" ] ; then
	exit 0
else	
	break

fi 

# Now import each raster in sequence.
for MAP in `ls $PATTERN`; do
	echo ""
	echo "=================================="
	echo -e "\nProcessing $map..." 
	r.in.arc input=$MAP output=$MAP

	if [ $? -eq 0 ] ; then
		echo -e "Import of $MAP completed.\n"
	else 
		echo -e "Error: Could not import $MAP. Exiting...\n"
	fi
done

echo Finished.

exit 0


I put some other sanity-checking code in there too, but this is the bare
bones of it. I can send you the entire bash script if you want.

~ Eric.

-----Original Message-----
From: grassuser-bounces at grass.itc.it
To: Scott Mitchell
Cc: grassuser at grass.itc.it
Sent: 8/3/2006 12:57 PM
Subject: RE: [GRASS-user] run commands sequentially - help please

Scott,
 
Thanks for the cleanup... now it is not so dirty
 
 
BTW I remember Markus showing us a way to save commands you type to the
GRASS CLI into a script (think is was X.save where X=something).. this
is good if you want to perform it once in geenral and then edit the
script for variations. Couldn't find it off hand in the docs.
 
I'd be interested to know if you could set and use variables in the
approach we used bellow. I never tried.  but if you could say use
output=$OUTMAP and input=$INMAP and then you can loop for a series of
maps. and the input and output are auto generated based on the basefile
name.
 
Can someone provide a sample snippet of how this might look?
 
Would the for loop be part of the said script, or would you call one
script from another passing variables?
 
This might be good if it is a repeated process you will use ALOT... a
type of mild automation.
 
I notice that in grass 6.1 there is lots of information in the OUTPUT
window of what is passed from the command... can you capture this?.. I
have not tried any of the icons....  if so then this is another way to
maybe build your script.  I'm likin 6.1 more and more
 
 
Just some thoughts.
 
 

  _____  

From: Scott Mitchell [mailto:smitch at mac.com] 
Sent: August 3, 2006 12:47
To: Sampson, David
Cc: Tiago Salgueiro; grassuser at grass.itc.it
Subject: Re: [GRASS-user] run commands sequentially - help please



A few elaborations that might help unix-newbies:

On 3-Aug-06, at 12:25, Sampson, David wrote:


Dirty approach,
 
I used this approach when doing mass imports of files and only had
slight variations.
 
under linux (shoudl work too in cygwin, dos batch would achieve the same
thing)
 
I created a script file (executable text Basicaly) that for you would
look like
 
# for a script named runme.sh
#(what ever header you need for your shell)
#!/bin/sh




Putting $!/bin/sh at the top of a script will ensure that the file gets
interpreted by whatever the default shell is on the system.  Forcing
other shells is also possible here, but using just "sh" means you get
the default (i.e. as opposed to bash, csh, tcsh, ksh, etc etc).


 
v.in.asci (string of settings);


note that should be ascii with two i's


g.region (string of settings);
v.surf.rst (string of settings);
nviz (string of settings);
 
#end of script
 
then at the $prompt  you need to make the file executable
$chmod 777 runme.sh


Note this makes the file readable, writeable and executable to everyone
on the system.  If this is just your own private linux or windows box,
you probably don't care, but if someone is doing this on a multi-user
system, you might not want other people to be able to edit your files.
Using chmod 755 would make it readable and executable to anyone, but
only writeable to you, the owner of the file.  An alternative, more
user-friendly syntax is

chmod u+x runme.sh

which simply says add the execute permission ("+x") for the User ("u")
that owns runme.sh


 
then at the $prompt inside a GRASS session you can run the file
$./runme.sh
 
boom!
 
notice in the script that each line ends in a ; (semi-colon) this
separates each command


I don't think you need that.  It's C syntax to do that, not needed in a
shell script unless you're concatenating multiple commands on to a
single line.


 
Note also that sometimes options need to be in quotes
eg
v.in.ascii option1="settings string that may contain escape characters
or spaces";
 
Alternatively you can capture what you enter at the CLI using 
 
 

 
  _____  

From: grassuser-bounces at grass.itc.it
[mailto:grassuser-bounces at grass.itc.it
<mailto:grassuser-bounces at grass.itc.it> ] On Behalf Of Tiago Salgueiro
Sent: August 3, 2006 11:24
To: grassuser at grass.itc.it <mailto:grassuser at grass.itc.it> 
Subject: [GRASS-user] run commands sequentially - help please



BM__Toc119731566Hi all,


 

First of all you should know that I'm a beginner using GRASS.


 

I want to create a 3D map from a text file with coordinates. I think the
commands I will need are the following:


 


1 - v.in.ascii


BM__Toc1197315672 - g.region


BM__Toc1197315693 - v.surf.rst


BM__Toc1197315714 - nviz


 

But I don't want to write the commands every time I want to see a map.
So I desire to do this sequentially. How can I do that? This way I'll
only need to run one command and the map happens.


 

Thanks for your help.


 

 

Cumprimentos/Best Regards,

 

Tiago Salgueiro


 
_______________________________________________
grassuser mailing list
grassuser at grass.itc.it <mailto:grassuser at grass.itc.it> 
http://grass.itc.it/mailman/listinfo/grassuser
<http://grass.itc.it/mailman/listinfo/grassuser> 


 <<ATT1762110.txt>> 




More information about the grass-user mailing list