- 论坛徽章:
- 0
|
有少数时候,不想添加PATH,如何在脚本里面获得所执行脚本的绝对路径?
例如:
/data/test/test1/upload.sh
情况1:root@TEST:/data/test# ./test1/upload.sh
情况2:root@TEST:/home#../data/test/test1/upload.sh
情况3:root@TEST:/home# /data/test/test1/upload.sh
我们要在upload.sh里面获得upload.sh所在的绝对路径
以上3种情况我们都要想获得输出:
/data/test/test1/upload.sh
实现此功能的shell脚本如下:
######################################################
#!/bin/sh
GetRealPath()
{
CommandPath=$0
CurrentPath=`pwd`
RealPath=${CommandPath}
One=`echo ${CommandPath} |awk -F'[/]+' '{if($1 == ""){print "r"}}'`
if [ "${One}" != "r" ]
then
Info=`echo ${CommandPath} |awk -F'[/]+' 'BEGIN{n=0}{for(i=1;i<=NF;i++){if($i == ".."){n=n+1}else{if($i != "" && $i != "."){printf "/%s",$i}}}}END{printf " %s",n}'`
n=`echo ${Info} |awk '{print $2}'`
Path1=`echo ${CurrentPath} |awk -F'/' '{for(i=1;i<=NF-'"$n"';i++){if($i != ""){printf "/%s",$i}}}'`
Path2=`echo ${Info} |awk '{print $1}'`
RealPath=${Path1}${Path2}
fi
}
GetRealPath
echo ${RealPath}
######################################################
然后通过获得所执行文件的绝对路径来获得其他文件的路径,这是非常适用的!
欢迎拍砖!
[ 本帖最后由 luo339 于 2009-10-3 11:56 编辑 ] |
|