[GRASS-user] Using GRASS_BATCH_JOB but with a c++ program

Glynn Clements glynn at gclements.plus.com
Mon May 17 12:10:51 EDT 2010


rabotin wrote:

> Dear all,
> I'm trying to launch a grass work with a script to automate calcul.
> I try successfully with calling a shell script with GRASS_BATCH_JOB 
> parameter (which call the test_algo.sh)
> with the following shell script
> 
> #!/bin/bash
>    chmod u+x $HOME/test_algo.sh
>    export GRASS_BATCH_JOB=$HOME/test_algo.sh
>    grass ~/grassdata/Roujan/simon9/
>    unset GRASS_BATCH_JOB
> 
> I'm trying now to do the same thing with a c++ program which call the 
> same shell script (test_algo.sh) and having the following lines (here 
> the .cpp file):
> 
> #include <stdio.h>
> #include <stdlib.h>
> 
> const char chmod[]="chmod u+x /home/rabotin/test_algo.sh";
> const char expor[]="export GRASS_BATCH_JOB=/home/rabotin/test_algo.sh";
> const char grass[]="grass -text ~/grassdata/Roujan/simon9/";
> const char unset[]="unset GRASS_BATCH_JOB";
> 
> int main()
> {
>         printf ("Launching grass test!");
>       system(chmod);
>       system(expor);
>       system(grass);
>       system(unset);
>       printf ("Launched grass test!");
> 
>         return 0;
> }
> 
> 
> But it doesnt' work well: GRASS is well launched, but no call to 
> test_algo.sh and GRASS doesnt' end successfully
> 
> Can anyone have any idea to help me ?

Environment variables are per-process. Each system() call spawns a new
shell process, and the export command will only affect the process in
which it's run, not any other processes. From a C/C++ program, use
putenv() instead, e.g.:

	system(chmod);
	putenv("GRASS_BATCH_JOB=/home/rabotin/test_algo.sh");
	system(grass);

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the grass-user mailing list