簡體   English   中英

在Java中以編程方式設置Linux環境變量

[英]Set Linux environment variable programmatically in Java

我可以通過RunTime類運行Linux命令。 有沒有辦法以編程方式從Java設置Linux全局環境?

我想通過Java模擬以下Linux命令語句

root@machine:/tmp# export TEST=v2

我已經使用了ProcessBuilder,但是TEST變量沒有改變。

ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c","export TEST=v3" + "&& exec");

更新:實際上我的最終目標是使用EMAIL_NAME環境作為電子郵件地址,當我的應用程序和計算機都啟動並停止時,這些操作將發送給EMAIL_NAME。 在這種情況下,我理解不可能在純Java代碼上設置linux全局環境。 所以我有一個解決方案是EMAIL_NAME將保存在一個文件中,它將被linux腳本或java代碼更新或讀取。

設置環境變量時,僅適用於設置變量的進程生成的進程,因此,如果您確實要求設置一個影響整個系統的變量,那么不。 你不能在Linux中以交互方式真正做到這一點。 您可以做的最好的事情是更改其中一個系統啟動文件以包含所述變量,以便將來執行的任何操作都包含該變量。

如果您只是想使用一些變量集來運行多個進程,那么ProcessBuilder允許您為使用它生成的進程設置環境 為這幾個進程重用一個環境非常簡單。

當你說“Linux全球環境”時,你的意思是Linux環境變量嗎? 如果是這樣,我認為答案是否定的。 因為它不是java問題。 當進程設置環境var時,它只會影響自身及其子進程。

您可以通過java將變量更新到/ etc / profile中

if(System.getProperty("TEST", "").equalsIgnoreCase(""))
{
    Runtime.getRuntime().exec(new String[]{"bash","-c" ,"echo 'export TEST=v2' >> /etc/profile"}) ;

    /// Also update the System Variable for current process
    System.setProperty("TEST","v2") ;
}

這將在下次登錄時生效,或者如果您明確地獲取它。

我在bash中使用這行代碼

echo -e PATH=\"/usr/lib/jvm/java-7-openjdk-i386/bin:\$PATH\" >> $HOME/.profile

連接本地用戶的路徑

暫無
暫無

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

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