There are two types of variables:

- shell environment variables,
- GRASS gisenv variables.

There are a number of shell environment variable groups:

- variables for rendering
- variables for internal use

Note: Any setting which needs to be modifiable by a GRASS module (e.g. MONITOR by d.mon) has to be a GRASS gisenv variable.

## Setting shell environment variables

Setting shell environment variables depends on the shell being used:
Bash:

    export VARIABLE=value

Csh:

    setenv VARIABLE value

Cmd.exe (Windows):

    set VARIABLE=value

To set up shell environment variables permanently:

- To get personal BASH shell definitions (aliases, color listing option, ...) into GRASS, store them in:
  `$HOME/.grass.bashrc`
- To get personal CSH shell definitions (aliases, color listing option, ...) into GRASS, store them in:
  `$HOME/.grass.cshrc`

## Setting GRASS gisenv variables

Use g.gisenv within GRASS. This permanently predefines GRASS variables in the `.grass7/rc` file.
Usage:

    g.gisenv set="VARIABLE=VALUE"

It looks unusual with two equals signs, but g.gisenv serves dual duty for getting and setting GRASS variables.

If the user just specifies a variable name, it defaults to get mode. For example:

    g.gisenv MAPSET
    PERMANENT

## List of selected (GRASS related) shell environment variables

> [ To be set from the terminal shell or startup scripts ]

GISBASE
  directory where GRASS lives. This is set automatically by the startup script.
GISRC
  name of `.grass7/rc` file. Defines the system wide value while in a GRASS session.
GRASS_ADDON_PATH
  [grass startup script]
  allows to specify additional paths to local GRASS modules or user scripts extra to standard GRASS distribution.
GRASS_ADDON_BASE
  [grass startup script]
  allows to specify additional GISBASE for local GRASS modules (normally installed as GRASS Addons by `g.extension` module) extra to standard distribution. The default on GNU/Linux is `$HOME/.grass7/addons`, on MS Windows `$APPDATA\GRASS7\addons`.
GRASS_ADDON_ETC
  [libgis, g.findetc]
  specify paths where support files (etc/) may be found external to standard distribution.
GRASS_BATCH_JOB
  defines the name (path) of a shell script to be processed as batch job.
GIS_ERROR_LOG
  If set, GIS_ERROR_LOG should be the absolute path to the log file (a relative path will be interpreted relative to the process' cwd, not the cwd at the point the user set the variable). If not set, `$HOME/GIS_ERROR_LOG` is used instead. The file will only be used if it already exists.
GRASS_ERROR_MAIL
  set to any value to send user mail on an error or warning that happens while stderr is being redirected.
GRASS_FONT
  [display drivers]
  specifies the font as either the name of a font from `$GISBASE/etc/fontcap` (or alternative fontcap file specified by GRASS_FONT_CAP), or alternatively the full path to a FreeType font file.
GRASS_ENCODING
  [display drivers]
  the encoding to be assumed for text which is drawn using a freetype font; may be any encoding know to iconv.
GRASS_FONT_CAP
  [g.mkfontcap, d.font, display drivers]
  specifies an alternative location (to `$GISBASE/etc/fontcap`) for the font configuration file.
GRASS_GNUPLOT
  [i.spectral]
  program to use for plotting gnuplot data.
GRASS_GUI
  either `text` or `gui` to define non-/graphical startup.
  Can also specify the name of the GUI to use, e.g. `wxpython` (wxGUI). Also exists as a GRASS gisenv variable (see below). If this shell variable exists at GRASS startup, it will determine the GUI used. If it is not defined startup will default to the last GUI used.
GRASS_HTML_BROWSER
  [init.sh, wxgui]
  defines name of HTML browser. For most platforms this should be an executable in your PATH, or the full path to an executable.
  Mac OS X runs applications differently from the CLI. Therefore, GRASS_HTML_BROWSER should be the application's signature, which is a domain-like name, just reversed, i.e. com.apple.Safari. To find an application's signature, type the following in a Terminal (fill in the path to the application you are interested in, for example: /Applications/Safari.app):
  `grep -A 1 "CFBundleIdentifier"` /path/to/application.app`/Contents/Info.plist`
  The signature is the <string> following the <key>, without the bracketing <string> tags.
GRASS_INT_ZLIB
  [libgis]
  if the environment variable GRASS_INT_ZLIB exists, new compressed integer (CELL type) raster maps will be compressed using zlib instead of RLE compression. Such rasters will have a `compressed` value of 2 in the cellhd file.
  Obviously, decompression is controlled by the raster's `compressed` value, not the environment variable.
GRASS_MESSAGE_FORMAT
  [various modules, wxGUI]
  maybe set to either
  - `standard` - sets percentage output and message formatting style to standard formatting,
  - `gui` - sets percentage output and message formatting style to GUI formatting,
  - `silent` - disables percentage output and error messages,
  - `plain` - sets percentage output and message formatting style to ASCII output without rewinding control characters.
GRASS_MOUSE_BUTTON
  [various modules]
  swaps mouse buttons for two-button or left-handed mice. Its value has three digits 1, 2, and 3, which represent default left, middle, and right buttons respectively. Setting to `132` will swap middle and right buttons. Note that this variable should be set before a display driver is initialized (e.g., `d.mon x0`).
GRASS_PAGER
  [various modules]
  maybe set to either `less` or `more`.
GRASS_PERL
  [used during install process for generating man pages]
  set Perl with path.
GRASS_RND_SEED
  set random seed for r.mapcalc rand() function.
GRASS_SKIP_MAPSET_OWNER_CHECK
  By default it is not possible to work with MAPSETs that are not owned by current user. Setting this variable to any non-empty value allows the check to be skipped.
GRASS_SH
  [shell scripts on Windows]
  path to bourne shell interpreter used to run shell scripts.
GRASS_SIGSEGV_ON_ERROR
  Raise SIGSEGV if an error occures]
  This variable can be set for debugging purpose. The call of G_fatal_error() will end in a segmentation violation. GDB can be used to trace the source of the error.
