直接用pwd命令即可查看当前绝对路径;默认为逻辑路径(含符号链接),需物理路径时用pwd -P。

直接用 pwd 就行,不需要额外安装或配置。 它输出的就是当前 shell 所在位置的绝对路径,绝大多数场景下这就是你要的答案。别被“绝对路径”这个词绕晕——pwd 默认输出的本来就是绝对路径,只是它可能包含符号链接(逻辑路径),这点需要根据用途判断是否要绕过。
为什么 pwd 有时看起来不像“真实路径”?
因为默认行为是 pwd -L(logical),它照搬环境变量 $PWD 的值,而 $PWD 可能是在你用 cd 进入某个符号链接目录时被 shell 自动记录下来的。比如:
- 你执行了
cd /home/user/logs,而/home/user/logs实际是/var/log/myapp的软链接 - 此时
pwd输出/home/user/logs,但文件物理上在/var/log/myapp - 如果你要脚本里做文件操作、备份或硬链接判断,这个“看起来对”的路径反而会出错
这时候得用 pwd -P,它强制解析所有符号链接,返回实际所在的物理路径。
realpath . 和 readlink -f . 有什么区别?
两者都能得到规范化后的绝对路径,但行为细节不同:
-
realpath .:自动处理..、.、重复斜杠,并递归解析符号链接;路径不存在时会报错(除非加--no-symlinks) -
readlink -f .:更底层,不依赖 GNU 工具链,兼容性略好;但要求目标“最终可访问”,如果中间某级符号链接指向不存在的路径,它会失败 - 两者都不修改当前环境,只输出结果,适合写进脚本做路径标准化
例如:realpath ../config/../config/nginx.conf 会输出 /etc/nginx/nginx.conf;而 readlink -f ../config/../config/nginx.conf 在路径存在前提下结果一致,但若 ../config 是坏链接,readlink -f 直接退出非零状态。
脚本里该用 $PWD 还是 pwd?
优先用 $PWD,除非你需要物理路径:
-
$PWD是 shell 内置变量,无进程开销,稳定可靠;pwd是命令,哪怕它是 builtin,调用仍有轻微成本 -
$PWD和pwd -L行为完全一致,但不能替代pwd -P - 拼接路径时直接写
"$PWD/../target"比"$(pwd)/../target"更快更安全 - 注意必须加双引号:
"$PWD",否则含空格或特殊字符的路径会崩
真正容易被忽略的是:某些容器或 chroot 环境中,$PWD 可能没被正确初始化,这时 pwd -P 才是兜底方案。


















