Serialize BASH Environment Variables
Although shell is usually not regarded as a language for "serious" programming, there is still needs for saving/loading environment variables between sessions. This is not only feasible but also easier than one might think. The idea is, you write variables into a file in a "source-able" format and then source that file later to load the variables.
The "var=value" way
The most straightforward way might be to just write
a file, say "./environ". And then
source ./envrion to load it in following
sessions. For example:
# To save: echo "var='$var'" > ./environ # To load source ./environ
Note that the single quotes around
$var are crucial to keep this mechanism
work in cases when value of
var contains white space.
The biggest problem of this measure, however, is that it does not preserve all attributes and hence can only deal with simple variables. For example, it does not save "readonly" flags.
The "declare -p" way (BASH only) measure
In deed, BASH provides
declare -p, which makes the serialization of
environment variables a breeze. It prints variables in a source-able format,
preserving their attributes. Hence, be they readonly-s, arrays, integers, you just:
declare -p var1 var2 > ./environ # NOTE: no '$' before var1, var2
One caveat for the "declare -p xx", though: if you wrap the
into a function, then all sourced variables are visible within the function
declare by default declares variables as local ones. To
circumvent this, you may either
source out of any function (or in your
main function) or add
-g (which makes corresponding variable global) to
each line of
./environ after exporting. For instance:
declare -p var1 var2 sed -i 's/^declare\( -g\)*/declare -g/' ./environ # "\( -g\)?" ensure no duplication of "-g"
blog comments powered by Disqus