為什麼 Runtime.exec(String) 對某些指令的行為不同?
Runtime.exec(String) 允許執行以下命令底層作業系統的環境。然而,雖然它對某些命令無縫工作,但其他命令會出現問題。
為什麼會有差異?
關鍵差異源自於命令不執行的事實在 shell 環境中。 shell 提供了 Runtime.exec(String) 未執行的基本服務,從而導致錯誤。
失敗何時發生?
指令在依賴時失敗關於shell 功能,例如:
解決方案
處理這種情況有兩種方法:
委託給Shell(簡單但草率):
將指令傳遞到shell(例如,使用Runtime.exec(String[])):
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog"; Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
承擔Shell 職責(安全與安全)健全):
使用ProcessBuilder來處理類似shell 的任務,例如變數擴展、重定向和分詞:
String myFile = "some filename.txt"; ProcessBuilder builder = new ProcessBuilder( "cp", "-R", myFile, System.getenv("HOME") ); builder.redirectError(ProcessBuilder.Redirect.to(new File("errorlog"))); builder.start();
以上是為什麼`Runtime.exec(String)`有時無法正確執行指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!