1
|
#!/bin/bash
|
2
|
# Sets a password environment variable
|
3
|
|
4
|
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
|
if test "${BASH_LINENO[@]: -1}" = 0 -o "$#" -lt 1; then
|
15
|
echo "Usage: . $self env_var [desc] (note initial \".\")"|fold -s >&2
|
16
|
return 2
|
17
|
fi
|
18
|
|
19
|
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 "[7m To change the saved value for $desc, run: [0m" >&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 "[101;97m You must first store $desc. \
|
34
|
At the shell, run: [39;49m"
|
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 "$@"
|