簡體   English   中英

使用 Java ProcessBuilder,如何運行位於 unix 主目錄中的進程?

[英]Using Java ProcessBuilder, how do I run a process located in a unix home directory?

我們有一個 Java 服務器-客戶端應用程序,它允許我們在不同的機器(即客戶端)上運行進程,這些進程由 Java ProcessBuilder啟動。 我想運行一個進程,該進程將被復制/同步到用戶的主目錄(即啟動客戶端的用戶)。

如何在傳遞給ProcessBuilderString中引用 unix 主目錄? (由於服務器-客戶端應用程序的設計,只有進程的字符串、參數等被傳遞給 ProcessBuilder。)

如果我明確說明主目錄,它會起作用:

  • /home/user/processes/process.sh

但是,這假設我知道哪個用戶正在運行客戶端。 (設計的一部分是我們可以切換/替換盒子/客戶端來運行作業,而不必知道誰在給定的盒子上啟動了客戶端。)

我也試過,但無濟於事:

  • $HOME/processes/process.sh
  • ~/processes/process.sh

問題是 ~ 和 $HOME 只能被你的 shell 理解,可能是 BASH,而不是 ProcessBuilder 或 Java。

$HOME 應該可以通過屬性user.home 請參閱系統屬性文檔

String home = System.getProperty("user.home");

IE

File fullpath = new File(System.getProperty("user.home"), "processes/process.sh");
ProcessBuilder processBuilder = new ProcessBuilder(fullpath.getAbsolutePath());

或者可以相對於當前目錄調用它

ProcessBuilder processBuilder = new ProcessBuilder("processes/process.sh");
processBuilder.directory(new File(System.getProperty("user.home")));

最后,我采用的方法是將腳本及其參數傳遞給 bash - 沿着以下幾行:

ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "$HOME/processes/process.sh args");

自己沒有嘗試過,但應該可以:

改成home之前然后執行process.sh

cd && ./processes/process.sh

在命令行中, $HOME~都被 shell 擴展到用戶的主目錄。

ProcessBuilder在沒有外殼的情況下直接運行進程,因此這些擴展將不起作用。

暫無
暫無

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

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