Files
apLukov/roles/gekmihesg.openwrt/library/openwrt_command.sh
2024-10-30 01:50:38 +01:00

64 lines
1.6 KiB
Bash

#!/bin/sh
# Copyright (c) 2021 Markus Weippert
# GNU General Public License v3.0 (see https://www.gnu.org/licenses/gpl-3.0.txt)
PARAMS="
cmd=raw_params=_raw_params/str/r
uses_shell=_uses_shell/bool//false
chdir/str
executable/str
creates/str
removes/str
"
RESPONSE_VARS="
start end delta cmd
stdout/str/a stderr/str/a rc/int/a
"
SUPPORTS_CHECK_MODE=""
init() {
stdout=""
stderr=""
start=""
end=""
delta=""
rc="0"
[ -n "$executable" ] || executable="/bin/sh"
out="$(mktemp)" && err="$(mktemp)"
}
main() {
local ts_start ts_end s_delta
[ -z "$chdir" ] || try cd "$chdir"
[ -z "$creates" ] || ! ls -d -- $creates >/dev/null 2>/dev/null || {
stdout="skipped, since $creates exists"; exit 0
}
[ -z "$removes" ] || ls -d -- $removes >/dev/null 2>/dev/null || {
stdout="skipped, since $removes does not exist"; exit 0
}
ts_start="$(date +%s)"
[ -z "$uses_shell" ] && {
echo "$cmd" | xargs sh -c 'exec "$@"' -- >"$out" 2>"$err"; rc=$?; :
} || {
"$executable" -c "$cmd" >"$out" 2>"$err"; rc=$?; :
}
ts_end="$(date +%s)"
s_delta=$((ts_end - ts_start))
start="$(date -d "@$ts_start" "+%Y-%m-%d %H:%M:%S").000000"
end="$(date -d "@$ts_end" "+%Y-%m-%d %H:%M:%S").000000"
delta="$(printf "%d:%.2d:%.2d.000000" \
$((delta / 3600)) $((delta % 3600 / 60)) $((delta % 60)))"
stdout="$(cat "$out")"
stderr="$(cat "$err")"
changed
test "$rc" -eq 0 || fail "non-zero return code"
return 0
}
cleanup() {
rm -f -- "$out" "$err"
}