我遇到了一个问题,我可以在bash
中使用代理设置运行java,但不能在zsh中运行。
为了运行jar,我首先使用env变量设置我的代理设置:
export JAVA_OPTS="-Dhttp.proxyHost=my.proxy.org -Dhttp.proxyPort=80 -Dhttps.proxyHost=my.proxy.org -Dhttps.proxyPort=80 -DsocksProxyHost=my.proxy.org -DsocksProxyPort=80"
然后我用以下
运行jarjava $JAVA_OPTS -jar path/to/file.jar
它在bash
中成功运行,但在zsh
运行时,它无法识别代理设置,并且在尝试建立网络连接时失败。
任何人都知道我如何解决这个问题才能使用zsh
?
答案 0 :(得分:2)
zsh与bash的分词方式不同。我认为您需要明确表示要拆分它。考虑一下,它就像一个bash引用变量
$ export JAVA_OPTS="-Dhttp.proxyHost=my.proxy.org -Dhttp.proxyPort=80 -Dhttps.proxyHost=my.proxy.org -Dhttps.proxyPort=80 -DsocksProxyHost=my.proxy.org -DsocksProxyPort=80"
$ printf ">%s<\n" $JAVA_OPTS
>-Dhttp.proxyHost=my.proxy.org -Dhttp.proxyPort=80 -Dhttps.proxyHost=my.proxy.org -Dhttps.proxyPort=80 -DsocksProxyHost=my.proxy.org -DsocksProxyPort=80<
与此
$ printf ">%s<\n" ${=JAVA_OPTS}
>-Dhttp.proxyHost=my.proxy.org<
>-Dhttp.proxyPort=80<
>-Dhttps.proxyHost=my.proxy.org<
>-Dhttps.proxyPort=80<
>-DsocksProxyHost=my.proxy.org<
>-DsocksProxyPort=80<
请参阅:man zshexpn
答案 1 :(得分:1)
通常,您应该使用数组,特别是如果您实际上并不依赖于环境中的变量。
java_opts=(
-Dhttp.proxyHost=my.proxy.org
-Dhttp.proxyPort=80
-Dhttps.proxyHost=my.proxy.org
-Dhttps.proxyPort=80
-DsocksProxyHost=my.proxy.org
-DsocksProxyPort=80
)
java "${java_opts[@]}" -jar path/to/file.jar