blob: 30e32ca526011e92dab58ca837349f7bd7283c06 (
plain)
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
|
#!/bin/sh
# Avoid using full paths instead only use the program names.
argv0=$(basename "${0}")
# @FUNCTION: err
# @USAGE: [-x] <message> ...
# @DESCRIPTION:
# Print given messages to stderr line by line and exit with status 1.
#
# If "-x" is specified, suppress the program prefix (`program: `)
# from the output. Otherwise, the first line is prefixed with "program: ".
#
# This function is intended for fatal errors; it always exits the script.
# @EXAMPLE:
# err "Invalid usage" "Try '${argv0} -h' for help."
err() {
if [ "${1}" != "-x" ]; then
printf "%s: " "${argv0}"
else
shift
fi
for line in "${@}"; do
echo "${line}" >&2
done
exit 1
}
# @FUNCTION: invalid_use
# USAGE: [-h]
# @DESCRIPTION:
# Output a usage error message. If `-h` is not specified output:
# "<program>: Invalid usage "
# "Try 'program -h' for help."
# else output only:
# "Try 'program -h' for help."
invalid_use() {
[ "${1}" = "-h" ] && err -x "Try '${argv0} -h' for help."
err "Invalid usage" "Try '${argv0} -h' for help."
}
# @FUNCTION: check_program
# USAGE: <command> [error-msg]
# @DESCRIPTION:
# Check if command exists on the system.
# If not, print an error message to stderr and exit with status 1.
# The default error message is "`command` must be installed"
# but can optionally be overwritten.
#
# @EXAMPLE:
# Check if pulseaudio is installed.
#
# check_program "pactl" "pulseaudio must be installed"
check_program() {
command -v "${1}" > /dev/null 2>&1 && return 0
[ -n "${2}" ] && err "${2}"
err "${1} must be installed"
}
# @FUNCTION: run
# USAGE: [--reload-status] <command> [success-msg] [failure-msg]
# @DESCRIPTION:
# Run the specified command and output success/failure message if provided.
# Optionally reload the status bar.
#
# Success messages are printed to stdout, failure messages are printed to stderr.
# To add a failure message a success message must also be present.
# The output of the command is not suppressed.
#
# @EXAMPLE:
# Run xwallpaper command if success print out ${image}:
#
# run "xwallpaper --zoom ${image}" "${image}"
run() {
relstat=0
if [ "${1}" = "--reload-status" ];then
relstat=1
shift
fi
if ${1}; then
[ -n "${2}" ] && echo "${2}"
else
[ -n "${3}" ] && err "${3}"
exit 1
fi
if [ "${relstat}" -eq 1 ]; then
slreload || echo "Warning: Failed to reload slstatus" >&2
fi
exit 0
}
|