gpt4 book ai didi

java - 无法使用 Runtime.exec() 在 Android Java 代码中执行 shell 命令 "echo"

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:53 25 4
gpt4 key购买 nike

我可以使用 Runtime.exec() 来执行 shell 命令,如“getprop”和“ls system”,它们工作正常。

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

logcat 显示:

I/AndroidRuntime( 4453): VM exiting with result code -1.

这是我的代码:

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();
}

最佳答案

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

String[] cmdline = { "sh", "-c", "echo $BOOTCLASSPATH" }; 
Runtime.getRuntime().exec(cmdline);

关于java - 无法使用 Runtime.exec() 在 Android Java 代码中执行 shell 命令 "echo",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com