Runtime.exec(String) 提供了一種從Java 程式執行系統指令的方法。然而,使用者可能會遇到執行結果的差異,某些命令成功,而其他命令失敗或行為異常。本文探討了這些異常的根本原因,並探討了可靠命令執行的替代方法。
指令在依賴所提供的基本服務時會失敗通過 shell,Runtime.exec(String) 不使用 shell。這些服務包括:
只要使用上述任何 shell 功能,指令就會失敗。常見場景包括:
-帶有空格或特殊字元的檔案名稱
-通配符或通配符
-輸入/輸出重新導向
-環境變數或指令擴充
< ;h3>解決方案
存在兩種主要方法為了規避這些異常並可靠地執行命令:
委託給Shell(簡單但有缺陷):
一種選擇是將執行委託給shell,例如bash,它處理所有必要的服務。然而,這種方法可能會帶來安全風險並損害穩健性。
Shell 替換(安全且穩健):
更安全、穩健的方法是承擔 shell 的職責。這涉及了解 Unix 執行模型、shell 提供的服務以及如何以程式設計方式複製它們。 ProcessBuilder 提供了一種透過手動處理分詞、變數擴展和重定向來實現此目的的方法。
以上是為什麼 `Runtime.exec(String)` 失敗,如何在 Java 中可靠地執行系統指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!