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脚本):
1
2
3
4
5
6
7
8
9
10
11
12
|
# 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,从而解决工作目录的问题,应用举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/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--
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脚本):
1
2
3
4
5
6
7
8
9
10
11
12
|
# 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,从而解决工作目录的问题,应用举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/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--
本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1676488,如需转载请自行联系原作者