This utility makes you quite easy to manage your environment variables.
NOTE:
- This utility works with
bash
only! env-mpi-select
is not finished yet!
Suppose it's cloned to /sysenv
.
The cloned directory should be readable by everyone.
Just run
sudo python /sysenv/install.py
A line of source /sysenv/env.bashrc
will be added to the proper file.
- For Ubuntu: Added to the top of
/etc/bash.bashrc
- For CentOS: Added to the top of
/etc/bashrc
- For other OS: The installer can't do it for you. Manually add the above line into your system-wide bash profile.
NOTE:
/sysenv/env.bashrc
is sourced no matterbash
is interactive or not./sysenv/env.bashrc
is sourced even ifbash
is started by SSH.- Idempotence: to source
/sysenv/env.bashrc
many times is OK.
It's quite easy to define environment variables using ~/env.conf
env.conf
has a simple ini-style syntax:
- Multiple values of an environment variable is defined in multiple lines, they will be joined with colon
:
at last - To reference environment variables (bash-style syntax:
$VAR
or${VAR}
) when defining a environment variable is permitted - "Internal" variables (starting with dot
.
) will not be exported, but they bring convenience - Using special characters in environment variables is OK
Please see env.conf.example
for details.
env-reload
After changing your ~/env.conf
, use this command to reload the file.
Quite a few corner cases are considered and tests, feel safe and free to use this command!
The effect is real-time, which means you DO NOT need to exit & restart your bash
env-mpi-select # This will show the information
env-mpi-select <target> # This will switch to the target implementation
Use env-mpi-select
to switch to a different MPI implementation.
The effect is real-time, which means you DO NOT need to exit & restart your bash
NOT every corner cases are tested. So please take care when using any strange characters in path string.
For example:
- Colons
:
Back slashes \
, Dollars (escaped) $$
, Whitespaces
, single quotes '
and double quotes "
should work.
However, it's still strongly suggested NOT including these characters in path string, since not every program and library handles them very well.
I found there are some similar tools, but they are not light-weight enough.
See http://www.mcs.anl.gov/hs/software/systems/softenv/softenv-intro.html
See http://modules.sourceforge.net/
###############################################################################
# Add your personal $PATH here
###############################################################################
[PATH]
/your/path1/bin
/your/path2/bin
/your/path3/bin
###############################################################################
# The following lines demonstrate how variant expansion works.
# Generally speaking, it's a cartesian product.
#
# With
# FOO=ab:cd
# BAR=123:456
# We have
# $FOO$BAR=ab123:ab456:
###############################################################################
[FOO]
ab
cd
[BAR]
123
456
# DUMMY will be "ab123-xyz:ab456-xyz:cd123-xyz:cd456-xyz:ab233:cd233"
[DUMMY]
$FOO$BAR-xyz
${FOO}233
###############################################################################
# Use '$$' to escape a '$' character.
# Special characters are OK in the values, like:
# single quotes, double quotes, whitespaces, bask-slashes...
#
# In the following example, MY_VAR =
# M\y$V:a "lu'e"
###############################################################################
[MY_VAR]
M\y$$V:a "lu'e"
###############################################################################
# Make it easy to set environment variables:
# - Multiple names in the same "[" "]" separated by whitespaces will be
# assigned the same value
# - Dot-started names will NOT be exported, but they can be referenced in
# other variables (for convenience)
#
# The following statements make it easy to add your self-compiled library's
# paths into environment variables: LIBRARY_PATH, C_INCLUDE_PATH &
# CPLUS_INCLUDE_PATH for compilers; PATH & LD_LIBRARY_PATH for executables,
# MANPATH for man-documentation, PKG_CONFIG_PATH for pkg-config.
# If you place all your compiled library in the same root directory (NOT the
# same "--prefix" option!), like ~/build, it's quite convenient to write
# like the following. Now if you want to compile openssl, just run
# ./configure --prefix=$HOME/build/libssl <other_options>
# make && make install
# and uncomment the libssl line below. Then run 'env-reload' - All done.
#
# As you have this tool, please DO NOT:
# - Compile many libraries/executables with the same "--prefix" option
# - Compile a library/executable with default option "--prefix" = /usr/local
#
###############################################################################
[.my_compiled_libs]
libpcre
libhmsbeagle
#libssl
[.my_install_root]
~/build/${.my_compiled_libs}
/usr/local/cuda-8.0
[LIBRARY_PATH LD_LIBRARY_PATH]
${.my_install_root}/lib
${.my_install_root}/lib64
[PKG_CONFIG_PATH]
${.my_install_root}/lib/pkgconfig
[C_INCLUDE_PATH CPLUS_INCLUDE_PATH]
${.my_install_root}/include
[MANPATH]
${.my_install_root}/share/man
[PATH]
${.my_install_root}/bin