shell获取脚本路径

以下四种:

$(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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章