在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命令来禁用通配符,要注意setopt命令只能在交互式shell中使用,而不是在脚本中使用。当然也可以在~/.zshrc中进行配置


继续写, 一般都需要在~/.zshrc中配置, 那用户说了, 我不想这样配置, 就想在脚本中实现怎么办?
那就来分析一下这个问题的本质, 就是我们使用了/lib/*, 如果你把每一个jar拼装起来, 倒也没有这个问题了

for d in /abc/../lib/*.jar; do
    CLASSPATH="$CLASSPATH:$d"
done
CLASSPATH="${CLASSPATH#:}"

注意把多出来的符号去掉


supermassive
1 声望1 粉丝