深度解析shell脚本的命令的原理之pwd
pwd是Print Working Directory的缩写,是一个Unix和Linux shell命令,用于打印当前工作目录的绝对路径。以下是对这个命令的深度解析:
-
获取当前工作目录:pwd命令通过调用操作系统提供的getcwd(或相应的)系统调用获取当前工作目录。这个系统调用会返回一个表示当前工作目录的字符串。
-
处理选项:pwd命令有两个选项:-L(或--logical)和-P(或--physical)。默认情况下,或者当指定了-L选项时,pwd会返回逻辑工作目录,即可能包含符号链接的路径。当指定了-P选项时,pwd会返回物理工作目录,即所有的符号链接都会被解析为实际的目录。
-
打印工作目录:获取到工作目录之后,pwd命令会将其打印到标准输出(通常是终端)。这使得用户可以看到当前的工作目录。
pwd是一个很简单的命令,但它在许多情况下都非常有用。例如,当你在终端中导航到一个深层次的目录时,你可以使用pwd命令来确定你当前的位置。或者,当你需要在脚本中获取当前工作目录时,你也可以使用pwd命令。
继续深入理解pwd命令,我们需要讨论一些额外的细节和使用场景。
-
逻辑与物理路径:pwd命令中的-L和-P选项允许你控制是否解析符号链接。符号链接是Unix和Linux文件系统中的一种特殊类型的文件,它指向另一个文件或目录。逻辑路径保留了符号链接,而物理路径则解析了这些链接。例如,如果你在/home/user目录中有一个指向/var/www的符号链接www,那么cd www; pwd -L会输出/home/user/www,而pwd -P会输出/var/www。
-
环境变量:当前工作目录通常存储在PWD环境变量中。当你改变工作目录时,大多数shell会自动更新这个变量。因此,pwd命令可以简单地打印这个变量的值,而不需要调用getcwd系统调用。然而,如果PWD环境变量的值被修改或不准确,那么pwd命令需要调用getcwd来获取真正的工作目录。
-
错误处理:如果因为某些原因pwd命令不能获取当前工作目录,例如因为目录已被删除或用户没有足够的权限,那么它会打印一个错误消息,并返回一个非零的退出状态来表示错误。
-
在脚本中使用:pwd命令经常在脚本中使用,以确定脚本的运行位置。这对于找到脚本相关的其他文件非常有用。例如,如果一个脚本需要读取或写入一个在相同目录中的文件,它可以使用pwd来获取当前目录,然后构造文件的路径。
以上就是pwd命令的更深层次的工作原理和特性。理解这些可以帮助你更有效地使用pwd命令,以及更广泛地理解Unix和Linux系统的工作方式。
关于pwd命令的深度解析,我们已经覆盖了它的基本功能、逻辑和物理路径的差异、环境变量和错误处理。以下是一些额外的注意事项和深层次的使用:
-
与其他命令的结合:pwd命令经常与其他命令结合使用,以提供当前工作目录的上下文。例如,你可以使用$(pwd)的形式将pwd命令的输出作为其他命令的参数。这种形式的命令替换可以用在许多地方,例如在cp或mv命令中指定目标路径,或者在find命令中指定搜索的目录。
-
在脚本中保存和恢复工作目录:在写shell脚本时,你可能需要临时改变工作目录来执行一些命令,然后再返回到原来的目录。你可以使用pwd命令来保存当前的工作目录,然后使用cd命令来恢复。例如:
old_dir=$(pwd) cd /some/other/dir # do some work here cd "$old_dir"
这样,无论你在/some/other/dir中执行了什么命令,你都可以准确地返回到原来的目录。
-
处理特殊字符:如果当前工作目录的路径中包含特殊字符(如空格或星号),pwd命令会正确地处理它们。这意味着你可以安全地使用pwd命令的输出作为其他命令的参数,而不需要担心特殊字符造成的问题。
-
在脚本中检查当前目录:你可以使用pwd命令在脚本中检查当前的工作目录,以确保脚本在正确的位置执行。例如,如果一个脚本需要在特定的目录中运行,你可以添加一些代码来检查和确认:
if [ "$(pwd)" != "/expected/dir" ]; thenecho "This script must be run from /expected/dir"exit 1 fi
以上就是pwd命令更深层次的工作原理和特性。理解这些可以帮助你更有效地使用pwd命令,以及更广泛地理解Unix和Linux系统的工作方式。Shell脚本:基础知识和使用指南_什么时候才能变强的博客-CSDN博客Shell脚本:基础知识和使用指南https://blog.csdn.net/qq_17496235/article/details/132599312
相关文章:
深度解析shell脚本的命令的原理之pwd
pwd是Print Working Directory的缩写,是一个Unix和Linux shell命令,用于打印当前工作目录的绝对路径。以下是对这个命令的深度解析: 获取当前工作目录:pwd命令通过调用操作系统提供的getcwd(或相应的)系统调…...

