我想在执行java -jar
时使用环境变量作为JVM选项。
我想执行它的命令:
java -XX:onOutOfMemory='echo test' -jar foo.jar
当我按原样运行上述命令时,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
命令忽略了“回声测试”周围的引号。
在查找类似问题on SO和on other websites之后,我尝试了使用引号的各种变体:
OOM="-XX:OnOutOfMemoryError=\"echo test\""
OOM='-XX:OnOutOfMemoryError="echo test"'
OOM=-XX:OnOutOfMemoryError="echo test"
但它们都会导致同样的错误。
关于JVM选项的An article from Oracle,提到使用分号:
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
但分号的目的是分隔多个命令,而不是命令和参数。所以这不能解决我的问题。
有人知道如何正确地将-XX:onOutOfMemory='echo test'
选项移动到环境变量中吗?
答案 0 :(得分:2)
运行java时,应引用$OOM
示例:
java "$OOM" -jar foo.jar
请参阅Unix stackexchange上的Why does my shell script choke on whitespace or other special characters?了解为什么需要这样做。