游乐游手机版
首页/系统平台/文章详情

Linux使用realpath获取绝对路径的方法

时间:2026-06-22 11:14
realpath可获取绝对路径,默认要求路径存在并解析符号链接;加-s保留链接,加-m处理不存在路径。批量处理建议一次传多个参数。脚本中获取自身目录推荐realpath "$0 ",注意-m避免路径不存在时报错。

在 Linux 系统中,直接调用 realpath 即可获取绝对路径,无需手动检测当前目录或拼接 $PWD 变量。不过有一个关键点容易被忽视:默认情况下,若目标路径不存在,realpath 会直接抛出错误,这类细节在实际脚本编写时最容易导致异常。

realpath 默认会解析符号链接,同时要求路径必须存在;若想保留链接本身,请使用 -s 选项;当路径可能尚未存在时,加上 -m 即可避免报错;批量处理多个路径时,一次性传入多个参数比循环更稳定可靠;在脚本中获取自身所在目录,推荐采用 realpath "$0" 的方式。
Linux怎么使用realpath获取绝对路径

realpath 解析符号链接时默认追踪,不加选项即返回真实目标路径

举例来说,/usr/bin/python 通常是一个软链接,实际指向 /usr/bin/python3.10。执行以下命令:

realpath /usr/bin/python

输出结果为 /usr/bin/python3.10,而非链接本身。这一行为与 readlink -f 完全一致。

  • 若想保留链接路径、不进行解析?加上 -s--no-symlinks 即可。
  • 如果只想解析部分层级(例如父目录包含 ..,但链接本身不需要追踪)?使用 -L 选项,不过实际应用中极少用到。
  • 脚本中如果依赖“链接即路径”的逻辑,遗漏 -s 可能导致后续的 cptest -e 判定出错,这是常见的陷阱。

路径不存在时 realpath 默认报错,需用 -m--canonicalize-missing

尝试执行 realpath nonexistent/file.txt,你会看到类似 realpath: nonexistent/file.txt: No such file or directory 的错误信息,并返回非零退出码——这对脚本中的条件判断来说是个硬伤。

  • 若希望它安静地返回规范化路径(例如 /home/user/nonexistent/file.txt),必须加上 -m
  • -e(默认隐含)要求所有中间目录都存在;-m 则放宽限制,只做字符串层面的规范化处理。
  • 如果路径中包含 ../ 且上层目录不存在,-m 仍然能计算出逻辑路径,但之后用 test -d 等命令操作时仍会失败——这一点需要提前预判。

批量处理多个路径时,realpath 单次调用比循环更可靠

传入多个参数,realpath 会按顺序逐个输出,每行一个:

realpath ./a ../b/c /tmp/link

相比编写 for p in ./a ../b/c /tmp/link; do realpath "$p"; done 更简洁,也能避免子 shell 环境变量污染或引号处理带来的麻烦。

  • 路径中包含空格?加上 -z 让输出以 \0 分隔,配合 xargs -0 可以安全地消费。
  • 想让结果相对于某个目录(例如部署时统一转换为相对路径)?使用 --relative-to=/opt/app 即可。
  • 切勿直接使用 realpath * 展开通配符——如果当前目录没有匹配项,shell 会原样将 * 传给 realpath,导致报错。

Shell 脚本中获取自身所在目录,realpath "$0" 是最稳健的写法

许多人习惯使用 cd "$(dirname "$0")"; pwd,但这种方式会改变当前工作目录,并且在涉及符号链接时容易失效。

  • 正确的做法:SCRIPT_DIR=$(dirname "$(realpath "$0")")
  • 如果脚本可能通过符号链接调用,而你希望定位符号链接所在的目录(而非目标位置),则使用 dirname "$(realpath -s "$0")"
  • realpath 在绝大多数 Linux 发行版中属于 coreutils,无需额外安装;但像 Alpine 这类精简系统需要先执行 apk add coreutils

真正容易被忽略的是:realpath 对路径中每个组件的存在性默认敏感,而脚本往往需要处理“即将被创建”的路径。不加 -m 的调用,在 CI/CD 或容器初始化阶段极易静默失败,这点值得格外留意。

来源:https://www.php.cn/faq/2678183.html
上一篇Mac安装来源不明第三方软件的方法 下一篇Linux下MySQL查询超时限制配置方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
微软详解Win11时间点还原 默认每24小时创建恢复点
系统平台 · 2026-06-30

微软详解Win11时间点还原 默认每24小时创建恢复点

微软今日推送了最新的 6 月可选更新,并发布博客详细解读了 Win11 全新的“时间点还原”(Point-in-time restore)功能——这一功能本质上是对系统恢复体验的一次全面升级,旨在让用户更轻松地应对电脑故障。 微软表示,面向 Windows 11 客户端用户的“时间点还原”功能现已正

Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验
系统平台 · 2026-06-30

Win11 26H1六月可选更新KB5095091 优化放大镜改善装机体验

微软今天推送了Windows 11 26H1设备的6月可选更新KB5095091,安装完成后系统版本号会升级到Build 28000 2340。值得一提的是,这次更新并非面向所有设备,而是专门为搭载高通骁龙X2系列芯片的机型准备的——包括骁龙X2 Plus、X2 Elite和X2 Elite Ext

Win11六月可选更新KB5095093修复回收站弹窗异常
系统平台 · 2026-06-30

Win11六月可选更新KB5095093修复回收站弹窗异常

微软已悄然推送Windows 11六月可选更新,编号KB5095093。本次更新覆盖两个版本:24H2用户安装后版本号升级至Build 26100 8737,而25H2用户则更新至Build 26200 8737。 本次更新并非仅是小修小补,而是带来了多项实质性新功能。下面我们就来详细解析这些更新内

苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞
系统平台 · 2026-06-30

苹果macOS 27 Beta2封堵Siri AI跳过候补名单漏洞

科技媒体 Cult of Mac 昨日(6月23日)发布博文指出,苹果在 macOS 27 Beta 2 更新中悄然封堵了一个此前可用的后门——用户曾能通过一条终端命令绕过候补名单,直接启用新版 Siri AI,如今这一方法已失效。 简要回顾一下:在 macOS 27 Beta 1 阶段,只需在 M

微软加速Win11 25H2推送 覆盖所有符合条件家用PC
系统平台 · 2026-06-30

微软加速Win11 25H2推送 覆盖所有符合条件家用PC

近日(6月23日),科技媒体 Windows Latest 发布了一则值得关注的动态:微软已进一步扩大 Windows 11 25H2 的推送范围,所有满足硬件要求、且不受 IT 部门管理的家庭版和专业版设备,现在均可顺利接收本次更新。 此次升级有一个显著特点——采用“启用包”(eKB)方式进行推送