首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Runtime.exec:為什麼 ll 指令失效?

     編輯:程式設計疑難解答

現象:ls 正常,ll 拋出 IOException


String cmd = "ll";
Process process = Runtime.getRuntime().exec(cmd);
// java.io.IOException: Error running exec(). Command: [ll]

原因:ll 不是獨立可執行檔,是 Shell 別名

  • ls:/system/bin/ls 真實二進位檔。
  • ll:通常定義於 ~/.bashrc 或 /etc/profile 中的 alias ll='ls -l',**僅在互動式 Shell 有效**。
  • Runtime.exec() **不啟動 Shell**,直接呼叫 execve,找不到 ll 執行檔 → 失敗。

解決方案

  1. 直接用標準參數:String cmd = "ls -l";(推薦,跨平台)。
  2. 明確呼叫 Shell:
    
    String[] cmd = {"/system/bin/sh", "-c", "ll"};
    Process process = Runtime.getRuntime().exec(cmd);
    

    但 Android 預設 Shell 可能不載入使用者別名,仍可能失效。

最佳實踐:避免依賴 Shell 別名

需求指令說明
詳細列表ls -lPOSIX 標準,所有 Unix-like 通用
顯示隱藏檔ls -a標準參數
人類可讀大小ls -lhGNU coreutils 擴充,BusyBox 可能不支援 -h

補充:讀取輸出流的正確姿勢


try (BufferedReader reader = new BufferedReader(
        new InputStreamReader(process.getInputStream()))) {
    String line;
    while ((line = reader.readLine()) != null) {
        Log.i("CMD", line);
    }
}

結論:Android 無 ll 指令,請用 ls -l。不要假設桌面 Linux 的別名在 Android 存在。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved