前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
什么才是真正的架构设计?
在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅。
xcbeyond
2020/03/25
1.2K0
什么才是真正的架构设计?
为什么选择微服务架构? 微服务架构的10个核心优势 总结
微服务架构我们没有一个明确的定义,但简单来说微服务架构是: 采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过一些轻量级交互机制来通信,例如 RPC、HTTP 等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护。
猫头虎
2024/04/08
2.6K0
为什么选择微服务架构? 微服务架构的10个核心优势 总结
系统架构演变:SOA、微服务架构的区别和联系
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/08
1.5K0
架构意识与性能智慧的双重修炼
在当今快速发展的技术环境中,软件架构师面临着前所未有的挑战。随着业务复杂度的不断增长和用户对性能要求的日益严苛,如何在架构设计中平衡功能实现与性能优化,已成为每个技术领导者必须深度思考的核心问题。本文将深入探讨架构意识的培养和性能智慧的积累,为技术从业者提供系统性的思维框架和实践指导。
蓝葛亮
2025/05/29
5850
架构意识与性能智慧的双重修炼
程序员架构修炼之道:如何设计出可持续演进的系统架构?
现代商业中需求不断变化是必然的,这就需要我们设计出一种可以应对这种变化的系统架构——当无法预测变化时,该架构仍然可以朝着正确的方向发展。这个架构是团队成员不断努力的结果,是一个与开发工作紧密结合的过程,它能同时响应不断变化的需求和开发人员的反馈——我们称之为“演进式架构”,它以敏捷的方式拥抱变化。驱动敏捷软件方法论的引擎是内置的反馈环,如测试、持续集成和迭代等。
一个会写诗的程序员
2022/09/19
9750
程序员架构修炼之道:如何设计出可持续演进的系统架构?
「分布式系统前沿技术」专题:微服务架构何去何从?
分布式技术的发展,深刻地改变了我们编程的模式和思考软件的模式。值 2019 岁末,PingCAP 联合 InfoQ 共同策划出品“分布式系统前沿技术 ”专题, 一起探索这个古老领域的新生机。
玄姐谈AGI
2020/01/04
8490
微服务架构的优势与不足
英文原文:Introduction to Microservices   这篇文章作者是Chris Richardson,他是早期基于Java的Amazonite EC2 PaaS平台CloudFoundry.com的创始人。现在他为企业提供如何开发和部署应用的咨询服务。他也经常在http://microservices.io上发表有关微服务的文章。   微服务正在博客、社交媒体讨论组和会议演讲中获得越来越多的关注,在Gartner的2014 Hype Cycle上它的排名非常靠前。同时,软件社区中也有不少
李海彬
2018/03/23
8990
微服务架构的优势与不足
第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构
随着RESTful web服务和JSON数据交换格式流行,简单快速建立一个可连接的服务已经越来越方便了。随着持续交付概念推广以及Docker容器普及,微服务将这两种理念和技术结合起来,形成新的微服务+API + 平台的开发模式,以及容器化微服务的持续交付概念。
一个会写诗的程序员
2018/08/20
6000
第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构
基于SOA的高并发和高可用分布式系统架构和组件详解
基于SOA的分布式高可用架构和微服务架构,是时下如日中天的互联网企业级系统开发架构选择方案。在核心思想上,两者都主张对系统的横向细分和扩展,按不同的业务功能模块来对系统进行分割并且使用一定的手段实现服务之间的通信,并且基于弹性云服务搭建高可用的分布式解决方案。
用户7353950
2022/06/23
8850
基于SOA的高并发和高可用分布式系统架构和组件详解
突围电商大促场景,得物在高可用上的探索与实践 | 卓越技术团队访谈录
采访嘉宾 | 金思宇、陈贞宝、胡强忠 编辑 | 辛晓亮   大型电商系统并非一开始就具有完整设计的高可用特性,而是随着用户的不断增加与业务的快速增长逐步演进与完善的。当前高可用架构体系是互联网企业系统架构的基础要求,随着公司的业务发展,尤其是对于电商平台,每次发生稳定性故障带来的影响越来越大,提供稳定的服务,保证系统的高可用已经变成了整个技术团队需要面对的挑战。 基于此,我们深度采访了得物技术团队核心成员,探索他们在高可用架构上的实践、演进,深入了解大促备战是如何进行的,异地多活体系是如何建设的,全链路
深度学习与Python
2023/03/29
2.2K0
突围电商大促场景,得物在高可用上的探索与实践 | 卓越技术团队访谈录
鹅厂架构师谈:如何做好架构设计?
# 关注并星标腾讯云开发者 # 每周3 | 谈谈我在腾讯的架构设计经验 # 第1期 | 黄规速:鹅厂架构师谈:如何做好架构设计?
腾讯云开发者
2023/08/03
9940
鹅厂架构师谈:如何做好架构设计?
Go进阶训练营 – 微服务概览与治理一:微服务概览
业务场景各有不同,分享内容时不要太具体到哪个业务场景,应该找到变化中不变的部分。万变不离其宗,先把本质学好。
Yuyy
2022/09/21
4430
Go进阶训练营 – 微服务概览与治理一:微服务概览
对软件架构的一些思维脑图整理
软件架构(software architecture)就是软件的基本结构。 合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员(现在流行全栈
Java高级架构
2018/07/20
2.3K0
架构设计《一》谈谈架构
https://blog.csdn.net/hguisu/article/details/78258430
搜云库技术团队
2019/10/17
2.7K0
看阿里首席架构师是如何选择并落地架构方案的
如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软件开发者,特别是架构师,都需要深入思考的问题。
技术zhai
2018/05/14
1.2K2
看阿里首席架构师是如何选择并落地架构方案的
云原生开启架构演化新轨道
张亮 当当架构部负责人。主要负责分布式中间件及私有云平台的搭建。乐于分享,拥抱开源,主导两个自研项目Elastic-Job和Sharding-JDBC都已正式开源。擅长以Java为主的分布式架构以及以Mesos为主的云平台方向,推崇代码优雅化,对于如何编写出具有强表现力的代码有深入研究。 信息技术从出现伊始到渐成主流,其趋势经历了软件、开源和云三个阶段。 1.软件改变世界。作为信息时代最重要的载体,互联网越来越成为当今社会关注的焦点,互联网的基石之一——软件正在迅速地改变着这个世界。 2.开源改变软件。随着
用户1682855
2018/06/08
1K0
5G 融合计费系统架构设计与实现(一)
随着5G商用临近,5G的各个子系统也在加紧研发调试,本人有兴全程参与5G中的融合计费系统(CCS)的设计、开发、联调工作。接下来将用几篇文章介绍我们在CCS实现过程遇到的挑战与架构设计的考量。相信这些宝贵的经验可以适用于更广的软件系统,免于重复地陷入软件开发的焦油坑。
smartguys
2019/06/25
1.6K0
5G 融合计费系统架构设计与实现(一)
3.5 架构管理
多种因素驱动着技术架构复杂性不断增大,要做好运维管理难度将呈指数增大。在运维过程中,运维需要持续推进架构的优化,比如应用与数据库在服务器层面分离,利用集群部署方式提升并发能力,数据库读写分离提升数据库性能,反向代理及CDN加速提升前端访问速度,拆分业务或数据库提升性能,同步改异步方式提升并发能力,有损服务与降级提升故障恢复能力等。发挥运维核心价值,不仅要保障基础设施层面的高可用,还要不断向业务侧深入,加强软件架构管理能力。同时,架构是运维数字世界的骨架,沉淀了团队众多专家的经验,是一项核心资产,需要在运维侧建立架构管理的工作机制,沉淀架构资产,达到持续提升业务连续性、加快软件交付速度、提高服务质量、提升客户体验的运维价值创造。
彭华盛
2021/07/28
1K0
.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
Software architecture = {Elements, Forms, Rationale/Constraints}
郑子铭
2021/01/13
3510
.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
Software architecture = {Elements, Forms, Rationale/Constraints}
郑子铭
2020/10/11
7450
.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
推荐阅读
相关推荐
什么才是真正的架构设计?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验