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

Android已root设备su -c携带参数执行命令失败如何解决

问题成因

Android平台root方案提供的su二进制(Magisk/SuperSU等)对-c参数的解析遵循标准Unix规则:-c后仅接收一个完整字符串作为待执行的命令内容,后续所有输入不会被自动识别为该命令的参数,而是会被传入su自身的参数解析逻辑,因无法匹配合法参数触发执行失败。
你测试的三个现象完全匹配这个规则:

  • 进入su交互模式后直接执行echo "gg",所有参数都直接传给root身份运行的shell,可正常执行
  • 普通用户下执行su -c echo时,echo是-c后唯一的字符串,su可以正常调用echo命令,无报错
  • 执行su -c echo "gg"时,当前shell会先把命令拆分为su、-c、echo、gg四个独立段,gg没有被归属为echo的参数,su收到多余的非法参数后直接返回[-] Execute command failed错误。
排查方向
  • 确认su实现版本:执行su -v查看当前su是Magisk、SuperSU还是其他root方案提供,不同实现的参数兼容逻辑有细微差异
  • 验证参数边界:分别执行su -c 'echo test1'和su -c echo test2,如果前者能正常输出test1、后者报错,即可确认是参数传递时的边界识别问题
  • 确认当前shell类型:执行echo $0查看终端模拟器默认使用的是mksh、sh还是bash,部分精简shell存在提前转义、吞掉参数的问题,会干扰参数传递逻辑
解决方案

核心原则是:把需要root权限执行的完整命令(包含所有参数、操作符)作为一个整体字符串传给-c参数,根据场景选对应写法即可:

  • 命令内无单引号时,直接用单引号包裹完整命令:
su -c 'echo "gg"'
  • 命令内包含单引号时,用双引号包裹完整命令,内部双引号加反斜杠转义:
su -c "echo \"gg\""
  • 连续执行多条root命令时,把所有命令都放在同一个引号块内即可:
su -c 'echo "gg" && ls /data/local/tmp'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:45:29