编写脚本中,需要获取执行脚本的绝对路径,今天写脚本的时候不小心踩了个坑,记录下。

那个坑的脚本大概是这样的:

#!/bin/bashwork_path=$(dirname $0)
cd ~/${work_path}
## blblbl
cd /home/lcd/
cp ./something ${work_path}

问题就出在最后那句,本意我是希望把/home/lcd/something 复制到我脚本的执行目录。 
假设我的脚本目录在/home/lcd/shell/下,

bash /home/lcd/shell/mytest.sh
# work_path -> home/lcd/shell
# 能得到想要的lcd:/home/lcd/shell/ $ bash ./mytest.sh
# work_path -> ./
# 所以上面的执行方式,something 还是复制到了./
# 也就是最后 cd 进去的目录下

查了下,总结下获取路径的方法,以及可能的误区。

脚本参数 0使用0使用0 可以获取到路径,但不一定是绝对路径,实际上, $0 是代表传递给 bash 这些的第一个参数。

$ bash ./mytest.sh               # $0= ./mytest.sh
$ bash ./shell/mytest.sh            # $0= ./shell/mytest.sh
$ bash /home/lcd/shell/mytest.sh    # $0= /home/lcd/shell/mytest.sh

如果执行的时候给的是绝对路径,那么我们可以通过 $0 提取到绝对路径,实际上我们没法保证。

使用 pwd 获取路径 
pwd 可以打印当前路径,但是也不一定是脚本的位置。

lcd:/home/lcd/shell/ $ bash ./mytest.sh
# pwd=/home/lcd/shell/
lcd:/home/lcd/ $ bash ./shell/mytest.sh
# pwd=/home/lcd/
lcd:/root/ $bash /home/lcd/shell/mytest.sh
# pwd=/root/

可见,只有第一条的执行情况才满足实际需要,pwd 打印的是你站在那里,而不是脚本在哪里。

从上面两点,看看下面这些获取路径的方法

# 在某些情况下会拿到错误结果
work_path=$(dirname $0)
work_path=$(pwd)## 正确实现
# 通过 readlink 获取绝对路径,再取出目录
work_path=$(dirname $(readlink -f $0))# 或者曲线救国
work_path=$(dirname $0)
cd ./${work_path}  # 当前位置跳到脚本位置
work_path=$(pwd)   # 取到脚本目录 

shell 当前工作目录的绝对路径相关推荐

  1. pwd 查看”当前工作目录“的完整路径

    Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

  2. linux文件目录类、pwd 显示当前工作目录的绝对路径、列出目录的内容

    1.2文件目录类 1.2.1pwd 显示当前工作目录的绝对路径 pwd的全称是print working directory 打印工作目录 pwd (功能描述:显示当前工作目录的绝对路径) 例如: [ ...

  3. linux存放脚本目录,linux中Shell脚本所在目录的绝对路径linux操作系统 -电脑资料...

    linux shell 脚本里面如果想得到当前脚本文件存放的绝对路径,也没有太现成的命令可以调用,不过可以通过下面的语句来获取:代码如下复制代码 baseDirForScriptSelf=$(cd & ...

  4. UNIX--更改/输出当前工作目录

    更改当前的工作目录 头文件:#include <unistd.h> 用法格式:int chdir ( const char *path ); chdir用来将当前工作目录改为参数path指 ...

  5. linux查看当前的工作目录,Linux-查看当前工作目录(pwd)

    Linux中pwd命令来查看"当前工作目录"的完整路径.简单的说,每当你在终端进行操作时,你都会有一个当前工作目录.在不太确定当前位置时,同样可以使用pwd来判定当前目录在文件系统 ...

  6. Windows核心编程_更改当前工作目录

    在Windows环境下开发每个程序都会有一个工作目录 比如你在C盘下有一个.EXE文件你打开,那么这个程序的工作目录就在C盘下,你使用fopen等文件IO函数即便不给绝对路径给相对路径那么Window ...

  7. Linux pwd命令:显示当前工作目录。

    执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. 语法 pwd [–help][–version] 参数说明: –help 在线帮助. –version 显示版本信息. 实例 查看当前所在 ...

  8. 改变工作目录和根目录

    改变工作目录和根目录 进程有工作目录和根目录. 工作目录:进程在哪个路径下被运行起来哪个路径就是进程的工作目录(Current Woring Directory, CWD) 根目录:就是"/ ...

  9. R语言-路径设置与工作目录修改

    R语言中的路径设置 软件的路径设置对于电脑的内存管理.工作数据的保存和自己的寻根究底十分重要.所以,合理的设置R中相关路径,能更加方便快捷的管理自己的相关文件,提高学习R语言的效率,建立自己的习惯体系 ...

最新文章

  1. LeetCode Find Minimum in Rotated Sorted Array II
  2. jsp springmvc 视图解析器_SpringMVC工作原理
  3. 转载:margin外边距合并问题以及解决方式
  4. 关于在EF中通用方法
  5. multimap容器查找元素的三种方法总结
  6. chromebook刷机_你能在大学里得到一本Chromebook吗?
  7. 宝峰c1对讲机写频软件_宝峰888s写频软件
  8. iOS socket编程
  9. OpenCasCade——给定B样条曲线上的一点,求出过该点的切向量或法向量
  10. html背景图片刚刚好铺满,ppt的背景图片怎么设置才能铺满整张又不失真呢? | ppt整套背景图...
  11. 小四哥的故事——访中联绿盟陈庆
  12. OpenLayers教程:图形绘制之绘制几何图形
  13. 第五人格手机游戏在PC上怎么玩?第五人格哪款模拟器好用?
  14. 值得收藏的抖音唯美冬季古诗词文案分享
  15. Linux系统中用命令行清空垃圾箱Trash
  16. flink启动命令参数_Flink命令行 - 1.10
  17. Oracle将小数转换为百分数;及将小于1的数字to_char()转成字符串后,个位0丢失的解决办法
  18. 《生命科学50讲》课程笔记1--生命由什么构成
  19. oracle 汉化包配置,Oracle Application Express安装与中文语言包配置
  20. 大二学计算机目标,大学生大二学习计划

热门文章

  1. 有哪些舆情监控方法,舆情监控工作机制?
  2. Go Ahead, Throw That Practice Out
  3. python爬虫模块request_Python爬虫——Request模块
  4. 移动端客户管理系统有效提高工作效率
  5. Android 微信小视频录制功能实现
  6. 取代java的新技术,取代JSP的新技术-tapestry
  7. C++调用JsonCpp库,json简单操作以及常用函数
  8. 初探JavaScript的截屏实现
  9. dbeaver的安装
  10. 【转】机器人技术介绍作者