Linux Shell编程之softlink invoke与工作目录问题
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--
阅读更多- Linux Shell编程之softlink invoke与工作目录问题
- linux下的工作目录问题
- NFS奇怪问题1 - NFS无法工作,服务重启失败,挂载目录变成问号。
- Erlang 编译时出现"no such file or directory" 与 当前工作目录问题
- 编程解决工作指派问题(运筹学)
- makefile 中切换工作目录的问题
- git的搭建与使用,解决上传git成功后,没有看到工作目录的问题
- 好长时间上不了博客,我还以为因为我发表抗日言论账户被删了,编程中好多新经验新发现不能拿出来和朋友们分享,那个急呀。以下是我在工作中积累的一些经验和解决的一些问题,希望能对大家有一点帮助。
- Linux shell编程中IO和条件及循环处理的细节问题讨论
- 子进程继承父进程的当前工作目录的问题
- linux shell 编程4 判断当前的是不是目录、 传递参数的个数
- 进程工作目录设置不当导致的设备持续被占用的问题
- Erlang 编译时出现"no such file or directory" 与 当前工作目录问题
- Erlang 编译时出现"no such file or directory" 与 当前工作目录问题
- Linux Shell编程实战---计算特定目录下前10个大文件
- nuxt-link 跳转目录问题
- namenode多个工作目录解决数据丢失问题
- Linux Shell编程学习笔记——目录(附笔记资源下载)
- linux shell编程 从当前目录下查找指定文件,输出文件位置
- 由公司协同工作平台项目引发的Windows Active Directory(活动目录域)的应用问题