softlink 又叫作symbolic link,至关于一种”快捷方式”,由ln –s sourcefile distinctionfile (ln –s TARGET LINK_NAME)建立,链接文件的存在使得简化了文件系统,用户操做起来更加方便。但在Shell编程中倒是一个须要很是注意的点,由于工做目录(Work Directory)的缘由,Shell须要使用“标准”的变量(跟系统环境变量有些相似)来定位它当前的工做目录以及这些目录中的文件,假如工做目录定义出了错,那Shell脚本预计很难运行正确。例如Shell脚本中使用了$(pwd)或者其余相对的路径而不是绝对路径,那不出错就奇怪了!由于softlink的存在会致使一些编写很差的Shell脚本在以softlink的方式引用或者执行时就会出现大问题,为了不这个问题,就须要将softlink解析成真正的文件,或者获取真正的工做目录。编程
解决方式以下(参考tomcat的catalina.sh脚本):tomcat
# resolve links - $0 may be a softlink - stolen from catalina.sh PRG="$0" while [ -h "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done PRGDIR=`dirname "$PRG"`
通过以上处理,就能够将工做目录(Work Directory)设定成PRGDIR,从而解决工做目录的问题,应用举例:bash
#!/bin/bash # resolve links - $0 may be a softlink PRG="$0" while [ -h "$PRG" ]; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`/"$link" fi done # Get standard environment variables PRGDIR=`dirname "$PRG"` # Public header WORKDIR=$PRGDIR # Where to get source code SOURCEURL= # end public header # -Public header function deploy() {
--end--ide