Git init
[pkgs/e/elektra.git] / scripts / elektraenv.sh
1 #!/bin/sh
2
3 ###########################################################################
4 ##
5 ## This is a /etc/profile.d script to set user environment and aliases
6 ## based on Elektra keys under 'user/env'.
7 ##
8 ## Bellow user/env there must be three priorities for environment
9 ## variables:
10 ##
11 ##     user/env/env1
12 ##     user/env/env2
13 ##     user/env/env3
14 ##
15 ## You should distribute your environment variables according to their
16 ## dependencies. For example, if we want to
17 ## set PATH as $JAVA_HOME/bin:$PATH, we'll have to set
18 ##
19 ##     user/env/env1/JAVA_HOME
20 ##     user/env/env2/PATH
21 ##
22 ## This way it is guaranteed that the variables under user/env/env1 are
23 ## set before those under user/env/env2, and before those under
24 ## user/env/env3
25 ##
26 ## The folder user/env/alias contains keys to define shell aliases.
27 ## For instance user/env/alias/ls may contain 'ls -Fh', to set an alias
28 ## to the 'ls' command.
29 ##
30 ## Avi Alkalay <avi at unix dot sh>
31 ## April 2004
32 ##
33 ## $Id$
34 ##
35 ###########################################################################
36
37
38 if [ -z "$KDB" ]; then
39         KDB=kdb
40 fi
41
42 FILE="`mktemp -t elektraenv.XXXXXXXXX`"
43
44
45 readEnvTree() {
46         local keysAvailable=0
47         local stage=0
48         local key
49
50         for stage in 1 2 3; do
51                 echo "# Stage $stage"
52                 $KDB ls $1/env$stage 2>/dev/null | while read key; do
53                         if [ -z $keysAvailable ]; then
54                                 keysAvailable=1
55                                 echo "echo Setting environment from the Elektra key database under '$1'"
56                         fi
57                         # This stuff is so complicated, with sed etc, because
58                         # we need to superescape a '\$' for envs like PS1
59                         echo -n "export "
60                         $KDB get -s $key | sed -e 's/\([^\\]\)\\\$/\1\\\\\$/g;'
61                 done
62         done
63
64         echo
65         echo "# Aliases"
66         $KDB ls $1/alias 2>/dev/null | while read key; do
67                 echo alias `$KDB get -s $key`
68         done
69 }
70
71
72
73 ########################
74 ##
75 ##  Main block
76 ##
77
78 # set -vx
79
80 readEnvTree system/env > $FILE
81 (echo; echo; echo) >> $FILE
82 readEnvTree user:$USER/env >> $FILE
83
84 # Execute it
85 [ -f $FILE ] && . $FILE
86
87 # Remove it
88 [ -f $FILE ] && rm -f $FILE
89
90 # Clean temporary environment
91 unset readEnvTree
92 unset FILE
93 unset KDB
94