Provided by: elektra-doc_0.8.14-5_all bug

NAME

       md_src_libgetenv_README - kdb-sget(1) -- Get the value of a key stored in the key database from a script
       kdb sget <path> <default-value>

       Where path is the full path to the key and default-value is the value that should be printed if no value
       can be retrieved.

   DESCRIPTION
       This command is used to retrieve the value of a key from within a script. When using the kdb tool in a
       script, the user should use the sget command in place of the kdb-get(1) command. The kdb-get(1) command
       should not be used in scripts because it may return an error instead of printing a value in certain
       circumstances. The sget command guarantees that a value will be printed (unless the user passes faulty
       arugments). This command will either print the value of the key it retrives or a default value that the
       user specifies.

   EXAMPLES
       To get the value of a key from a script or return the value 0: kdb sget user/example/key 0

       To get the value of a key using a cascading lookup or return the value notfound: kdb get /example/key
       'notfound'

   SEE ALSOkdb-get(1) for every newly started application (no relogin necessary).

       To  do  so,  getenv(3)  will  lookup  multiple sources next to searching in the environment (environ). As
       running example will use getenv('HOME') -> /path/to/home:

       1.  Given commandline parameters will always be preferred (see OPTIONS below).

       E.g. kdb elektrify-getenv <app> --elektra:HOME=/path/to/home

       2.  Then /env/override/<key> will be looked up, where <key> is the parameter to getenv. If found, the key
           will be returned, if it is a null keys, getenv will return NULL.

       E.g. kdb set user/env/override/HOME /path/to/home

       3.  Then environment will be requested.

       E.g. HOME=/path/to/home kdb elektrify-getenv <application>

       3.  Then /env/fallback/<key> will be looked up. If found, the key will be returned, if it is a null keys,
           getenv will return NULL.

       E.g. kdb set user/env/fallback/HOME /path/to/home

   OPTIONS
       When elektrify-getenv is  active,  every  application  additionally  accepts  Elektra's  getenv  options.
       Interleaving Elektra's and the application's options is allowed. Elektra will parse its options (starting
       with --elektra) first and discard them before the other application is started. Therefore the application
       will not see that they even existed, e.g.: given kdb elektrify-getenv <application> -V --elektra-debug -L
       the application will be called with <application> -V -L.

   Internal Options
       • --elektra-help: Outputs this help.

       • --elektra-version: Gives version information.

       • --elektra-debug=file,  ELEKTRA_DEBUG  or /env/option/debug: Trace all getenv(3) calls to a file. stderr
         if no file is given, e.g. kdb set user/env/option/debug ''. Note that null values (no forth  argument),
         will disable debug messages. See examples below.

       • --elektra-clearenv,  ELEKTRA_CLEARENV  or  /env/option/clearenv: Call clearenv(3) before entering main.
         This is a recommended security feature. Elektra itself, if configured that way, will still be  able  to
         use the environment.

       • --elektra-reload-timeout=time_in_ms,  ELEKTRA_RELOAD_TIMEOUT  or /env/option/reload_timeout: Activate a
         timeout based feature when a time is given in ms (and is not 0).

       Internal Options are available in three different variants:

       1.  as commandline parameter: --elektra-<option>, which are not passed through exec(3) calls.

       1.  as environment variable: ELEKTRA_<OPTION>. which might be  passed  through  exec(3)  calls,  but  are
           removed by clearenv(3) calls.

       1.  as  Elektra KDB entry: /env/option/<option>, which are the way to achieve an option to be enabled for
           every application.

       E.g. kdb set user/env/option/clearenv '' to clear the environment for all applications  started  by  that
       user  (note  that  at  least  PATH  should to be set using kdb set user/env/fallback/PATH '/bin:/usr/bin'
       then).

       Note,  that  null  keys  are  equal  to   non-set   options.   E.g.   kdb   set   system/env/option/debug
       '/tmp/elektra.log' and kdb set user/env/option/debug will activate logging for the system, except for the
       current user.

   Contextual Options
       • --elektra%<name>%=<value>  or  /env/layer/<name>: Add the contextual information (=layer) %<name>% with
         it's value <value>. Note that name% is predefined with argv[0] and basename% with basename(argv[0]).

       Values can contain / to form hierarchies, e.g. --elektraname%=app/profile

   Options for Applications
       • --elektra:key=value, /env/override/<key> or /env/fallback/<key>: set a key/value to be preferred,  i.e.
         the first to considered as explained in LOOKUP.

       Keys can contain / to form hierarchies, e.g. --elektra:my/HOME=/path/to/home.

   USAGE
       To always use Elektra's getenv environment, simply add the output to the file:

       kdb elektrify-getenv | tail -1 | sudo tee -a /etc/ld.so.preload

       this also can be done using Elektra:

       sudo kdb mount /etc/ld.so.preload system/ld/preload line null
       sudo kdb set "system/ld/preload/new"  `kdb elektrify-getenv | tail -1`

   CONTEXT
       The  metadata  context  in the specification can be used to facilitate a context-dependent lookup. In its
       metavalue  all  replacements  of  %<name>%  will  be   replaced   by   the   given   contextual   options
       --elektra%<name>%=<value> and /env/layer/<name> keys.

       E.g. to have a different home directory for any user and application:

       kdb set user/env/layer/user markus
       kdb set user/users/markus/konqueror/HOME /home/download
       kdb setmeta spec/env/override/HOME context  /users/%user%/%name%/HOME

   BUGS
       Some  applications  do not use getenv(3) or secure_getenv(3) for requesting the environment, e.g. shells.
       This approach cannot work for them.

       In the startup-phase (before main is  even  entered),  getenv(3)  will  not  consider  /env/override/  or
       /env/fallback.

       Elektra internally tries to avoid using the environment. Some resolvers, however, use it to be conform to
       some  specifications,  e.g. XDG. Depending on the setup you use, these parameters might be used. For more
       information see:

       kdb info resolver

       For these parameters, /env/override/ or /env/fallback will not be used internally, but will  be  used  if
       applications request them, too.

       If you use the standard resolvers, the bug won't have any effect.

       Also  note  that  --elektra-debug  or  ELEKTRA_DEBUG  does  not  log getenv(3) used by plugins during the
       startup-phase.

       Commandline Arguments are always to the outmost command, e.g. nice ls --elektra:COLUMNS=20 won't have any
       effect because only for nice COLUMNS will be set.

   EXAMPLES
       For illustration this section gives some more examples.

       kdb elektrify-getenv man man --elektra:MANWIDTH=40

       Will use MANWIDTH 40 for this invocation of man man.  This  feature  is  handy,  if  an  option  is  only
       available  by environment, but not by command-line arguments, because sometimes environment variables are
       not trivial to set (e.g. in Makefiles).

       Debugging:

       # system wide to stderr (not recommended!):
       sudo kdb set system/env/option/debug ""
       # system wide to /var/log/elektra.log:
       sudo kdb set system/env/option/debug "/var/log/error.log"
       # but for my user to ~/.elektra.log:
       kdb set user/env/option/debug "$HOME/.elektra.log"
       # or disable it for my user:
       kdb set user/env/option/debug

       Some more examples:

       kdb set user/env/override/MANOPT -- "--regex -LC"
       kdb elektrify-getenv getenv MANOPT   # to check if it is set as expected
       kdb getenv MANOPT   # if /etc/ld.so.preload is active

       Will permanently and user-wide change MANOPT to include --regex, and -LC so that regular expressions will
       be used (note man echo will return many man pages then) and that they will  be  shown  in  English.  This
       feature is handy to change the default behaviour of applications (either system, user or directory-wide).

       kdb set system/env/override/HTTP_PROXY http://proxy.hogege.com:8000/

       Will  permanently  and system-wide change the proxy for all applications that honor HTTP_PROXY, e.g. w3m.
       We can also link http_proxy to the value of HTTP_PROXY:

       kdb setmeta spec/env/override/http_proxy "override/#0" /env/override/HTTP_PROXY
       kdb get /env/override/http_proxy

Version 0.8.14                                   Tue Dec 15 2015               md_src_libgetenv_README(3elektra)