pwd默认显示逻辑路径而非物理路径,因它依赖shell缓存的$pwd变量而不解析符号链接;pwd -p才调用内核展开所有软链接返回真实路径。

直接用 pwd 就能拿到当前目录的完整路径,但结果是否“真实”取决于你用的是逻辑路径还是物理路径——这在有符号链接的场景下会出问题。
为什么 pwd 有时显示的不是磁盘上真实的路径?
默认的 pwd 输出的是“逻辑路径”,也就是你一路 cd 过来的路径,中间经过的符号链接不会被展开。比如你 cd /home/user/web,而 /home/user/web 是个指向 /var/www/html 的软链接,pwd 仍会输出 /home/user/web。
- 这是 shell 自己缓存的路径(存在
$PWD变量里),不触发系统调用 -
pwd -P才会真正调用内核,解析所有符号链接,返回物理路径 -
pwd -L(等价于不加参数)强制走逻辑路径,极少需要显式写
pwd 和 $PWD 有什么区别?能随便混用吗?
大多数时候它们输出一样,但行为本质不同:前者是命令,后者是 shell 维护的变量。关键差异在于变量可能被手动篡改或未及时同步。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
echo $PWD快、轻量,适合脚本里拼路径,如cp file.txt $PWD/../backup/ -
pwd是独立进程,结果更“权威”,尤其当你怀疑$PWD被污染时(比如某些 zsh 插件或自定义函数改过它) - 别写
$pwd(小写),这个变量不存在,只会输出空字符串 - 在子 shell 或管道中,
$PWD仍有效;$(pwd)则保证执行一次新命令
脚本里该用 pwd 还是 $PWD?
优先用 $PWD,除非你明确需要物理路径或怀疑环境异常。
- 部署脚本、备份任务必须用
pwd -P,否则软链接可能导致文件写错位置 - 简单日志记录或路径拼接,
$PWD更高效,且 bash/zsh 都保证它与当前逻辑路径一致 - 不要在
cd后立刻读$PWD并假设它已更新——bash 中cd会同步更新,但某些兼容模式或旧版本 shell 可能延迟 - 跨 shell 可移植脚本建议统一用
pwd -P,避免 zsh 的setopt chase_links等行为干扰
最常被忽略的是:你看到的提示符路径(比如 user@host:/path$)只是 PS1 渲染结果,可能被截断、缩写(~)、甚至完全禁用——它不是事实来源。真要确认位置,就敲 pwd -P,哪怕多按两个键。










