/
bashsubimp.shlib
executable file
·117 lines (105 loc) · 2.8 KB
/
bashsubimp.shlib
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
###################
# bashimp.shlib v0.2.0
#
# @author RuneImp <runeimp@gmail.com>
# @licenses http://opensource.org/licenses/MIT
#
#####
# ChangeLog:
# ----------
# 2016-04-30 0.2.0 Updated app references
# 2016-04-29 0.1.0 Initial script creation
#
#
[[ "x$APP_NAME_CLI" = "x" ]] && echo "APP_NAME_CLI is undefined" 1>&2
[[ "x$APP_NAME_APP" = "x" ]] && echo "APP_NAME_APP is undefined" 1>&2
[[ "x$CMD_PREFIX" = "x" ]] && CMD_PREFIX="${APP_NAME_CLI}-"
[[ $DEFAULT_LIST_SUBCOMMANDS != 1 ]] && declare -i DEFAULT_LIST_SUBCOMMANDS=0
declare -i EXIT_NO_COMMAND=1
declare -i EXIT_NO_SUBCOMMAND_FOUND=2
declare -i EXIT_NO_SUBCOMMANDS_FOUND=3
declare cmd=""
declare cmd_name="$1"; shift;
declare -i fast_basename=1
[[ "x$MSG_SUBCOMMAND_NOT_GIVEN" = 'x' ]] && declare MSG_SUBCOMMAND_NOT_GIVEN='ERROR: No command specified'
[[ "x$MSG_SUBCOMMAND_NOT_FOUND" = 'x' ]] && declare MSG_SUBCOMMAND_NOT_FOUND="WARNING: '$cmd_name' not available as a $APP_NAME_CLI subcommand. Maybe you ment something else?"
# Testing for fast basename support
declare TMP='/path/to/trim/test.txt.gz'
TMP="${TMP##*/}"
if [[ "${TMP}" = 'test.txt.gz' ]]; then
fast_basename=0
fi
unset TMP
#
# FUNCTIONS
#
bashsubimp::error()
{
echo " $1" 1>&2
if [[ "x$2" != "x" ]]; then
exit $2
fi
}
bashsubimp::list_subcommands() {
declare filename=""
declare -i i=0
declare oldIFS="$IFS"
IFS=:
echo " $APP_NAME_APP Commands:"
printf " %-12s %s\n" list "List all subcommands."
printf " %-12s %s\n" version "Display application version number only."
printf " %-12s %s\n" Version "Display application label with version number."
while read -r path
do
IFS="$oldIFS"
for filename in $(ls "${path}/${CMD_PREFIX}"* 2> /dev/null); do
# echo "\$filename: $filename"
if [[ "${filename##*.}" != 'js' ]]; then
if [[ $fast_basename = 0 ]]; then
filename="${filename##*/}"
if [[ "${filename##*.}" = 'shlib' ]]; then
filename="${filename%.*}"
fi
filename="${filename#$CMD_PREFIX}"
else
filename="$(basename "$filename")"
filename="$(echo "$filename" | sed "s/^$CMD_PREFIX//")"
fi
echo " $filename"
fi
done
IFS=:
done <<< $(echo "$PATH" | tr ':' '\n')
IFS="$oldIFS"
}
#
# Subcommand Processing
#
case "$cmd_name" in
list)
bashsubimp::list_subcommands
exit 0
;;
version)
echo "$APP_VERSION"
exit 0
;;
Version)
echo "$APP_LABEL"
exit 0
;;
*)
cmd="${CMD_PREFIX}${cmd_name}"
if [[ "x$cmd_name" = "x" ]] && [[ $DEFAULT_LIST_SUBCOMMANDS != 1 ]]; then
bashsubimp::list_subcommands
elif [[ "$cmd" != "$CMD_PREFIX" ]]; then
if [[ $(type -t "$cmd" 2> /dev/null) = 'file' ]]; then
"$cmd" "$@"
else
bashsubimp::error "$MSG_SUBCOMMAND_NOT_FOUND" $EXIT_NO_SUBCOMMAND_FOUND
fi
else
bashsubimp::error "$MSG_SUBCOMMAND_NOT_GIVEN" $EXIT_NO_COMMAND
fi
;;
esac