Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >shell 当前工作目录的绝对路径

shell 当前工作目录的绝对路径

作者头像
orientlu
发布于 2018-09-13 02:58:54
发布于 2018-09-13 02:58:54
3K00
代码可运行
举报
文章被收录于专栏:orientluorientlu
运行总次数:0
代码可运行

@(Linux 命令脚本)

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash /home/lcd/shell/mytest.sh
# work_path -> home/lcd/shell
# 能得到想要的

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

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

  1. 脚本参数 $0 使用 $0 可以获取到路径,但不一定是绝对路径,实际上, $0 是代表传递给 bash 这些的第一个参数。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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 提取到绝对路径,实际上我们没法保证。

  1. 使用 pwd 获取路径 pwd 可以打印当前路径,但是也不一定是脚本的位置。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 打印的是你站在那里,而不是脚本在哪里。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在某些情况下会拿到错误结果
work_path=$(dirname $0)
work_path=$(pwd)

## 正确实现
# 通过 readlink 获取绝对路径,再取出目录
work_path=$(dirname $(readlink -f $0))

# 或者曲线救国
work_path=$(dirname $0)
cd ./${work_path}  # 当前位置跳到脚本位置
work_path=$(pwd)   # 取到脚本目录 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python网络爬虫中爬到的数据怎么分列分行写入csv文件中
前几天在Python白银交流群有个叫【꯭】的粉丝问了一个Python网络爬虫中爬到的数据怎么分列分行写入csv文件中的问题,这里拿出来给大家分享下,一起学习下。
前端皮皮
2022/08/17
3.7K0
Python网络爬虫中爬到的数据怎么分列分行写入csv文件中
分享Python网络爬虫过程中编码和解码常用的一个库
前几天在Python白银交流群【千葉ほのお】问了一个Python网络爬虫过程中URL编码的问题,提问截图如下:
Python进阶者
2022/11/14
2620
分享Python网络爬虫过程中编码和解码常用的一个库
盘点一个Python网络爬虫中请求参数的一个小坑
国庆期间在Python白银交流群【空翼】问了一个Python网络爬虫的问题,提问截图如下:
Python进阶者
2023/03/02
3870
盘点一个Python网络爬虫中请求参数的一个小坑
盘点一个使用Python合并excel表格过程中遇到的一个小问题
前几天在Python白银交流群【千葉ほのお】问了一个Python合并的问题,如下图所示。
前端皮皮
2022/08/17
4400
盘点一个使用Python合并excel表格过程中遇到的一个小问题
盘点一个Python面向对象的基础问题
前几天在Python白银交流群【梅ᯤ⁵ᴳ】问了一个Python面向对象的问题,提问截图如下:
Python进阶者
2023/03/02
3420
盘点一个Python面向对象的基础问题
利用pandas的函数,直接生成一列数据,每项数据是有 省-市-区构成,比如 1-2-2
国庆期间在Python白银交流群【空翼】问了一个pandas网络处理的问题,提问截图如下:
Python进阶者
2023/03/02
3870
利用pandas的函数,直接生成一列数据,每项数据是有 省-市-区构成,比如 1-2-2
盘点一个random.sample随机取样的报错问题
前几天在Python白银交流群【木子】问了一个Python随机数的问题,提问截图如下:
前端皮皮
2024/04/26
1340
盘点一个random.sample随机取样的报错问题
matplotlib作图的时候x轴的小数点如何去掉呢?
前几天在Python白银交流群【千葉ほのお】问了一道matplotlib可视化处理的问题,如下图所示。
前端皮皮
2022/08/17
1.6K0
matplotlib作图的时候x轴的小数点如何去掉呢?
大佬们redis里面的这些数据拿出来怎么转换成正常字符?
国庆期间在Python白银交流群【千葉ほのお】问了一个redis数据乱码的问题,提问截图如下:
Python进阶者
2022/11/14
2640
大佬们redis里面的这些数据拿出来怎么转换成正常字符?
手把手教你安装Anaconda和启动jupyter(常见问题解决方法分享)
前几天在Python白银交流群有个叫【千葉ほのお】的粉丝问了一个jupyter使用的问题,在使用jupyter的时候,一般需要安装Anaconda,当然也有其他方法,这里给大家分享下Anaconda的安装方法,希望对后来者有帮助。
前端皮皮
2022/08/17
3.4K0
手把手教你安装Anaconda和启动jupyter(常见问题解决方法分享)
盘点一个函数参数传递方式的简单题目
前几天在Python白银交流群【Flipped】问了一道Python函数传参的问题,如下图所示。
前端皮皮
2022/08/17
2910
盘点一个函数参数传递方式的简单题目
盘点Python网络爬虫过程中xpath的联合查询定位一个案例
前几天在Python钻石交流群【髙鵬】问了一个Python网络爬虫的问题,提问截图如下:
Python进阶者
2022/11/14
4180
盘点Python网络爬虫过程中xpath的联合查询定位一个案例
Python爬取同样的网页,bs4和xpath抓到的结果不同?
前几天在Python白银交流群【沐子山树】问了一个Python网络爬虫的问题,问题如下:刚好遇到另外一个问题,请教下大佬。就是我爬取同样的网页,用xpath的时候会将图上这样的script标签里面的内容当成text取出来,但是用BS4就不会。导致两种方法取出来的text不一样。这种情况应该如何处理?
Python进阶者
2024/06/24
2160
Python爬取同样的网页,bs4和xpath抓到的结果不同?
网易云音乐热门作品名字和链接抓取(xpath篇)
前几天在Python白银交流群有个叫【O|】的粉丝问了一道关于网易云音乐热门作品名字和链接抓取的问题,获取源码之后,发现使用xpath匹配拿不到东西,从响应来看,确实是可以看得到源码的。
前端皮皮
2022/08/17
8150
网易云音乐热门作品名字和链接抓取(xpath篇)
盘点一个使用Pandas进行网络爬虫的实战案例
前几天在Python白银交流群【空翼】问了一道Python网络爬虫的问题,如下图所示。
前端皮皮
2022/08/17
3430
盘点一个使用Pandas进行网络爬虫的实战案例
盘点一个Python网络爬虫过程中中文乱码的问题
前几天在Python白银交流群【空翼】问了一个Python网络爬虫中文乱码的问题,提问截图如下:
Python进阶者
2022/11/14
3970
盘点一个Python网络爬虫过程中中文乱码的问题
盘点一个Python网络爬虫+正则表达式处理案例
前几天在Python白银交流群【鑫】问了一个Python网络爬虫的问题,提问截图如下:
Python进阶者
2022/11/14
2810
盘点一个Python网络爬虫+正则表达式处理案例
大佬们,我想问下为什么我这个flask查询功能实现不了?
前几天在Python白银交流群【乔.】问了一个Python web开发的问题,一起来看看吧。问题描述:大佬们,我想问下为什么我这个查询功能实现不了
前端皮皮
2023/11/27
1960
大佬们,我想问下为什么我这个flask查询功能实现不了?
分享一个使用Python网络爬虫抓取百度tieba标题和正文图片(xpath篇)
前几天在Python钻石交流群有个叫【嗨!罗~】的粉丝问了一道关于百度贴吧标题和正文图片网络爬虫的问题,获取源码之后,发现使用xpath匹配拿不到东西,从响应来看,确实是可以看得到源码的。上一篇文章我们使用了正则表达式获取到了目标数据,这篇文章,我们使用xpath来进行实现。
前端皮皮
2022/08/17
8140
分享一个使用Python网络爬虫抓取百度tieba标题和正文图片(xpath篇)
盘点一个网络爬虫中常见的一个错误
前几天在Python白银交流群有个叫【雨就是雨】的粉丝问了一个Python网络爬虫的问题,这里拿出来给大家分享下,一起学习下。
Python进阶者
2022/06/05
2320
盘点一个网络爬虫中常见的一个错误
推荐阅读
相关推荐
Python网络爬虫中爬到的数据怎么分列分行写入csv文件中
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验