GRASS_PYTHON
  [wxGUI, Python Ctypes]
  set to override Python executable.
  On Mac OS X this should be the pythonw executable for the wxGUI to work.
GRASS_VECTOR_LOWMEM
  [vectorlib]
  If the environment variable GRASS_VECTOR_LOWMEM exists, memory consumption will be reduced when building vector topology support structures. Recommended for creating large vectors.
GRASS_VECTOR_OGR
  [vectorlib, v.external.out]
  If the environment variable GRASS_VECTOR_OGR exists and vector output format defined by v.external.out is PostgreSQL, vector data is written by OGR data provider even the native PostGIS data provider is available.
GRASS_VECTOR_EXTERNAL_IMMEDIATE
  [vectorlib, v.external.out]
  If the environment variable GRASS_VECTOR_EXTERNAL_IMMEDIATE exists and vector output format defined by v.external.out is non-native, vector features are written to output external datasource immediately. By default, the vector library writes output data to a temporary vector map in native format and when closing the map, the features are transfered to output external datasource. Note: if output vector format is topological PostGIS format, then the vector library writes features immediately to output database (in this case GRASS_VECTOR_EXTERNAL_IMMEDIATE is ignored).
GRASS_WXBUNDLED
  [wxGUI]
  set to tell wxGUI that a bundled wxPython will be used.
  When set, the wxGUI will not check the wxPython version, as this function is incompatible with a bundled wxPython. It is up to the packager to make sure that a compatible wxPython version is bundled.
GRASS_XTERM
  [lib/init/grass-xterm-wrapper, lib/init/grass-xterm-mac]
  set to any value (e.g. rxvt, aterm, gnome-terminal, konsole) to substitute 'x-terminal-emulator' or 'xterm'. The Mac OS X app startup defaults to an internal '$GISBASE/etc/grass-xterm-mac', which emulates the necessary xterm functionality in Terminal.app.
GRASS_UI_TERM
  set to any value to use the terminal based parser.
GRASS_VERSION
  reports the current version number (used by R-stats interface etc); should not be changed by user.
GRASS_NO_GLX_PBUFFERS
  [nviz]
  set to any value to disable the use of GLX Pbuffers.
GRASS_NO_GLX_PIXMAPS
  [nviz]
  Set to any value to disable the use of GLX Pixmaps.
OMP_NUM_THREADS
  [OpenMP]
  If OpenMP support is enabled this limits the number of threads. The default is set to the number of CPUs on the system. Setting to '1' effectively disables parallel processing.

### List of selected GRASS environment variables for rendering

> [ In addition to those which are understood by specific GRASS display drivers, the following variables affect rendering. ]

