如何获得 sh 或 source 执行的shell 脚本位置
2013-05-13 22:53
435 查看
1) 支持从其他目录执行,如 source xxx/yyy/test.sh
1) 支持 sh 和 source 执行
2) 支持路径中有空格
3) 支持 zsh 跟 bash
为什么这么多双引号?
参考:http://tech.idv2.com/2008/01/09/bash-pitfalls/
为什么else里有个判断?
使用virtualenvwrapper时,workon xxx, 自定义 xxx/bin/postactive 中这样用时,$0不知道为什么不是相对路径,而是绝对路径
从这里:http://stackoverflow.com/questions/5708339/script-full-name-and-path-0-not-visible-when-called,得到启发,判断$0的值以分解问题;
从这里:http://bbs.chinaunix.net/thread-1288910-2-1.html,得到了正确的方法。
附:
还不能写成函数,否则zsh中source执行时函数内的$0不正确,导致结果不正确,sh执行没问题。
比如 source test\ space/get_cur_dir.sh,函数外$0为test space/get_cur_dir.sh,函数内$0为get_cur_dir
写成函数,bash没问题。
不喜欢shell 脚本,就这个在其他语言里很简单的功能,耗费了我大量时间搜索跟测试!
1) 支持 sh 和 source 执行
2) 支持路径中有空格
3) 支持 zsh 跟 bash
#!/bin/sh if [ "$0" = "bash" ]; then cd "$(dirname "$BASH_SOURCE")" CUR_FILE=$(pwd)/$(basename "$BASH_SOURCE") CUR_DIR=$(dirname "$CUR_FILE") cd - > /dev/null else echo "$0" | grep -q "$PWD" if [ $? -eq 0 ]; then CUR_FILE=$0 else CUR_FILE=$(pwd)/$0 fi CUR_DIR=$(dirname "$CUR_FILE") fi echo $CUR_DIR
为什么这么多双引号?
参考:http://tech.idv2.com/2008/01/09/bash-pitfalls/
为什么else里有个判断?
使用virtualenvwrapper时,workon xxx, 自定义 xxx/bin/postactive 中这样用时,$0不知道为什么不是相对路径,而是绝对路径
从这里:http://stackoverflow.com/questions/5708339/script-full-name-and-path-0-not-visible-when-called,得到启发,判断$0的值以分解问题;
从这里:http://bbs.chinaunix.net/thread-1288910-2-1.html,得到了正确的方法。
附:
还不能写成函数,否则zsh中source执行时函数内的$0不正确,导致结果不正确,sh执行没问题。
比如 source test\ space/get_cur_dir.sh,函数外$0为test space/get_cur_dir.sh,函数内$0为get_cur_dir
写成函数,bash没问题。
不喜欢shell 脚本,就这个在其他语言里很简单的功能,耗费了我大量时间搜索跟测试!
相关文章推荐
- 如何获得 sh 或 source 执行的shell 脚本位置
- shell脚本执行命令 . 和sh 和 source 和 ./ 的使用以及区别
- 详解shell中source、sh、bash、./执行脚本的区别
- 从Linux程序中执行shell(程序、脚本)并获得输出结果
- ubuntu下source、sh、bash、./执行脚本的区别
- ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
- sh执行shell脚本出现语法错误
- source、sh、bash、./执行脚本的区别
- ubuntu(linux)下 source、sh、bash、./ 执行脚本的区别是什么?
- ubuntu下source、sh、bash、./执行脚本的区别详细介绍
- [转] 用source命令执行脚本和用sh执行脚本之间的区别
- 如何获得当前执行脚本所在的目录名称
- 在linux中如何执行自己亲手写的shell脚本?
- linux下shell脚本执行方法及exec和source命令
- ubuntu下source、sh、bash、./执行脚本的区别
- source、sh、bash、./执行脚本的区别
- source、sh、bash、./执行脚本的区别
- source sh执行脚本的区别
- Linux下为可执行shell脚本文件(.sh),制作桌面启动快捷方式
- 从Linux程序中执行shell(程序、脚本)并获得输出结果(转)