首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Runtime.exec()在Android Java代码中执行外壳命令"echo“

无法使用Runtime.exec()在Android Java代码中执行外壳命令"echo“
EN

Stack Overflow用户
提问于 2014-08-08 16:42:18
回答 1查看 22K关注 0票数 18

我可以使用Runtime.exec()来执行像"getprop“和"ls system”这样的外壳命令,它们工作得很好。

但是,当我使用"echo $BOOTCLASSPATH“、"echo \\$BOOTCLASSPATH”或"echo HelloWorld“时,它不会在标准输出中显示它。

logcat显示:

代码语言:javascript
复制
I/AndroidRuntime( 4453): VM exiting with result code -1.

下面是我的代码:

代码语言:javascript
复制
try {
    java.lang.Process proc = Runtime.getRuntime().exec("echo -e \\$BOOTCLASSPATH");
    String line = null;

    InputStream stderr = proc.getErrorStream();
    InputStreamReader esr = new InputStreamReader (stderr);
    BufferedReader ebr = new BufferedReader (esr);
    while ( (line = ebr.readLine()) != null )
        Log.e("FXN-BOOTCLASSPATH", line);

    InputStream stdout = proc.getInputStream();
    InputStreamReader osr = new InputStreamReader (stdout);
    BufferedReader obr = new BufferedReader (osr);
    while ( (line = obr.readLine()) != null )
        Log.i("FXN-BOOTCLASSPATH", line);

    int exitVal = proc.waitFor();
    Log.d("FXN-BOOTCLASSPATH", "getprop exitValue: " + exitVal);
} catch (Exception e) {
    e.printStackTrace();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 11:11:42

@Adi Tiwari,我找到原因了。Runtime.getRuntime.exec()不会直接执行外壳命令,它会使用参数执行可执行文件。"echo“是一个内置外壳命令。它实际上是带有选项-c的可执行文件sh的参数的一部分。像ls这样的命令是实际的可执行文件。您可以在adb shell中使用type echotype ls命令来查看差异。

所以最后的代码是:

代码语言:javascript
复制
String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" }; 
Runtime.getRuntime().exec(cmdline);
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25199307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档