#!/usr/bin/env bash set -euo pipefail die() { echo "monsys-smart: $*" >&2; exit 64; } SMARTCTL="$(command -v smartctl || true)" [[ -n "$SMARTCTL" ]] || die "smartctl not installed" verb="${1:-}" case "$verb" in scan) exec "$SMARTCTL" --scan-open -j ;; read) dev="${2:-}" [[ "$dev" =~ ^/dev/(sd[a-z]{1,3}|hd[a-z]|vd[a-z]|xvd[a-z]|nvme[0-9]{1,2}n[0-9]{1,2}|mmcblk[0-9]{1,2})$ ]] \ || die "device not allowed: $dev" # smartctl exit code is a bitmask: failing-disk bits (3+) still come # with valid JSON on stdout. Pass output through, mask the exit code. "$SMARTCTL" -a -j -- "$dev" || true ;; *) die "usage: monsys-smart scan | read /dev/" ;; esac