gpt4 book ai didi

java - 为什么我的环境变量被错误地处理为 JVM 选项?

转载 作者:行者123 更新时间:2023-11-30 08:41:27 25 4
gpt4 key购买 nike

我想在执行 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 命令忽略了“echo test”周围的引号。

查找类似问题后on SOon 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

参见 Why does my shell script choke on whitespace or other special characters?在 Unix stackexchange 上了解为什么需要这样做。

关于java - 为什么我的环境变量被错误地处理为 JVM 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35080460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com