GRASS_RENDER_IMMEDIATE
  tells the display library which driver to use; possible values: cairo, png, ps or html
GRASS_WIDTH
  defines the width of output image (default is 640).
GRASS_HEIGHT
  defines the height of output image (default is 480).
GRASS_FRAME
  contains 4 coordinates, top,bottom,left,right, defining the initial frame.
GRASS_LINE_WIDTH
  defines default line width.
GRASS_TEXT_SIZE
  defines default text size.

For specific driver-related variables see:

- Cairo driver
- PNG driver
- PS (Postscript) driver
- HTML driver

### List of selected internal GRASS environment variables

> [ These variables are intended for internal use only by the GRASS software to facilitate communication between the GIS engine, GRASS scripts, and the GUI. The user should not set these in a GRASS session. They are meant to be set locally for specific commands. ]

GRASS_OVERWRITE
  [all modules]
  toggles map overwrite.
  - 0 - maps are protected (default),
  - 1 - maps with identical names will be overwritten.
  This variable is automatically created by g.parser so that the `--overwrite` option will be inherited by dependent modules as the script runs. Setting either the GRASS_OVERWRITE environment variable or the OVERWRITE gisenv variable detailed below will cause maps with identical names to be overwritten.
GRASS_VERBOSE
  [all modules]
  toggles verbosity level
  - -1 - complete silence (also errors and warnings are discarded)
  - 0 - only errors and warnings are printed
  - 1 - progress and important messages are printed (percent complete)
  - 2 - all module messages are printed
  - 3 - additional verbose messages are printed
  This variable is automatically created by g.parser so that the `--verbose` or `--quiet` flags will be inherited by dependent modules as the script runs.
GRASS_REGION
  [libgis]
  override region settings, separate parameters with a ";". Format is the same as in the WIND region settings file. Otherwise use is the same as WIND_OVERRIDE.
WIND_OVERRIDE
  [libgis]
  it causes programs to use the specified named region (created with e.g. `g.region save=...`) to be used as the current region, instead of the region from the WIND file.
  This allows programs such as the GUI to run external commands on an alternate region without having to modify the WIND file then change it back afterwards.

## List of selected GRASS gisenv variables

> [ Use g.gisenv to get/set/unset/change them ]

DEBUG
  [entire GRASS]
  sets level of debug message output (0: no debug messages)

      g.gisenv set=DEBUG=0

WX_DEBUG
  [wxGUI]
  sets level of debug message output for wxGUI (0: no debug messages, 1-5 debug levels)
GISDBASE
  initial database
GIS_LOCK
  lock ID to prevent parallel GRASS use,
  process id of the start-up shell script
GRASS_DB_ENCODING
  [d.what.vect/forms library]
  encoding of query form (utf-8, ascii, iso8859-1, koi8-r)
GUI
  either `text` or `gui` to define non-/graphical startup.
  Can also specify the name of the GUI to use, e.g. `wxpython` (wxGUI). Also exists as a shell environment variable. If this shell variable exists at GRASS startup, it will determine the GUI used. If it is not defined startup will default to the last GUI used.
LOCATION
  full path to location directory
LOCATION_NAME
  initial location name
MAPSET
  initial mapset
OVERWRITE
  [all modules]
  toggles map overwrite.
  - 0 - maps are protected (default),
  - 1 - maps with identical names will be overwritten.
  This variable is automatically created by g.parser so that the `--overwrite` option will be inherited by dependent modules as the script runs. Setting either the GRASS_OVERWRITE environment variable or the OVERWRITE gisenv variable detailed below will cause maps with identical names to be overwritten.

## GRASS-related Files

`$HOME/.grass7/rc`
  stores the GRASS gisenv variables (not shell environment variables)
`$HOME/.grass7/bashrc`
  stores the shell environment variables (Bash only)
`$HOME/.grass7/env.bat`
  stores the shell environment variables (MS Windows only)
`$HOME/.grass7/login`
  stores the DBMI passwords in this hidden file. Only the file owner can access this file.
`$HOME/GIS_ERROR_LOG`
  if this file exists then all GRASS error and warning messages are logged here. Applies to current user. To generate the file, use: `touch $HOME/GIS_ERROR_LOG`
  See also GIS_ERROR_LOG variable.

## SEE ALSO

g.gisenv, g.parser

Last changed: $Date$