免费注册 查看新帖 |

Chinaunix

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

怎么让shell脚本获得自己所在目录名? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
21 [报告]
发表于 2005-12-30 10:53 |只看该作者
原帖由 seeLnd 于 2005-12-30 10:52 发表
  1. realpath "$0"
复制代码

能否說說是哪個系統哪個shell才有的 realpath ?

论坛徽章:
0
22 [报告]
发表于 2005-12-30 10:56 |只看该作者
原帖由 網中人 于 2005-12-30 10:53 发表

能否說說是哪個系統哪個shell才有的 realpath ?


我的是Debian Linux (unstable),
realpath不是shell内置命令,
package的名字叫realpath

[ 本帖最后由 seeLnd 于 2005-12-30 11:04 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2005-12-30 11:49 |只看该作者
比如如果有个脚本需要调用自己同级或子级目录的其它脚本,这个时候安装位置的绝对路径就显得很重要了。其实有个很简单的方法,让人手工输入安装路径到shell脚本中就行了。
但是,难道shell脚本就没办法知道自己所在的绝对路径了吗?我觉得肯定是有好办法的。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
24 [报告]
发表于 2005-12-30 12:09 |只看该作者
楼主是这样的意思吧,我的测试
/home/lee/test#cat testfile
#!/bin/bash
path=$(dirname $0)
path=${path/\./$(pwd)}
echo "$0 path: $path"
/home/lee/test#alias tf='sh /home/lee/test/testfile'
/home/lee/test#tf
/home/lee/test/testfile path: /home/lee/test
/home/lee/test#cd
/home/lee#tf
/home/lee/test/testfile path: /home/lee/test
/home/lee#cd ..
/home#tf
/home/lee/test/testfile path: /home/lee/test
/home#cd /
/#tf
/home/lee/test/testfile path: /home/lee/test
/#cd /etc/sysconfig
/etc/sysconfig#tf
/home/lee/test/testfile path: /home/lee/test
/etc/sysconfig#echo $?
0
/etc/sysconfig#echo $0
bash
/etc/sysconfig#cd
/home/lee#tf
/home/lee/test/testfile path: /home/lee/test
/home/lee#

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
25 [报告]
发表于 2005-12-30 12:27 |只看该作者
原帖由 cocacopi 于 2005-12-30 11:49 发表
比如如果有个脚本需要调用自己同级或子级目录的其它脚本,这个时候安装位置的绝对路径就显得很重要了。其实有个很简单的方法,让人手工输入安装路径到shell脚本中就行了。
但是,难道shell脚本就没办法知道自己所 ...


我不是已經回過了嗎:

原帖由 網中人 于 2005-12-30 10:49 发表
若 script path 是 / 開頭的, 直接 ${0%/*} 就好, 否則就是 $PWD/${0%/*}.


下面是實在結果:

kenny@x40:~/tmp> cat 1.sh
#!/bin/bash

[ ${0:0:1} = / ] && c_dir=${0%/*} || c_dir=$PWD/${0%/*}
echo current dir is: $c_dir
echo file you want is : $c_dir/1.txt
echo

kenny@x40:~/tmp> ./1.sh
current dir is: /home/kenny/tmp/.
file you want is : /home/kenny/tmp/./1.txt

kenny@x40:~/tmp> /home/kenny/tmp/1.sh
current dir is: /home/kenny/tmp
file you want is : /home/kenny/tmp/1.txt

kenny@x40:~/tmp> ../tmp/1.sh
current dir is: /home/kenny/tmp/../tmp
file you want is : /home/kenny/tmp/../tmp/1.txt

kenny@x40:~/tmp> /tmp/../etc/sysconfig/../../home/kenny/tmp/../tmp/1.sh
current dir is: /tmp/../etc/sysconfig/../../home/kenny/tmp/../tmp
file you want is : /tmp/../etc/sysconfig/../../home/kenny/tmp/../tmp/1.txt

kenny@x40:~/tmp> ~/tmp/1.sh
current dir is: /home/kenny/tmp
file you want is : /home/kenny/tmp/1.txt

kenny@x40:~/tmp> cd ..
kenny@x40:~> tmp/1.sh
current dir is: /home/kenny/tmp
file you want is : /home/kenny/tmp/1.txt

kenny@x40:~> ./tmp/1.sh
current dir is: /home/kenny/./tmp
file you want is : /home/kenny/./tmp/1.txt

kenny@x40:~> cd tmp/d1
kenny@x40:~/tmp/d1> ../1.sh
current dir is: /home/kenny/tmp/d1/..
file you want is : /home/kenny/tmp/d1/../1.txt

記住: 找得到路徑就好, 不管你身在何處...

[ 本帖最后由 網中人 于 2005-12-30 12:44 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2005-12-31 16:05 |只看该作者

一个比较苯的办法,AIX5.2

#!/bin/sh

PWD=`pwd`
tocken=`basename $0`

dir=`dirname $0`

if [ "$dir" != "." ]; then
    dir=`cd $dir;pwd;cd $PWD`
    #echo "dir=$dir"
    #echo "tocken=$tocken"
else
    path=`which $tocken`
    dir=`dirname $path`
    #echo "path=$path"
fi

if [ "$dir" = "." ]; then
    dir=`pwd`
fi

echo "dir=$dir"

论坛徽章:
0
27 [报告]
发表于 2006-01-02 22:16 |只看该作者
可以用 which command
显示就是教本所在目录

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
28 [报告]
发表于 2006-01-03 00:12 |只看该作者
不好意思, which 只查 $PATH 裡的...

论坛徽章:
0
29 [报告]
发表于 2006-01-03 09:37 |只看该作者
呵呵,puss_yang的脚本可以搞定也。

论坛徽章:
0
30 [报告]
发表于 2006-03-23 10:23 |只看该作者
[ ${0:0:1} = / ] && c_dir=${0%/*} || c_dir=$PWD/${0%/*}


25 楼 網中人 提供的方法不错, 能对它解释下吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP