-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.bashrc_3rdparty
75 lines (58 loc) · 2.05 KB
/
.bashrc_3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#----- header -----
[ "${0##*/}" != "${BASH_SOURCE##*/}" ] || { >&2 echo -e "ERROR\tfile must be sourced ($0)"; return 2; }
# short-circuit inside screen or sub-shell
[ -z "$STY" -a ${SHLVL:-1} -eq 1 ] || return 0
#------------------
# MUST allow multiple invocation, always return '0'
#
# Usage:
# 1) symlink: .bashrc_mvn -> .bashrc_3rdparty
# 2) args: .bashrc_3rdparty mvn java ...
function 3rdparty.add_program() {
is_exec -q "${1:?software package}" && return
local pkg=$1
# search spec
declare -A software_map=(
['aws']=${AWSCLI:-aws'{cli,}{v,}'$AWS_VERSION}
['session-manager-plugin']=\${AWS_SM_PLUGIN:?}
['mvn']=apache-maven
['npm']=nodejs
['java']=${JAVA_HOME:-'j{re,dk,se}{-,}'$JAVA_VERSION}
['puppet']=${PUPPET_BASE:-puppetlabs}
['go']=${GOROOT:-'go{,lang}{-,}'$GO_VERSION}
['ruby']=${RUBY_BASE:-'ruby{-,}'$RUBY_VERSION}
)
[ -n "${software_map[$pkg]}" ] || { log.error "unsupported software ($pkg)"; return; }
local exp=( `eval printf '%q\\\n' "${software_map[$pkg]}"` )
#TODO https://unix.stackexchange.com/questions/406216/check-for-bash-options
local pbin=$(
# process embedded glob patterns
shopt -u failglob
shopt -s globstar nullglob
while read tld; do
while read mid; do
# WARN '/**/' can be VERY slow
for exe in "${tld:+$tld/}${mid#$tld}"*/{bin/,}$pkg; do
[ -x "$exe" ] && { echo "$exe"; return; }
done
done < <( convert_path -E "${exp[@]}" )
done < <(
printf '%s\n' '' /opt /usr/local
convert_path -E "${USERPROFILE:-$HOME}" "$LOCALAPPDATA" "$PROGRAMFILES"
)
)
if [ -n "$pbin" ]; then addPath "${pbin%/*}"
else log.warn "software not found ($pkg)"; fi
}
# multiple arguments supported, but not recommend
while (( $# )); do
[ -n "$1" ] || { shift; continue; }
3rdparty.add_program "$1"
shift
done
j=`readlink -e "$BASH_SOURCE"`
k=${BASH_SOURCE#*.bashrc_}
[ "${j#*.bashrc_}" = "$k" ] || 3rdparty.add_program "$k"
unset j k
return 0
# vim: expandtab:ts=4:sw=4