在Zsh(Z-shell)终端中执行java带*的命令

在mac执行一个命令时

java -cp .:/release/bin/../conf:/release/bin/../lib/* com.ex.TestApplication

发现报错

zsh: no matches found: .:/release/bin/../conf:/release/bin/../lib/*

那么这是一个什么样的情况呢?
原因是在Zsh终端中,通配符(例如*)默认是开启的,这可能导致java命令中的类路径无法正确解析,可以通过执行setopt +o nomatch命令来禁用通配符,但是,如果脚本中添加了这一行, 在linux环境下, 又无法执行,怎么办呢?

if [ "$SHELL" = "/bin/zsh" ]; then
    echo "当前Shell解释器为Zsh"
    setopt +o nomatch
fi

可以通过上述代码来实现,在上述代码中,通过检查$SHELL环境变量的值是否为/bin/zsh来判断当前Shell是否为Zsh。当然, 这个方法适用于大多数情况, 但不是百分百准确的。

你可能感兴趣的:(java)