我在开发一个bash的脚本工具,需要用到相对目录。问题是脚本是放在 /usr/local/bin 加入PATH里的,这样我可以在任何地方直接运行,但悲催的是运行过程中,这个相对目录就出问题了。
例如:
/usr/local/bin/cmd.sh
#!/bin/bash mkdir ../tmp/imgs
这个命令我本意是在 mkdir /usr/local/tmp/imgs
但如果我在家目录运行
~ # sudo cmd.sh
他实际上是去创建 /home/tmp/imgs 的
不用绝对路径的情况下,这种问题怎么解决呢?
因为这个工具是有多个脚本和配置组成的,用绝对路径会有很麻烦的问题。
如果需要处理软链接的情况,可是使用如下函数
调用
如果仅仅是到脚本所在的目录,下面的就可以:
dirname $0
是获取脚本所在的目录。如果要获取执行脚本所在目录的绝对路径,可以用下面的方法:
pwd -P
可以获取当前目录的绝对路径,并且如果当前目录只是一个软链接,它所显示得是链接目标的绝对路径。开始的位置
不考虑软链接,直接用:
便可以获得脚本所在目录的绝对路径,然后用
就可以进行相对路径跳转了