Project

General

Profile

1
#!/bin/bash
2
# Sets a password environment variable
3

    
4
self="$(readlink -f -- "${BASH_SOURCE[0]}")"
5

    
6
set -o pipefail
7

    
8
store=
9
test "$1" = - && { store=1; shift;}
10

    
11
# Was run without initial ".", or with insufficient parameters
12
if test "${BASH_LINENO[0]}" = 0 -o "$#" -lt 1; then
13
    echo "Usage: . $self env_var [desc] (note initial \".\")"|fold -s >&2
14
    return 2
15
fi
16

    
17
desc="$2"
18
test -n "$desc" || desc="the $1 password"
19

    
20
function trace() { for arg in "$@"; do printf "%q " "$arg"; done; echo;}
21

    
22
function traceSelf() { trace . "$self" - "$@";}
23

    
24
if test -n "$store" -o -z "${!1+t}"; then # env var with name $1 is unset
25
    if test -n "$store"; then
26
        echo " To change the saved value for $desc, run: " >&2
27
        traceSelf "$@" >&2
28
    else
29
        test -t 2 && ccTty= || ccTty=1 # cc the tty if stderr is a log file
30
        {
31
        echo " You must first store $desc. At the shell, run: "
32
        traceSelf "$@"
33
        }|tee ${ccTty:+/dev/tty} >&2
34
    fi
35
    
36
    test -z "$store" && exit 1 # just direct user how to store password
37
    read -s -p "Enter $desc: "; echo
38
    export "$1"="$REPLY"
39
fi
(11-11/46)