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

shell脚本变量无法作为top命令参数问题求助

问题分析与解决:Android adb shell中top命令-p参数变量传递报错

报错原因

问题根源是脚本文件使用了DOS格式的换行符(CRLF)。在Windows环境下编辑的脚本,每行结尾会带有隐藏的\r(回车符),当在Android的adb shell(基于Unix环境)中执行脚本时,变量$pid会包含这个回车符,实际值是5889\r而非单纯的5889。

top命令解析参数时,会把5889\r当成一个整体,而回车符会让终端光标回到行首,覆盖部分命令内容,所以才会出现'op: bad -p '5889这种奇怪的报错信息。

echo命令看起来输出正常,是因为echo会将\r识别为换行操作,终端显示的是干净的PID数字,但变量内部的回车符依然存在。

解决方法

方法1:转换脚本换行符为Unix格式(LF)

  • 若用Notepad++编辑脚本:打开脚本后,点击「编辑」→「文档格式转换」→「转为Unix(LF)」,保存后重新推送到设备。
  • 若设备支持dos2unix工具,可直接在adb shell中执行:
    dos2unix data/gettop.sh
    

方法2:在脚本中过滤变量的回车符

修改PID赋值的行,用tr命令去除回车符:

#!/bin/bash
pid=$(pidof -s com.example.app | tr -d '\r')
echo $pid
top -o %CPU,%MEM -p $pid > /data/topresults.txt

或者用sed命令:

pid=$(pidof -s com.example.app | sed 's/\r$//')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:20:00