我想在執行java -jar
時使用環境變量作爲JVM選項。爲什麼我的環境變量作爲JVM選項被錯誤地處理?
我要執行它的命令:
java -XX:onOutOfMemory='echo test' -jar foo.jar
當我運行上面的命令是,罐子就會運行。
(如果您沒有foo.jar,您將收到Error: Unable to access jarfile foo.jar
錯誤,但這仍然意味着該選項得到正確使用)。
但是,當我創建一個包含JVM選項的環境變量,並使用該變量運行命令。
OOM="-XX:onOutOfMemory='echo test'"
java $OOM -jar foo.jar
總比我收到以下錯誤:
Error: Could not find or load main class test'
這似乎是java
命令被忽略了引號 'echo測試'。
尋找類似的問題on SO和on other websites後,我嘗試使用引號的各種變化:
OOM="-XX:OnOutOfMemoryError=\"echo test\""
OOM='-XX:OnOutOfMemoryError="echo test"'
OOM=-XX:OnOutOfMemoryError="echo test"
但他們都產生相同的錯誤。
An article from Oracle關於JVM選項,提及使用分號:
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
但分號的目的是爲了分隔多個命令,而不是命令和參數。所以這不能解決我的問題。
有誰知道我可以如何正確地將-XX:onOutOfMemory='echo test'
選項移動到環境變量中?
'回聲測試'並沒有真正的目的。我用它作爲例子。我想要執行的實際命令是:'kill -9%p'。 – Jipo