osi-tools/lib/osi.sh

67 lines
961 B
Bash

#!/hint/bash
# 2018 Luke Shumaker
print() {
# shellcheck disable=SC2059
printf "$(gettext -- "$1")\\n" "${@:2}"
}
error() {
local msg
msg="$(print "${@:2}")"
printf '%s: %s\n' "${0##*/}" "$msg" >&2
if (( $1 != 0 )); then
exit "$1"
fi
}
in_array() {
local needle=$1
local straw
for straw in "${@:2}"; do
if [[ $needle = "$straw" ]]; then
return 0
fi
done
return 1
}
is_sudo() {
(( UID == 0 && ${SUDO_UID:-0} != 0 ))
}
is_root() {
(( UID = 0 ))
}
needs_sudo() {
if ! is_sudo; then
error 4 "Must be invoked through sudo."
fi
}
needs_root() {
if ! is_root; then
error 4 "Must be invoked as root."
fi
}
become_sudo() {
if is_sudo; then
return 0
fi
if is_root; then
needs_sudo
fi
sudo "${BASH_SOURCE[0]}" "$@"
}
with_mount() {
arg_device=$1
arg_mountpoint=$2
arg_cmd=("${@:3}")
needs_root
unshare --mount sh -c "mount --make-rslave / && mount -- ${arg_device@Q} ${arg_mountpoint@Q} && exec -- ${arg_cmd[@]@Q}"
}