簡體   English   中英

無法使用Runtime.exec()在Android Java代碼中執行shell命令“echo”

[英]Unable using Runtime.exec() to execute shell command “echo” in Android Java code

我可以使用Runtime.exec()來執行像“ getprop ”和“ ls system ”這樣的shell命令,它們工作正常。

但是,當我使用“ echo $BOOTCLASSPATH ”,“ echo \\\\$BOOTCLASSPATH ”或“ echo HelloWorld ”時,它不會在stdout中顯示它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM