-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommon
executable file
·104 lines (90 loc) · 2.07 KB
/
common
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
#!/usr/bin/env bash
in_array() {
local value="$1" ; shift
for e in "$@" ; do
if [[ "$value" == "$e" ]] ; then
return 0
fi
done
return 1
}
cp_array() {
local _a="$1[i]" _b="$2[i]" _na i
eval "_na=\${!$1[@]} ; $2=()"
for i in $_na ; do
eval "$2[i]=\${!_a}"
done
}
cmp_array() {
local _a="$1[i]" _b="$2[i]" _na _nb i
eval _na=\${!$1[@]} _nb=\${!$2[@]}
for i in $_na $_nb ; do
[[ "${!_a}" = "${!_b}" ]] || return 1
done
}
join_array() {
local delim="$1" ; shift
result="$1" ; shift
for e in "$@" ; do
result+="$delim$e"
done
echo -n "$result"
}
check_basename() {
if [[ -z "$basename" ]] ; then
failwith "no basename given" 1
fi
}
get_link_target() {
target="$1"
while next_target="$(readlink -n "$target")" ; do
target="$(dirname "$target")/$next_target"
done
LINK_TARGET="$target"
}
# Exists immediately, writing an error message.
# $1: error message
# $2 ?: exit code
failwith() {
local exit_code=${2:-$?}
echo "$PROGRAM_NAME: $1" >&2
return $exit_code
}
on_exit() {
local exit_status=${1:-$?}
if (( $exit_status != 0 )) ; then
failwith "fatal error occurred"
exit $FATAL_ERROR_CODE
else
return 0
fi
}
trap_exit_on() {
trap on_exit EXIT
}
trap_exit_off() {
trap - EXIT
}
# Appends a command to a trap.
# $1: command to run on trap
# $2...: names of traps to modify
trap_add() {
trap_add_cmd=$1; shift || echo "${FUNCNAME} usage error" >& 2
for trap_add_name in "$@"; do
trap -- "$(
extract_trap_cmd() { printf '%s\n' "$3"; }
printf '%s\n' "${trap_add_cmd}"
eval "extract_trap_cmd $(trap -p "${trap_add_name}")"
)" "${trap_add_name}" \
|| failwith "unable to add to trap ${trap_add_name}"
done
}
declare -f -t trap_add
PROGRAM_NAME="$(basename -- "$0")"
SCRIPT_PATH="$(get_link_target "${BASH_SOURCE[0]}")"
SCRIPT_NAME="$(basename "$SCRIPT_PATH")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
FATAL_ERROR_CODE=${FATAL_ERROR_CODE:-1}
init_func_command() {
PROGRAM_NAME="${FUNCNAME[1]}"
}