以下四种:
$(pwd) ## 获取当前运行(主函数)脚本的路径
$(dirname $0) ## 相对路径
$( cd " $(dirname $0) " && pwd ) ## 当前运行脚本的绝对路径
$( cd $( dirname " ${BASH_SOURCE[0]} " ) && pwd ) ## 脚本绝对路径(这段代码所在脚本的绝对路径)
对于第三种情况,它存在的意义在于,当该脚本被调用时,显示的路径是这段代码所在脚本的绝对路径;而脚本被引用时,变量打印的路径是主函数脚本的路径。如下有两个bash脚本,目录结构如下:
/tmp/
├── main.sh
├── test/
│ ├── a.sh
-
- 第一种情况,a.sh被main.sh调用, 打印的是a.sh的路径:
##>> main.sh
bash test/a.sh
##<<
##>>test/a.sh
a_path=$(cd "$(dirname $0)" && pwd)
echo "a.sh a_path=${a_path}"
##<<
bash main.sh
看下打印结果:
$ bash main.sh
a.sh a_path=/tmp/test
- 第二种情况,a.sh被main.sh引用, 打印的path会是main.sh的路径:
##>> main.sh
. test/a.sh ## or "source test/a.sh"
## 将a_path变量引用过来了,做一个打印
echo ${a_path}
##<<
##>>test/a.sh
a_path=$(cd "$(dirname $0)" && pwd)
echo "a.sh a_path=${a_path}"
##<<
bash main.sh
同样看下打印结果:
$ bash main.sh
a.sh a_path=/tmp
/tmp
这里很神奇,一开始我以为a.sh脚本中的echo路径会是a.sh的路径,运行结果并不是,而单独运行a.sh会是如下:
$ bash test/a.sh
a.sh a_path=/tmp/test