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