Bash执行. ./setantenv.sh正常,ZSH报错= not found,求助
解决ZSH执行
. ./setantenv.sh时的= not found报错问题 这个报错的核心原因是ZSH和Bash对export命令的-p选项解析逻辑不同,你的脚本里误用了export -p来导出变量,这在Bash里能兼容,但ZSH会直接触发语法错误。
具体问题分析
脚本里的这些行是报错的根源:
export -p PLATFORM_HOME export -p ANT_OPTS="-Xmx400m -XX:MaxPermSize=128M" export -p ANT_HOME=$PLATFORM_HOME/apache-ant-1.9.1 export -p PATH=$ANT_HOME/bin:$PATH
export -p的正确作用是打印当前所有已导出的环境变量,并非用来导出新变量。Bash会宽松地忽略-p选项,直接执行变量导出操作,但ZSH严格遵循POSIX规范:当使用export -p时,它只会执行打印操作,后面跟着的变量赋值语句会被当成独立命令,进而导致解析=符号时出错。
另外,脚本里的if [ "$0" == "./$OWN_NAME" ];也存在小问题:POSIX标准的test命令(即[ ])只支持=作为字符串比较运算符,==是Bash的扩展写法,在ZSH里虽然不会直接报错,但改成=能更好地兼容两种Shell。
解决方案
把脚本里所有的export -p替换成普通的export,同时把==改成=,修改后的完整脚本如下:
#!/bin/bash OWN_NAME=setantenv.sh if [ "$0" = "./$OWN_NAME" ]; then echo * Please call as ". ./$OWN_NAME", not ./$OWN_NAME !!!--- echo * Also please DO NOT set back the executable attribute echo * On this file. It was cleared on purpose. chmod -x ./$OWN_NAME exit fi PLATFORM_HOME=`pwd` export PLATFORM_HOME export ANT_OPTS="-Xmx400m -XX:MaxPermSize=128M" export ANT_HOME=$PLATFORM_HOME/apache-ant-1.9.1 chmod +x "$ANT_HOME/bin/ant" export PATH=$ANT_HOME/bin:$PATH echo Setting ant home to: $ANT_HOME ant -version
验证修改
保存修改后的脚本,在ZSH中执行. ./setantenv.sh,就能像在Bash里一样正常设置Ant环境变量了。
内容的提问来源于stack exchange,提问作者user1941537
相关产品推荐
相关产品推荐