Kafka3.0.0版本——消费者(分区的分配以及再平衡)
目录 一、分区的分配以及再平衡1.1、消费者分区及消费者组的概述1.2、如何确定哪个consumer来消费哪个partition的数据1.3、消费者分区分配策略 一、分区的分配以及再平衡 1.1、消费者分区及消费者组的概述 一个consumer group中有多个consumer组成,一个 topic有多…...
Kotlin文件遍历FileTreeWalk filter
Kotlin文件遍历FileTreeWalk filter import java.io.Filefun main(args: Array<String>) {val filePath "."val file File(filePath)val fileTree: FileTreeWalk file.walk()fileTree//.maxDepth(1) //遍历层级1,不检查子目录.filter {it.isFile…...
Activiti兼容达梦数据库
1. 自定义类继承SpringProcessEngineConfiguration类,重写initDatabaseType方法。 package com.ydtf.cbda.module.cbdacim.improcess.config;import org.activiti.engine.ActivitiException; import org.activiti.spring.SpringProcessEngineConfiguration; import…...

shell 流程控制
流程控制 if条件判断 可以使用if来实现多路跳转,条件通常使用test命令 #if语句的语法if condition1then command1elif condition2 then command2else commandNfi 如果then需要和if放在同一行的话,使用;分隔 fi用来结束if语句,相当于…...

【C++】红黑树插入操作实现以及验证红黑树是否正确
文章目录 前言一、红黑树的插入操作1.红黑树结点的定义2.红黑树的插入1.uncle存在且为红2.uncle不存在3.uncle存在且为黑 3.完整代码 二、是否为红黑树的验证1.IsBlance函数2.CheckColor函数 三、红黑树与AVL树的比较 前言 红黑树,是一种二叉搜索树,但在…...

学信息系统项目管理师第4版系列07_项目管理知识体系
1. 项目管理原则 1.1. 勤勉、尊重和关心他人 1.1.1. 关键点 1.1.1.1. 关注组织内部和外部的职责 1.1.1.2. 坚持诚信、关心、可信、合规原则 1.1.1.3. 秉持整体观 1.1.2. 职责 1.1.2.1. 诚信 1.1.2.2. 关心 1.1.2.3. 可信 1.1.2.4. 合规 1.2. 营造协作的项目管理团队…...
Leetcode 2851. String Transformation
Leetcode 2851. String Transformation 0. 吐槽1. 算法思路 1. 整体思路2. 字符串匹配优化 2. 代码实现 题目链接:2851. String Transformation 0. 吐槽 这道题多少有点坑爹,题目本身挺有意思的,是一道数组题目,其实用数学方法…...

在PHP8中对数组进行计算-PHP8知识详解
在php8中,提供了丰富的计算函数,可以对数组进行计算操作。常见的计算函数如下几个:array_sum()函数、array_merge()函数、array_diff()函数、array_diff_assoc()函数、array_intersect()函数、array_intersect_assoc()函数。 1、array_sum()函…...
Android BottomSheetDialog最大展开高度问题
修改界面的时候遇到了这个问题,这个问题比较简单,网上解决方案也很多,这是 peekHeight 半展开高度,毕竟只是 dialog,全铺满就我们不必考虑 dialog 了 方法是在DialogFragment初始化dialog时处理 companion object {/*** 设置弹窗高度 默认展开无折叠情况 */ const val …...
记录Linux部署人脸修复GFPGAN项目Docker Python 使用
记录Linux 服务器使用人脸修复GFPGAN 项目 1:阿里云安装docker,用docker 是隔离环境,Python环境还真是麻烦… https://help.aliyun.com/zh/ecs/use-cases/deploy-and-use-docker-on-alibaba-cloud-linux-2-instances 2:关于docker 镜像,想找个好的镜像也是很难,百度吧,很多Li…...
如何编写可重入的函数?
编写可重入(reentrant)的函数是在多线程环境或并发编程中非常重要的任务。可重入函数是一种可以安全地被多个线程同时调用的函数,而不会导致数据竞争或不一致性的函数。在C语言中,编写可重入函数需要遵循一些特定的规则和技巧。本…...

使用纯C语言定义通用型数据结构的方法和示例
文章目录 前言以实现优先队列来描述实现思想基本类型的包装类型比较函数演示总结 前言 最近一段时间在复习数据结构和算法,用的C语言,不得不说,不学个高级语言再回头看C语言根本不知道C语言的强大和完美,不过相比之下也有许多不便…...

数据结构基础8:二叉树oj+层序遍历。
二叉树oj层序遍历 题目一:二叉树的销毁:方法一:前序遍历:方法二:后序遍历: 题目二:二叉树查找值为x的节点方法一:方法二:方法三: 题目三:层序遍历…...

Spring注解家族介绍:@RestController
前言: Spring Boot可以说是当前JAVA最为重要的一个框架,而Spring Boot的基石Spring中有着丰富的注解,因此我们会利用几篇文章来讲解我目前学到的各种注解,因此本类型文章的篇幅会比较短,主要着重于介绍各个注解。 目录…...

rocketmq
🍓代码仓库 https://gitee.com/xuhx615/rocket-mqdemo.git 🍓基本概念 ⭐生产者(Producer):消息发布者⭐主题(Topic):topic用于标识同一类业务类型的消息⭐消息队列(MessageQueue)…...

JAVA成员变量首字母小写,第二个字母大写报错问题(原因:Lombok与Spring冲突)
1、问题现象: JAVA类里定义成员变量使用首字母小写,第二个字母大写 Getter Setter public class BrandQueryObject extends QueryObject{private String pName; }结果页面报错,无法找到类型为 cn.wolfcode.ssm.query.BrandQueryObject 的对象…...

Python入门教程 |Python 错误和异常
Python3 错误和异常 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。 Python 有两种错误很容易辨认:语法错误和异常。 Python assert(断…...
API商品接口对接使用:从理论到实践
随着电子商务的飞速发展,API商品接口已成为现代电子商务应用程序不可或缺的一部分。通过API商品接口,开发者可以轻松地从其他应用程序或服务中获取商品信息,实现快速、高效的电子商务功能。本文将探讨API商品接口的概念、对接使用的方法以及一…...

解决stable diffusion webui1.6 wd1.4 tagger加载失败的问题
由于webui源码的变化,需要修改两个地方的import 1.tagger/ui.py # 第十行 # from webui import wrap_gradio_gpu_call # 原代码 from modules.call_queue import wrap_gradio_gpu_call1.preload.py # 第4行开始 # from modules.shared import models_path # 原…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...