免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sunnyboy0819
打印 上一主题 下一主题

cd `dirname $0`是什么意思 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-28 18:44 |只看该作者
原帖由 bingosek 于 2009-3-26 23:57 发表
$0当前Shell程序的文件名
dirname $0,获取当前Shell程序的路径
cd `dirname $0`,进入当前Shell程序的目录


解释的太明白了,谢了啊~~~~

论坛徽章:
0
12 [报告]
发表于 2009-03-29 20:00 |只看该作者

回复 #11 sunnyboy0819 的帖子

[test@ home ] $ cd /home
[test@ home ] $ cd `dirname $0`
[test@ home ] $ pwd
/home
实际上好像不是那么回事。

论坛徽章:
0
13 [报告]
发表于 2009-03-29 23:40 |只看该作者

回复 #8 bingosek 的帖子

还是有高人啊,终于明白了

论坛徽章:
0
14 [报告]
发表于 2009-07-04 22:15 |只看该作者
echo $0
返回:-bash

论坛徽章:
0
15 [报告]
发表于 2010-05-18 11:19 |只看该作者
本帖最后由 soho00147 于 2010-05-18 11:23 编辑
$0当前Shell程序的文件名
dirname $0,获取当前Shell程序的路径
cd `dirname $0`,进入当前Shell程序的目 ...
bingosek 发表于 2009-03-26 23:57



    上面这个说法是彻底错误的。
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的"."。
这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。
在/home/admin/test/下新建test.sh内容如下:

  1. cd `dirname $0`
  2. echo `pwd`
复制代码
然后返回到/home/admin/执行

  1. sh test/test.sh
复制代码
运行结果:

  1. /home/admin/test
复制代码
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行。

论坛徽章:
0
16 [报告]
发表于 2010-05-18 12:16 |只看该作者
本帖最后由 383228273 于 2010-05-18 12:23 编辑

先把 dirname 的功能是什么弄清楚了
dirname - 从文件名剥离非目录的后缀,打印去除了/后面部分的NAME;如果NAME没有包含/,则输出‘.’(表示当前目录)。

不多说了,看图吧,看图的理解速度,比用语言解释还来得快:



所以,楼主说的 cd `dirname $0` 这个命令,解释如下:

$0 就是 bash
`dirname $0` 就等价 dirname bash 了,而 dirname bash 输出是 . (当前目录)
cd `dirname $0` 就成了 cd . 了,进入当前目录 {:3_200:}

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2010-05-19 22:29 |只看该作者
15楼说的不错,这个$0在脱离脚本环境的时候,基本没什么意义,纯命令行环境下并没有实际价值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP