码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-07-21 15:15:58      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:softlink   symbolic link   工作目录   shell编程   linux path   

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--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1676488

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

标签:softlink   symbolic link   工作目录   shell编程   linux path   

原文地址:http://dgd2010.blog.51cto.com/1539422/1676488

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!