Project

General

Profile

1 183 aaronmk
#!/bin/bash
2 131 aaronmk
# Sets a password environment variable
3
4 1952 aaronmk
env_password_main ()
5
{
6
    local self="$(readlink -f -- "${BASH_SOURCE[0]}")"
7
8
    set -o pipefail
9
10
    local store=
11
    test "$1" = - && { store=1; shift;}
12
13
    # Was run without initial ".", or with insufficient parameters
14 1953 aaronmk
    if test "${BASH_LINENO[1]}" = 0 -o "$#" -lt 1; then
15 1952 aaronmk
        echo "Usage: . $self env_var [desc] (note initial \".\")"|fold -s >&2
16
        return 2
17 292 aaronmk
    fi
18 293 aaronmk
19 1952 aaronmk
    local desc="$2"
20
    test -n "$desc" || desc="the $1 password"
21
22
    function trace() { for arg in "$@"; do printf "%q " "$arg"; done; echo;}
23
24
    function traceSelf() { trace . "$self" - "$@";}
25
26
    if test -n "$store" -o -z "${!1+t}"; then # env var with name $1 is unset
27
        if test -n "$store"; then
28
            echo " To change the saved value for $desc, run: " >&2
29
            traceSelf "$@" >&2
30
        else
31
            test -t 2 && ccTty= || ccTty=1 # cc the tty if stderr is a log file
32
            {
33
                echo " You must first store $desc. \
34
At the shell, run: "
35
                traceSelf "$@"
36
            }|tee ${ccTty:+/dev/tty} >&2
37
        fi
38
39
        test -z "$store" && return 1 # just direct user how to store password
40
        read -s -p "Enter $desc: "; echo
41
        export "$1"="$REPLY"
42
    fi
43
}
44
env_password_main "$@"