mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-15 04:53:00 +08:00
🎉 Sync 2026-10-14 03:01:37
This commit is contained in:
1 parent
57ac656612
commit
ef45574e85
78 files changed
+2683
-3911
No files matched your search
@@ -79,13 +79,43 @@ fi
|
||||
|
||||
# Fast path: Prioritize native sms_tool engine if installed (zero echo loop, robust termios)
|
||||
if command -v sms_tool >/dev/null 2>&1; then
|
||||
if [ -n "$SMS_TO" ]; then
|
||||
OUT=$(sms_tool -d "$DEVICE" -b "$BAUDRATE" send "$SMS_TO" "$SMS_MSG" 2>&1)
|
||||
RC=$?
|
||||
TMP_OUT="/tmp/at_sms_$$.tmp"
|
||||
TMP_DONE="/tmp/at_sms_$$.done"
|
||||
rm -f "$TMP_OUT" "$TMP_DONE"
|
||||
|
||||
(
|
||||
if [ -n "$SMS_TO" ]; then
|
||||
sms_tool -d "$DEVICE" -b "$BAUDRATE" send "$SMS_TO" "$SMS_MSG" > "$TMP_OUT" 2>&1
|
||||
else
|
||||
sms_tool -d "$DEVICE" -b "$BAUDRATE" at "$COMMAND" > "$TMP_OUT" 2>&1
|
||||
fi
|
||||
echo $? > "$TMP_DONE"
|
||||
) &
|
||||
CHILD_PID=$!
|
||||
|
||||
elapsed=0
|
||||
while [ $elapsed -lt "$TIMEOUT" ]; do
|
||||
if [ -f "$TMP_DONE" ] || ! kill -0 "$CHILD_PID" 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
elapsed=$((elapsed + 1))
|
||||
done
|
||||
|
||||
if [ ! -f "$TMP_DONE" ] && kill -0 "$CHILD_PID" 2>/dev/null; then
|
||||
kill -9 "$CHILD_PID" 2>/dev/null || true
|
||||
for p in $(pgrep -f "sms_tool.*$DEVICE" 2>/dev/null); do
|
||||
kill -9 "$p" 2>/dev/null || true
|
||||
done
|
||||
RC=124
|
||||
OUT="ERROR: Command timed out after ${TIMEOUT}s"
|
||||
else
|
||||
OUT=$(sms_tool -d "$DEVICE" -b "$BAUDRATE" at "$COMMAND" 2>&1)
|
||||
RC=$?
|
||||
wait "$CHILD_PID" 2>/dev/null
|
||||
RC=$(cat "$TMP_DONE" 2>/dev/null || echo 0)
|
||||
OUT=$(cat "$TMP_OUT" 2>/dev/null)
|
||||
fi
|
||||
rm -f "$TMP_OUT" "$TMP_DONE"
|
||||
|
||||
flock -u 9 2>/dev/null || true
|
||||
CLEAN_OUT=$(echo "$OUT" | tr -d "\r")
|
||||
if [ $RC -eq 0 ] && ! echo "$CLEAN_OUT" | grep -qE "ERROR|\+CME ERROR|\+CMS ERROR"; then
|
||||
@@ -100,6 +130,14 @@ if command -v sms_tool >/dev/null 2>&1; then
|
||||
fi
|
||||
exit 0
|
||||
else
|
||||
case "$COMMAND" in
|
||||
*CFUN=1,1*|*CFUN=16*|*QPOWD*)
|
||||
if ! echo "$CLEAN_OUT" | grep -qE "ERROR|\+CME ERROR|\+CMS ERROR"; then
|
||||
[ -z "$CLEAN_OUT" ] && echo "OK" || echo "$CLEAN_OUT"
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
echo "$CLEAN_OUT"
|
||||
exit ${RC:-1}
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user