64 lines
1.6 KiB
Bash
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"
|
|
}
|