为什么我的环境变量被错误地处理为 JVM 选项?
Why is my environment variable incorrectly processed as a JVM option?
我想在执行时使用环境变量作为 JVM 选项 java -jar
。
我要执行的命令:
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
命令似乎忽略了 'echo test' 周围的引号。
在查找类似问题后 on SO and 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'
选项移动到环境变量中吗?
当运行java时,应该引用$OOM
示例:
java "$OOM" -jar foo.jar
请参阅 Unix stackexchange 上的 Why does my shell script choke on whitespace or other special characters? 了解为什么需要这样做。
我想在执行时使用环境变量作为 JVM 选项 java -jar
。
我要执行的命令:
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
命令似乎忽略了 'echo test' 周围的引号。
在查找类似问题后 on SO and 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'
选项移动到环境变量中吗?
当运行java时,应该引用$OOM
示例:
java "$OOM" -jar foo.jar
请参阅 Unix stackexchange 上的 Why does my shell script choke on whitespace or other special characters? 了解为什么需要这样做。