5.读取指定路径名-dirname

1. 简介

dirname 命令读取指定路径名删除最后一个“/”(斜杠)及其后面的字符,保留其他部分,并写结果到标准输出。如果最后一个“/”后无字符,dirname 命令使用倒数第二个“/”,并忽略其后的所有字符。

示例:

1) dirname /etc/init.d/acpid -> /etc/init.d
2) dirname /etc/init.d/ -> /etc
3) dirname /etc/init.d -> /etc
4) dirname stdio.h -> .
5) dirname dir1/str dir2/str  -> "dir1" followed by "dir2"

2. 实例

在很多shell脚本中,经常可以看到下面的语句

rootDir=$(cd $(dirname $0); pwd)

这个语句的作用是获取shell脚本所在目录的绝对路径,这个语句怎么理解?为什么不直接用pwd来获取当前路径呢?

"."表示当前路径
$0,这是bash shell脚本中的位置参数,用来表明输入到命令行中的命令本身。
其余的还有$1,$2等等,分别表示输入到命令行中的命令后面带有的第一个参数和第二个参数
bash test.sh 10 9
其中的$0就是test.sh,10和9分别是$1$2pwd,这个命令就是打印当前的绝对路径。

为什么不用pwd?

请注意基本事实

调用shell脚本,就是在调用脚本的当前目录下,逐行执行脚本中的每一个命令。

修改上面的脚本如下

#/bin/bash
rootDir=$(cd $(dirname $0); pwd)
echo "rootDir $rootDir"
echo "pwd $pwd"

并且在~/lyq下输入命令code/test.sh来运行这个脚本,输出结果如下

usr@opensuse:~/lyq$ code/test.sh
rootDir /home/usr/lyq/code
pwd /home/usr/lyq

第2个pwd不是脚本所在的目录,而是我们输入命令的目录。正如那个基本事实所示,在该目录下运行该脚本相当于逐行敲入脚本中每一句之后执行,所以在~/lyq调用脚本中的pwd,就相当于在该目录下敲入pwd,因此结果就是当前路径。

之所以不能直接使用pwd获取脚本所在目录,是因为如果在脚本目录之外调用该脚本,返回的是调用命令所在的目录而不是脚本所在目录。

3. 拓展


#/bin/bash
topDir = $(cd $(dirname $0); cd ../; pwd) #获取当前路径,切换路径,并打印
echo topDir

$(topDir)/Build/build_app.bat
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值