带有标志的Java命令在bash中运行但不在zsh中运行

时间:2018-03-28 19:40:09

标签: java bash proxy zsh

我遇到了一个问题,我可以在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"

然后我用以下

运行jar
java $JAVA_OPTS -jar path/to/file.jar

它在bash中成功运行,但在zsh运行时,它无法识别代理设置,并且在尝试建立网络连接时失败。

任何人都知道我如何解决这个问题才能使用zsh

2 个答案:

答案 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