免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 17307 | 回复: 14
打印 上一主题 下一主题

请教如何获得一个shell文件所在的目录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-29 10:17 |只看该作者 |倒序浏览
比如我在/下执行/opt/test这个脚本,脚本中用pwd得到的是/,怎么样才能得到test这个脚本所在的位置/opt呢?

论坛徽章:
0
2 [报告]
发表于 2006-08-29 10:21 |只看该作者
basename?

论坛徽章:
0
3 [报告]
发表于 2006-08-29 14:45 |只看该作者
原帖由 wd 于 2006-8-29 10:21 发表
basename?


basename 只能去掉目录的前缀,并不能得到脚本所在的真正目录。

论坛徽章:
0
4 [报告]
发表于 2006-08-29 15:28 |只看该作者
dirname?...

论坛徽章:
0
5 [报告]
发表于 2006-08-29 16:08 |只看该作者
原帖由 wd 于 2006-8-29 15:28 发表
dirname?...


可能我没有把问题说清楚。举个例子

一个脚本名叫showpath.sh,位置在/opt/下

现在其它路径下(如在home下)执行该脚本,但是希望得到showpath.sh所在的路径的绝对位置即/opt,而不是当前目录/home

在脚本中使用pwd得到的是/home而不是/opt

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-08-29 16:27 |只看该作者

  1. #!/bin/bash
  2. echo filepath:$(dirname $(locate $0))
  3. #other cmd
  4. #
复制代码

前提条件
1,以root身分更新

  1. updatedb
复制代码

2,在profile里加入:

  1. export PATH=$PATH:/脚本所在路径
复制代码

[ 本帖最后由 寂寞烈火 于 2006-8-29 16:49 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-08-29 16:45 |只看该作者
这个问题好像以前讨论过。
我的做法是:
#!/bin/sh
cd `dirname $0`
echo `basename $0` is in `pwd`
cd -
#your code goes below

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-08-29 16:46 |只看该作者
原帖由 寂寞烈火 于 2006-8-29 16:27 发表
1,以root身分更新

  1. locatedb
复制代码
                --->updatedb

^_^

[ 本帖最后由 FinalBSD 于 2006-8-29 16:48 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-08-29 17:00 |只看该作者
原帖由 woodie 于 2006-8-29 16:45 发表
这个问题好像以前讨论过。
我的做法是:
#!/bin/sh
cd `dirname $0`
echo `basename $0` is in `pwd`
cd -
#your code goes below


这样就可以了, 其实不用cd, 直接
  1. shellpath=`dirname $0`
复制代码
就可以得到了。

[ 本帖最后由 xaliyan 于 2006-8-29 17:02 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2006-08-29 17:02 |只看该作者
LZ没说明是要在CLI得到路径还是要在script中得到哦,两个的方法是不一样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP