BASH_SOURCE[0] 等价于 BASH_SOURCE ,取得当前执行命令的 shell 文件所在的路径(可以是相当路径或绝对路径)及文件名。
dirname 去除文件名中的非目录部分,仅显示与目录有关的部分。
1. 创建一个临时脚本
/tmp/trino-server-371 # cat test.sh
#!/bin/bash
echo "${BASH_SOURCE[0]}"
echo "${BASH_SOURCE}"
echo "$(dirname "${BASH_SOURCE[0]}")"
echo "$(cd "${ dirname BASH_SOURCE[0]}" && pwd)"
2 . 执行 sh /tmp/trino-server-371/test.sh
结果
/tmp/trino-server-371/test.sh
/tmp/trino-server-371/test.sh
/tmp/trino-server-371
/tmp/trino-server-371
3 . 执行 ./test.sh
./test.sh
./test.sh
.
/tmp/trino-server-371
案例二:获取绝对路径
在shell脚本中,$0表示脚本本身,类似于C中的argv[0],所以脚本可以使用 dirname $0来定位脚本的路径。
base_path=$(cd `dirname $0`; pwd)
echo $base_path
用 echo `dirname $0` 获取绝对路径不行,结果是相对路径