您的位置:首页 > 运维架构 > Shell

Linux Shell编程之softlink invoke与工作目录问题

2015-07-20 18:08 471 查看

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脚本):# 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,从而解决工作目录的问题,应用举例:#!/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--

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