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