惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Y
Y Combinator Blog
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
M
MIT News - Artificial intelligence
博客园 - Franky
V
Visual Studio Blog
I
InfoQ
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园 - 司徒正美
L
LangChain Blog

慕雪的寒舍

【Linux】腾讯云服务器被攻击后,我是怎么排查挖矿木马的 【Agent】Multica使用心得 【AI】叙界S3备份需求,多Agent赛马 【Nginx】使用OpenResty Lua拦截Artalk广告昵称 【AI】给Codex加上rm防误删Hook 【AI】渐进式披露能省Token,但要管住Agent Loop 【Mac】修改Mac的hostname,告别局域网IP乱入 【随笔】招商银行visa金卡申请和绑定海外谷歌账户支付 【工具】用AI随手写博客 【Appium】安装 xcuitest 驱动时 npm install 报错的解决方法 【2026】新年快乐! 【Mac】解决MacBook WiFi玄学问题“连上WiFI但是没网络”的折腾经历 【AI】智谱AutoGLM部署教程:AutoDL云服务器+本地PhoneAgent配置 【Agent.10】OpenAI接口输出格式约束(response_format) 【Agent.09】LangChain里面使用MCP工具 【Hexo】简单记录如何在服务器上部署hexo-friend-article 【ConfyUI】在MacBook上用ConfyUI部署阿里Z-Image最新开源模型 【AI】AI老是喜欢写总结文档,咋办? 【Agent.08】LangChain的第一个Demo:从零开始构建Agent 【Mac】MacBookPro无法连接第2个外接显示器问题解决 【Mac】为Mac配置基本开发环境 【Agent.07】什么是Agent?从Chat到ReAct的AI进化之路 【Agent.06】使用openai sdk实现多轮对话 【Agent.05】OpenAI接口Function Calling工具调用详解 【MCP】无敌了,chrome-devtools-mcp杀死浏览器AI自动化的比赛! 【随笔】本地部署AI的现状和AI本地部署的价值
【测开】adb shell am start 启动跳链时 & 符号被截断的解决方法
慕雪年华 · 2026-04-24 · via 慕雪的寒舍

本文部分内容由 AI 辅助生成,请结合实际情况判断参考。

用 adb 起跳链测试,链接带 & 参数时命令被截断——记录一下正确写法。

1.起因

最近在做 deeplink 跳转的测试,需要用 adb 直接拉起一个带参数的跳链,类似这样:

1
adb shell am start -d "myapp://home?from=test&tab=2" -a android.intent.action.VIEW

结果 App 收到的参数不对,一看日志,发现 tab=2 整个都没有传进去,跳链在 & 那里就断了。

然后我想着,这是 shell 特殊字符的问题,加个单引号把跳链包起来不就完了:

1
adb shell am start -d 'myapp://home?from=test&tab=2' -a android.intent.action.VIEW

还是不行,照样截断。

2.原因

这里有两层 shell 在处理命令:

  1. 本机的 shell(你的终端,zsh/bash)
  2. 设备上的 shell(adb 连进去之后的 Android shell)

adb shell 后面跟的命令,会先经过本机 shell 解析一遍,再传给设备 shell 执行。& 在 shell 里是后台运行的特殊符号,本机 shell 一看到它就直接把命令切断了,压根轮不到设备那边去处理。

只把跳链用单引号包起来,保护的只是跳链这个字符串,而 adb shell 本身的参数传递还是经过了本机 shell 的解析,所以没用。

3.解决

有两种方式可以解决这个问题。

方式一:单引号包住整个命令,跳链改用双引号

1
2
3
4
5

adb shell am start -d 'myapp://home?from=test&tab=2' -a android.intent.action.VIEW


adb shell 'am start -d "myapp://home?from=test&tab=2" -a android.intent.action.VIEW'

这样本机 shell 看到外层的单引号,会把里面的内容原封不动地整体传给 adb shell& 就不会被截断了。设备上的 shell 收到完整命令之后,再去解析里面的双引号和参数,一切正常。

方式二:echo 管道传给 adb shell

1
echo 'am start -d "myapp://home?from=test&tab=2" -a android.intent.action.VIEW' | adb shell

echo 把命令字符串原样输出,通过管道 | 直接送进 adb shell 的标准输入执行,本机 shell 只负责跑 echo,不会再去解析后面的内容,& 自然也就安全了。

两种方式效果一样,方式二在命令特别长的时候可读性稍好一点,随喜好选用。

The end

这个坑比较隐蔽,因为报错不明显——App 不会崩,只是参数悄悄丢了,定位起来挺费劲的。以后只要跳链里带 &,直接按正确写法来就行了。

有问题欢迎评论区交流!