#!/bin/sh
在学习Shell脚本的时候,我们经常会遇到这一句
而这一句表示的就是脚本解释器所使用的类型,这里用的就是sh型
通常我们如果进行一个脚本操作,想知道一个确切的当前路径,该如何实现呢?
参考:
http://blog.csdn.net/leoleocmm/article/details/17410427
cd `dirname $0`;echo "当前目录:"`pwd`
这样就能输出了当前的绝对路径
这里非常注意到,这么神奇的效果居然那么简单,其实大有乾坤啦。
解析:
1.你必须注意到 ' ' 和 ` ` 这两个差之甚远的符号
http://blog.csdn.net/miyatang/article/details/8077123
(单引号、 双引号,反引号(``)的区别及各种括号的区别)
可以知道 ` `其实就是$()这种管道操作,现在当前帮你做了一次,而 dirname 命令非常好用 : dirname path
2.而$0我们可以看这个:
http://www.cnblogs.com/fhefh/archive/2011/04/15/2017613.html
(linux中shell变量$#,$@,$0,$1,$2的含义解释)
表示当前的shell脚本的文件名字,但是dirname $0会发生什么奇妙的化学反应呢?其实网上一查一大把,我们在脚本验证下:
#!/bin/sh
echo `dirname $0`;
这个时候,很多人肯定想当然,嘿,当然组合一起输出的是当前的路径啦,例如:/Users/luxiangting/Desktop
我们来看看结果:
坑爹啊,怎么是这么一点咧,看看后面的pwd,嘻嘻,这时候想想就恍然大悟了吧
原来dirname $0产生的化学反应的结果是一个当前目录,而且是相对路径的写法,所以是一点 .
而pwd就是表示绝对路径的意思啦
除了这种方式,还有别的方式吗?当然有的,当我们甚至要把脚本的名称也输出的时候,我们可以这样:
filename=$(basename "$0")
commond=`pwd`/${filename}
echo ${filename}
echo ${commond}
参考:basename命令,特别basename "0"的用法
http://blog.csdn.net/shh110/article/details/6521586
就可以懂了
这样一来,逻辑关系就非常明了了吧?我们先cd到当前的目录以至于保证绝对性,然后输出绝对的路径,搞掂~
而我们经常将这种作为脚本操作的一种习惯,先输出操作的路径,查看是否正确,下篇会讲解,输出操作的时间~