Unix environment variables

Environment variables are local to each shell session and influence the way your system and the installed software behaves. The PATH variable, for example, contains a colon-separated list of directories (such as /usr/bin) that are searched for executable programs.

In order to access the value of an environment variable, prepend a $-sign. To print, e.g., the value of PATH we run:

echo $PATH

If we want to change the value of an environment variable we have to use the command export. To prepend, e.g., the directory /home/user/bin to PATH, we run:

export PATH=/home/user/bin:$PATH

One can list all environment variables of the active shell by running:

printenv

If you want to set the value for an environment variable automatically, it is the best practice to add the corresponding export command to the file ~/.bash_profile (or ~/.zprofile)

Note

Some environment variables on Mac OS differ slightly from the ones on conventional UNIX systems (e.g. LD_LIBRARY_PATH)

Common environment variables

Environment Variable

Brief Description

PATH

List of directories searched for executables

USER

The current username

HOME

Home directory of the current user

PWD

Path to the current working directory

Environment variables for software developement

Environment Variable

Brief Description

CC

The C-compiler executable

CXX

The C++-compiler executable

CFLAGS

Additional compiler flags for C

CXXFLAGS

Additional compiler flags for C++

LDFLAGS

Additional flags for the linker

LIBRARY_PATH

List of directories searched for libraries by the linker

LD_LIBRARY_PATH

List of directories searched for dynamic libraries

CPATH

List of directories searched for C/C++ header files (treated like -I includes)

CPLUS_INCLUDE_PATH

List of directories searched for C/C++ header files (treated like -isystem includes)

PYTHONPATH

List of directories searched for python modules/packages

Environment variables affecting OpenMP

Certain environment variables will affect the behavior of OpenMP. In particular they allow you to set the number of OpenMP threads that will be spawned.

Warning

This is of particular importance when using MPI, as each MPI rank will potentially spawn an equal number of OpenMP threads. If you intend to use as many MPI ranks as cores are available you should export OMP_NUM_THREADS=1

Environment Variable

Brief Description

OMP_NUM_THREADS

Specifies globally the number of OpenMP threads to use

MKL_NUM_THREADS

Specifies the number of OpenMP threads to use only within the Intel MKL library

OPENBLAS_NUM_THREADS

Specifies the number of OpenMP threads to use within the OpenBlas library