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

时间: 2024-08-27 17:43:23

Linux Shell编程之softlink invoke与工作目录问题的相关文章

linux shell编程之bash历史命令与补全

bash是linux标准shell的基本功能 命令名称:history

linux shell编程之if语句

-eq 等于 -ne 不等于 -gt 大于 -lt 小于 -le 小于或等于 -ge 大于或等于 -z 空串 = 两个字符相等 != 两个字符不相等 -n 非空串 字符串通常用来检查用户输入,系统环境是否满足条件,在提供交互式操作的shell脚本中也可以判断用户输入位置参数是否符合要求,字符串的常用操作如下: 文档比较运算符: -e filename  假如filenanme存在,则为真 -d filename  假如filename为目录,则为真 -f filename 假如filename为

linux shell编程之bash 常见配置文件

先说一个命令: source +  配置文件 或者 . (点) 配置文件 source 强制性配置文件生效 主要环境变量的文件: 优先级: 其他配置文件:

linux shell编程之bash别名、快捷键及输入输出重定向

命令别名:alias 让别名永远生效: 命令执行顺序: bash快捷键: 输入输出重定向: 正确和错误都保存到文件: 输出重定向:(除了给软件包打补丁时使用,一般不用)

linux shell编程之bash 各种变量

自定义变量定义与使用: 环境变量: ps1:修改提示符 位置参数变量: 预定义变量: 接受键盘输出:read命令

linux shell编程之bash 多命令顺序执行与管道符

主要包含命令: 分号使用示例: &&运算符 II运算符 管道符 | 前面命令的正确输出作为后米命令的操作对象 最简单的命令:

linux shell编程之bash 环境变量配置文件

先说一个命令: source +  配置文件 或者 . (点) 配置文件 source 强制性配置文件生效 主要环境变量的文件: 优先级:

linux shell编程之bash 通配符和其他特殊符号

Linux环境编程之IPC进程间通信(三):FIFO

管道是没有名字的,因此它只能在有亲缘关系的进程间使用,给管道加上名字,我们称之为有名管道FIFO,当然FIFO与管道之间不止有没有名字的区别,还有其他区别下面会提到.与管道类似的是,FIFO是一个单向(半双工)数据流.不同于管道的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程之间访问同一个FIFO.FIFO是一种文件类型.stat结构成员st_mode的编码指明文件是否是FIFO类型,可以用S_ISFIFO宏对此进行测试. FIFO由mkfifo函数创建,它已经隐含指定了O_CR