场景应该是这样的:
使用dirname
和{BASH_SOURCE[0]}
dirname
:获取指定路径的目录部分。
(base) ➜ Downloads dirname /Users/mac/Downloads/demo.sh
/Users/mac/Downloads
{BASH_SOURCE[0]}
会拿到该脚本执行是使用的 path。
#!/bin/bash
echo ${BASH_SOURCE[0]}
echo $0
(base) ➜ Downloads sh /Users/mac/Downloads/demo.sh
/Users/mac/Downloads/demo.sh
/Users/mac/Downloads/demo.sh
那怎么在脚本执行时,在里面获取到脚本所在的目录?
思路:
- 获取到脚本文件的路径。
- 获取到脚本文件所在的目录。
- cd 进入,再 pwd。
最终的命令:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
测试:
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo $DIR
结果:
(base) ➜ Downloads sh demo.sh
/Users/mac/Downloads