首頁 >Java >java教程 >如何使用Java執行時間可靠地執行Shell指令?

如何使用Java執行時間可靠地執行Shell指令?

Susan Sarandon
Susan Sarandon原創
2024-12-06 05:43:10555瀏覽

How Can I Reliably Execute Shell Commands with Java's Runtime?

在Java 運行時中操作Shell 行為

使用Java 的Runtime.exec(String) 實用程式時,執行某些shell 命令之間可能會出現差異。要理解這些異常,我們必須深入研究 shell 操作的機制。

了解Shell 職責

Shell 執行支援指令執行的關鍵任務,包括:

  • 報價和空間處理: Shell 確保準確解析參數,防止空格破壞「My File.txt」等字串。
  • Glob 擴充: 在執行之前,Glob (*, ?) 會擴充為特定檔名。
  • 重新導向管理: Shell 管理指令輸出的管道 (|) 和重新導向 (>)和輸入。
  • 變數和命令擴展:可以擴展 $HOME 等變量,可以執行 $(pwd) 等命令並將其插入命令字串中。

執行原因失敗

透過Runtime.exec(String) 呼叫時,依賴Shell 的指令可能會失敗,因為:

  • 缺乏Shell 功能: Runtime.exec (String)執行指令時不呼叫shell,這表示它缺少shell 的處理

解決方法

簡單但不完美:

使用Runtime.exec(String[]) 和將指令傳遞給shell解釋器允許直接命令執行:

String myFile = "some filename.txt";
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog";
Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });

穩健且安全:

為了提高安全性和穩健性,請使用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();

以上是如何使用Java執行時間可靠地執行Shell指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn