linux获取程序运行绝对路径

最近在写脚本的时候,发现脚本的日志,没有打印到自己希望的位置。找了下原因发现是因为程序运行的方式不同,获取的相对路径就不同。这样就需要获取到脚本的绝对路径。以下是具体实现方式:

实现命令

basepath=$(cd `dirname $0`; pwd)

释义

其中$0为程序名,dirname $0为获取程序的父目录
cd dirname $0 进入到程序所在目录
使用pwd获取到程序的所在绝对路径
赋值给变量basepath

说明

从上面可以看到,dirname可以获得程序的父目录,为什么还需要使用cd进入到程序所在目录,然后pwd获取当前目录那?
因为如果在程序所在目录执行dirname,返回的内容是:即当前目录,此种情况下直接使用pwd是可以,但是程序运行时,如果未在程序所在路径,则pwd获取的就不是程序的所在路径了。
cd 到程序所在目录是为了兼容以上两种情况,这样不论是程序运行目录执行程序,还是在其他目录执行程序都是可以。

pwd和$0

pwd是打印当前工作目录的名称,并不是获取程序所在目录的意义。
$0的值根据不同的调用情况,$0的值是不同的。

Previous Post

shell中的特殊变量

Next Post

shell编程技巧

Related Posts