You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本的adb shell内执行命令?am broadcast执行异常求助

解决adb shell外部执行am broadcast命令无效问题

问题原因

核心问题是外部Shell对命令中的JSON字符串进行了不必要的转义解析,导致最终传入adb shell的命令和你在adb内部直接执行的内容不一致。原命令中的引号和JSON结构在外部Shell环境下被拆分,使得am broadcast无法正确识别参数。

解决方案

以下是几种可靠的修复方式,可按需选择:

方法1:用单引号包裹完整adb shell命令

将整个需要在adb内部执行的命令用单引号包裹,阻止外部Shell解析内部的引号和JSON结构。注意内部的单引号需要用'\''转义:

adb shell 'am broadcast -a amazon.speech.ROUTE_DIRECTIVE --es directive '\''{"directive": {"header": {"namespace": "Alexa.Networking.WiFi","name": "GetProfiles","messageId": "123e4567-e89b-12d3-a456-426652350006","correlationToken": "1234"},"payload": {}}}'\'''

方法2:通过临时脚本执行

把am broadcast命令写入临时脚本,推送到设备后执行,完全规避外部Shell的转义问题:

# 创建本地临时脚本
cat > broadcast_cmd.sh << 'EOF'
am broadcast -a amazon.speech.ROUTE_DIRECTIVE --es directive '{"directive": {"header": {"namespace": "Alexa.Networking.WiFi","name": "GetProfiles","messageId": "123e4567-e89b-12d3-a456-426652350006","correlationToken": "1234"},"payload": {}}}'
EOF

# 推送到设备并执行
adb push broadcast_cmd.sh /data/local/tmp/
adb shell chmod +x /data/local/tmp/broadcast_cmd.sh && adb shell /data/local/tmp/broadcast_cmd.sh

# 清理临时文件
adb shell rm /data/local/tmp/broadcast_cmd.sh
rm broadcast_cmd.sh

方法3:修改原脚本

将原脚本中的am broadcast行替换为方法1的命令,完整脚本如下:

#!/bin/bash
echo
adb shell wpa_cli list_n all
sleep 2
echo 
adb shell 'am broadcast -a amazon.speech.ROUTE_DIRECTIVE --es directive '\''{"directive": {"header": {"namespace": "Alexa.Networking.WiFi","name": "GetProfiles","messageId": "123e4567-e89b-12d3-a456-426652350006","correlationToken": "1234"},"payload": {}}}'\'''
sleep 80
echo 
adb shell logcat -v time -b all | grep -i "getprofile"
sleep 10

内容的提问来源于stack exchange,提问作者Mambo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:50:25