shell获取脚本路径

6 篇文章 0 订阅

以下四种:

$(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值