Android执行带有通配符的shell命令


我在Android中使用getRuntime.exec()来执行一些shell命令并处理输出。其中存在一些命令,我的程序没有给出任何输出且给出了错误提示"No such file or directory",但相同的命令在命令提示符下输出了正确结果。

示例

我在查询所插入的Android USB速率与协议时,所有USB设备节点可以在/sys/bus/usb/devices下对比找到。

1、比如shell下查询USB速率信息。
在这里插入图片描述

2、通过代码Runtime.getRuntime().exec()查询

Process p = Runtime.getRuntime().exec("find ./sys/bus/usb/devices/usb*/ -name speed");

此时运行报错:No such file or directory

3、因为shell命令中的一些符号比如*, ?, >, < , | 是通过/bin/sh -c来做解释后再传递给所调用的命令的,但对于java的Process来说,不会识别这些符号,因此我们必须强制调用/bin/sh -c来帮我们做符号解释:

String cmd = "find ./sys/bus/usb/devices/usb*/ -name speed";
String[] cmdArray = {"/bin/sh", "-c", cmd};//解决shell命令*通配符不识别问题
Process p = Runtime.getRuntime().exec(cmdArray);

4、平台适配:移植到另一个MTK平台时出现了报错:java.io.IOException: Cannot run program “/bin/sh”: error=13, Permission denied…
看log是找不到/bin/sh解释器,发现系统所用的解释器路径变成/system/bin/sh了。java层也适配修改一下路径即可解决。

5、参考链接:https://www.itguest.com/post/djjgbf2b4.html

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值