Linux Shell编程之softlink invoke与工作目录问题
2015-07-20 18:08
609 查看
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脚本):
经过以上处理,就可以将工作目录(Work Directory)设定成PRGDIR,从而解决工作目录的问题,应用举例:
本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1676488
解决方式如下(参考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
相关文章推荐
- php执行shell命令,system、exec、passthru
- shell脚本 -e -f的含义
- Shell编程入门总结(编辑器Vim篇)
- #!/bin/sh与#!/bin/bash的区别
- Shell反弹不出来怎么办呢? -- Metasploit-tunna
- shell与if相关参数
- Shell脚本练习
- 【Linux-shell】shell脚本基础语法练习
- Linux学习(1)——CLI:BASH命令
- linux关于bashrc与profile的区别
- bash shell脚本常用功能
- bash shell学习之变量
- py shell
- shell编程LANMP一键安装脚本
- shell字符串操作总结(注重:cut,sed、awk、grep)
- Linux编写shell脚本的注意事项
- 如何把xshell的session配置文件拷贝到别的机器上
- shell截取字符串的方法
- shell变量-1
- linux shell脚本 mysql多行命令执行