关于可移植性的 $PWD 与 pwd

2024-01-13

我正在编写一个 shell 脚本,它解析当前工作目录的路径(打印当前目录上方的所有基本名称)。

到目前为止,我一直在使用环境变量PWD解析路径,但我想知道是否

  • 我可以信赖PWD始终被设置
  • 在每个平台上给出相同的结果

使用pwd外壳内置?我需要这个脚本在尽可能多的平台上运行,所以我只是想知道......


POSIX http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08需要$PWD按以下方式设置:

PWD  

该变量应表示当前工作目录的绝对路径名。它不应包含任何点或点-点的组件。该值由 cd 实用程序和 sh 实用程序在初始化期间设置。

因此,您可以依赖所设置的内容 - 但请注意“...绝对路径...”,而不是the绝对路径。

bash(至少最近的版本)会记住您在设置时遵循的符号链接$PWD(以及pwd内置)。command pwd(即外部命令)不会。因此,您会在那里得到不同的结果,这对您来说可能很重要,也可能不重要。使用pwd -P如果你想要一个没有符号链接的路径。

请注意pwd http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pwd.html文档指出:

如果应用程序设置或取消设置 PWD 的值,则 pwd 的行为是未指定的。

所以,不要这样做:)

简而言之,这里没有赢家。环境变量将存在于 POSIX shell 中,外部命令也可能存在内置命令。选择最适合您需要的一个,重要的是您是否关心符号链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于可移植性的 $PWD 与 pwd 的相关文章

  • Rails 4.1 环境变量未重新加载

    我创建了一个application yml文件在配置目录中并添加了一些键值对 即AWS REGION us east 1 我还添加了以下内容application rb读取文件并更新 ENV 哈希 if Rails env developm
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 正则表达式匹配bash变量

    我正在尝试修改 bash 脚本 当前脚本包含 print div class 1 div Where 1可能看起来像 Apprentice Historian Level 1 Historian Level 4 Master Histori
  • 测试 bash shell 脚本[重复]

    这个问题在这里已经有答案了 有人可以解释一下如何测试 bash shell 脚本吗 例如 我有一个 sh 文件 其中包含此代码 bin sh for file in txt do mv file basename file txt doc
  • Bash 中单行 while 循环的语法

    我无法找到分号和 或大括号的正确组合 我想这样做 但作为命令行中的一句 while 1 do foo sleep 2 done while true do foo sleep 2 done 顺便说一句 如果您在命令提示符下将其输入为多行 如
  • 如何wget目录中最新的文件

    我想编写一个 bash 脚本来下载并安装最新的每日构建程序 RStudio 是否有可能使wget仅下载目录中最新的文件http www rstudio org download daily desktop http www rstudio
  • 使用awk将列中的值替换为txt文件中的另一个值

    我是 Linux 和 awk 脚本编写的新手 我有 tab delim txt 文件 如下所示 AAA 134 145 Sat 150 167 AAA 156 167 Sat 150 167 AAA 175 187 Sat 150 167
  • 将 stdout 复制到 stderr

    我希望在 bash 下也将命令的标准输出复制到标准错误 就像是 echo FooBar FooBar FooBar 其中 是重定向表达式 那可能吗 将 tee 与 dev stderr 一起使用 echo FooBar tee dev st
  • 从 shell 脚本解析文件中的键/值的代码

    我有一个文件 需要使用 shell 脚本按键查找值 该文件如下所示 HereIsAKey This is the value 我怎样才能做类似的事情 MyVar Get HereIsAKey 然后 MyVar 应该等于 这就是值 键没有空格
  • 如何转义单引号字符串中的单引号

    比方说 你有一个 Bashalias like alias rxvt urxvt 效果很好 However alias rxvt urxvt fg 111111 bg 111111 不会起作用 也不会 alias rxvt urxvt fg
  • VSCode 集成终端不加载 .bashrc 或 .bash_profile

    我有以下文件来处理 shell 配置 bash profile if f bashrc then source bashrc fi and bashrc configure shell 如果我使用以下命令从命令行打开 VSCodecode
  • 为什么这个脚本不改变目录

    好吧 简单的 bash 脚本问题 别笑 我的脚本只是更改目录 echo on echo running script CURRENT DIR cd pwd 我可以看到它在 echo 中更改目录 但是当它完成时 我的终端仍然位于同一目录 有小
  • 在同一变量集行中组合多个 bash 参数替换,而不使用任何其他命令[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想要组合的示例 sVar whoami sVar sVar sVar sVar 1 Output 用户名第一个字符大写 要求 单线
  • 使用 Python 的 Popen 替换 Bash 风格的进程

    在 Bash 中 您可以轻松地将进程的输出重定向到临时文件描述符 并且所有这些都由 bash 自动处理 如下所示 mydaemon config file lt echo autostart True n daemonize True 或者
  • 比较两个文件的各自字段并以特定格式输出所需的内容

    我正在比较两个文件 food1 txt 文件并比较 food2 txt 文件 如下所示 cat food1 txt pizza 1ea chicken 5ea tooboo 4ea orange 2ea cat food2 txt pizz
  • 如何判断输入来自哪个键盘

    设想 我有一个 USB RFID 读取器 将其连接到笔记本电脑后 它可以用作新连接的 USB 键盘 例如无需安装任何驱动程序 当接触带有 RFID 标签的阅读器时 它进入我当前的窗口 例如终端 外壳 RFID 号码 例如0009339384
  • bash - 从文本文件中删除多行不同的文本

    我正在处理大量日志文件 并且大多数日志文件都有大量被记录多次的重复字符串 为了使与此类事情没有太多关系的其他人 也为我自己 轻松查看日志 我想制作一个脚本来删除一些可能对其他人造成 误报 的文本行 嘿管理员 我多次出现这些错误 gt 叹息
  • Bash IF:多个条件

    我已经尝试让这件事工作几个小时 但我无法让它工作 if P SFTP a PORT 22 P FTPS PORT 990 a PORT 21 then 有人能帮我吗 我知道多个条件可以这样写 if P SFTP PORT 22 then 但
  • PS1 定义中的条件 pwd

    我想显示当前工作目录如果我处于symlink比没有 到目前为止我已经 pwd P pwd echo 1 31m pwd P echo 1 32m pwd 将返回所需的输出 但它不能替代 w在命令提示符下 我尝试用反引号括起来 但这只会导致p
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip

随机推荐

  • 将数据框从长改为宽

    我有一些问题需要改变我的 df 的形状 Data id lt c 1 2 3 4 1 4 1 2 3 a lt c A B C D A D A B C b lt c 1 1 1 1 2 2 3 3 3 c lt c 12 10 12 23
  • Android 原生代码 fork() 存在 IPC/Binder 问题

    我有一个 Android 本机服务器应用程序编译为平台特权模块 可以自行分叉 该模块还使用 Android 服务 例如 SurfaceFlinger 我需要分叉才能为每个客户端分配一个沙盒进程 Fork 工作正常 父进程完全没有问题 但在子
  • 多选模式下具有 md-select 的 md-chips

    当我尝试从 md select 中选择多个值时生成 md chips 时 它不起作用 md chips 是否仅适用于自动完成分析器和输入字段
  • 当 HTTP Status 为 Bad Request 时 HttpResponseMessage 内容丢失

    var response new HttpResponseMessage HttpStatusCode BadRequest Content new StringContent Error in Validation ReasonPhras
  • 如何将代码重构为新文件并保留 git 历史记录?

    所以我想将一个大文件的一部分提取到一个新文件并保留 git 历史记录 这样我就可以运行git blame并查看重构之前的变化 In Git the history is the commits There is no file histor
  • Kafka Producer:使用回调处理异步发送中的异常

    我需要捕获异步发送到 Kafka 时的异常 Kafka生产者API带有一个函数send ProducerRecord record Callback回调 但是当我针对以下两种情况进行测试时 卡夫卡经纪人宕机 主题未预先创建 回调没有被调用
  • Kendo UI 图表 - 如何在加载数据时显示动画?

    我有一个用 JavaScript 生成的 KendoUI 图表 有没有办法用命令清除绘图区域 目的是在等待数据源读取远程数据时显示 正在加载 图像 Thanks 显示和隐藏加载动画是 Display progress kendo ui pr
  • Scala for 循环可以修改其范围之外的变量吗?

    例如假设我有以下内容 var lastSecurity def allSecurities for security lt lastTrade keySet toList lastSecurity security yield securi
  • -[GMSMapView animateToCameraPosition:]: 无法识别的选择器发送到实例

    大家好 我已经在我的应用程序上实现了谷歌地图 sdk 但我在这一特定行上遇到了错误 mapView GMSMapView mapWithFrame CGRectZero 相机 相机 任何人都可以帮我找到解决方案吗 请说明您使用的是哪个版本的
  • 将函数与 OUTER APPLY 一起使用时,返回值而不是 NULL

    使用内联函数时我得到奇怪的结果 这是代码 IF EXISTS SELECT FROM sys objects AS o WHERE name vendor relation users DROP FUNCTION dbo vendor re
  • Mongoid (Rails) 中的两个 1 - N 关系

    场景是 一个账户如何给另一个账户评分 这会导致帐户上出现两个列表 那些我评价过的人和那些评价过我的人 我的评分和给出的评分 这归结为 与同一实体的多个 1 N 关系如何在 Mongoid 中工作 在 Mongoid 的文档中 http mo
  • 如何以编程方式订阅对象的所有事件?

    我正在尝试订阅ALL由类似 WPF GridView 的第 3 方组件公开的事件 以便进行一些调试 除了建议这可能不是调试它的最佳方法以及类似的东西之外 我想知道是否可以做到这一点 对于路由事件 它工作正常 如下所示 var type tr
  • Windows 上基于 Android 配件的软件

    我想使用我的应用程序将我的计算机变成 Android 配件 因此 这将不是专门的硬件 而只是将手机切换到配件模式的 PC 从而在手机上启动一些与主机硬件关联的 Java 应用程序并创建通信通道 我找到了一个示例代码 http android
  • 在 Tensorboard 上显示图像(通过 Keras)

    My X test是 128x128x3 图像 我的Y test是 512x512x3 的图像 我想在每个纪元之后显示输入 X test 的外观 预期输出 Y test 的外观 以及实际输出的样子 到目前为止 我只知道如何在 Tensorb
  • 如何串联执行承诺?

    var promiseReturningFuncs for var i 0 i lt 5 i promiseReturningFuncs push askQuestion var programmers Promise reduce pro
  • 简化 Eclipse 中的完全限定名称

    有人知道 Eclipse 的一个插件 它可以用简单的类名和相应的导入 如果可能 替换完全限定的 Java 类名吗 如果可以作为保存操作来执行 那就更好了 No But you can use Add Import command Ctrl
  • 从文本文件中提取特定字段

    我有一个 csv 文件 其中包含超过 5k 个带有标题名称的字段 列 我只想将一些特定字段导入到我的数据库中 我正在使用本地 infile 来处理其他需要导入的较小文件 LOAD DATA LOCAL INFILE C wamp www i
  • 如何在 React hook 中创建新的 JSON 对象?

    我首先有两个问题 如何在挂钩中添加 更新 JSON 项目 另一个是 React 不允许我使用以前的 JSON 文件中存储的名称 基本上 我对其他解决方案持开放态度 因为我的输入字段是从 JSON 文件动态生成的 我不确定存储或访问输入到其中
  • 仅水平滚动的 Div 不起作用

    我有一个具有以下样式的 div height 200px overflow x scroll overflow y hidden width 682px 我需要元素在一行上彼此相邻 仅水平滚动 里面的元素有以下样式 width 60px p
  • 关于可移植性的 $PWD 与 pwd

    我正在编写一个 shell 脚本 它解析当前工作目录的路径 打印当前目录上方的所有基本名称 到目前为止 我一直在使用环境变量PWD解析路径 但我想知道是否 我可以信赖PWD始终被设置 在每个平台上给出相同的结果 使用pwd外壳内置 我需要这