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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
shell获取当前工作目录绝对路径
一般我们写Shell脚本的时候,都倾向使用绝对路径,这样无论脚本在什么目录执行,都应该起到相同的效果,但是有些时候,我们设计一个软件包中的工具脚本或者远程调用某个脚本时,可能使用相对路径更加灵活一点,因为你不知道用户会在哪个目录执行你的程序,于是问题就来了,如何获取当前正在执行脚本的绝对路径? 常见的一种误区,是使用 pwd 命令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明,这个目录就是脚本存
Java学习123
2018/05/16
11.8K0
Shell 获取当前脚本的绝对路径
请注意:本文编写于 2020-04-26,其中某些信息可能已经失去时效性。 1. dirname + pwd root_absolute_dir=$(cd "$(dirname "$0")";pwd) 2. readlink root_absolute_dir=$(dirname $(readlink -f "$0")) 注意 macOS 中使用 readlink -f 命令会有如下报错: readlink: illegal option -- f usage: readlink [-n] [file
Ryoma
2022/04/02
1.4K0
bash shell:获取当前脚本的绝对路径(pwd/readlink)
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51906821
10km
2019/05/25
9K0
Linux: Shell脚本中处理文件路径参数,兼容相对路径与绝对路径
在编写Shell脚本时,处理文件路径参数是一个常见的需求。路径参数可能是相对路径或绝对路径,如何编写一个兼容两者的Shell脚本并进行路径检查,是本文的主要内容。
运维开发王义杰
2024/06/11
1.1K0
Linux: Shell脚本中处理文件路径参数,兼容相对路径与绝对路径
如何获取当前正在执行脚本的绝对路径
刚开始我还以为需要把dirname改成对应的路径,同时又不解$0在这里是表达什么含义。
小汪Waud
2023/02/03
1.9K0
如何获取当前正在执行脚本的绝对路径
关于"绝对路径"和"相对路径"
作为一个phper,一开始学习的时候,可能都接触过绝对路径和相对路径,但是也可能很多没学基础的人,直接撸tp去了,根本不了解路径,一遇到问题就两眼一抹黑瞎几把问,所以,今天就来讲讲关于路径的事吧.
仙士可
2019/12/18
3.1K0
crontab 踩坑之绝对路径
由于放假后网络原因不方便使用电脑,需要创建一个 crontab 定时任务,用来在每天固定时间执行一个 Shell 脚本
ihoey
2018/10/31
6.3K0
Linux绝对路径和相对路径
只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。指明一个文件存放的位置,有 2 种方法,分别是使用绝对路径和相对路径。
芯动大师
2023/10/25
7270
Linux绝对路径和相对路径
详解shell脚本的环境、普通、特殊变量
#变量介绍 变量就是用一个固定的字代替复杂的内容,该内容里可能还会包含变量、路径、字符串等其它的内容。
老油条IT记
2020/09/04
1.9K0
详解shell脚本的环境、普通、特殊变量
oceanbase源码分析 build.sh --init 执行过程
OceanBase是由蚂蚁集团、阿里巴巴完全自主研发的分布式关系型数据库,始创于2010年。
早起的鸟儿有虫吃
2025/01/12
1380
shell编程
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的系统级程序
小小咸鱼YwY
2020/11/04
5540
pwd命令 – 显示当前工作目录的路径
pwd 是 "print working directory" 的缩写,意思就是“打印工作目录”。
是山河呀
2025/02/01
3080
第80篇:Weblogic上传漏洞在不知绝对路径情况下拿shell方法
大家好,我是ABC_123。Weblogic曾经爆出一个上传漏洞,漏洞编号是CVE-2018-2894,这个漏洞利用起来稍微有点麻烦,很多朋友由于不知道绝对路径而没法上传shell,从而放弃对其的进一步利用,ABC_123曾经搭环境尝试了各种方法去解决这个问题,接下来给出自己的研究成果。
ABC_123
2023/11/22
6800
第80篇:Weblogic上传漏洞在不知绝对路径情况下拿shell方法
大数据学习之_02_Shell学习
1、脚本格式 脚本以#!/bin/bash开头(表示指定解析器) 2、第一个Shell脚本:helloworld (1)需求:创建一个Shell脚本,输出helloworld (2)案例实操:
黑泽君
2019/02/26
1.6K0
linux中的15个pwd(打印工作目录)命令示例
2.创建一个文件夹的符号链接(比如/var/www/html作为htm进入你的主目录)。移动到新创建的目录并打印带符号链接和不带符号链接的工作目录。
入门笔记
2022/06/02
4K0
【linux命令讲解大全】107.pwd 命令:显示当前工作目录的绝对路径
pwd(英文全拼:print working directory)命令用于显示用户当前所在的工作目录(以绝对路径显示)。
全栈若城
2024/03/02
6510
如何从Bash脚本本身中获得其所在的目录
我想使用Bash脚本作为另一个应用程序的启动器。我想把工作目录改为Bash脚本所在的目录,以便我可以对该目录下的文件进行操作,像这样:
程序熵
2023/11/09
7400
如何从Bash脚本本身中获得其所在的目录
shell-编写shell脚本所需的基础语法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
洋仔聊编程
2019/09/18
9520
shell-编写shell脚本所需的基础语法
高效的Shell编程建议及入坑
描述:在进行shell脚本语言编写的时候,不仅要注意写的功能,更要注意他的美观以及通用性,还需要让其他参与运维的人都能看懂;
全栈工程师修炼指南
2022/09/28
9340
高效的Shell编程建议及入坑
获取shell脚本所在目录
前几天写的七牛的参赛demo,用bash写了一个便捷安装的脚本,涉及到了路径相关的判断,从stackoverflow,加上自己的实践整理一下。
技术小黑屋
2018/09/04
1.4K0
相关推荐
shell获取当前工作目录绝对路径
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验