显示当前工作目录,区分 shell 维护的逻辑路径与内核返回的物理路径。
pwd 有两个来源:shell 内建的 pwd 和 /bin/pwd。内建版本默认使用 $PWD(逻辑路径),-P 时调用 getcwd(3) 取得物理路径;/bin/pwd 是 BSD 实现,同样支持 -L 和 -P。macOS 上没有 GNU 的 --logical、--physical 长选项。
默认的 -L 会保留你进入目录时使用的符号链接路径,所以同一目录经不同链接进入会显示不同结果;-P 会解析路径中的所有符号链接。脚本要拼接真实路径、比较两个目录是否相同,或者要写入配置文件时,用 pwd -P 更稳妥。macOS 的系统卷通过 firmlink 把 /Users 等路径接到数据卷,物理路径偶尔会显示 /System/Volumes/Data/... 形式,这是正常现象。
pwd 不需要参数就能工作,但在目录被删除后,逻辑路径仍可能显示旧值,而 pwd -P 会失败。脚本里不要假设 $PWD 永远与磁盘现状一致。
# 当前逻辑路径(可能是符号链接路径)
% pwd
# 解析所有符号链接后的物理路径
% pwd -P
# 对比 shell 内建与 /bin/pwd 的结果
% pwd -L
% /bin/pwd -P
# 用物理路径确认目录真实位置后再执行删除
% target="$(pwd -P)" && printf '%s\n' "$target"
# 检查当前目录的权限与所有者
% ls -ld "$(pwd -P)"
# 查看 shell 记录的 PWD 变量
% printf '%s\n' "$PWD"
pwd 与 pwd -P 结果不同不代表有错误,通常只是路径中存在符号链接。要判断是否同一目录,比较 ls -di 的 inode 或 pwd -P。$PWD 是 shell 变量,子进程、sudo 或某些 env -i 场景下可能为空或过期;需要可靠路径时执行 pwd -P,不要直接读变量。pwd 仍可能打印旧路径,pwd -P 则报 No such file or directory。用 cd ~ 离开后再操作。/bin/pwd 不支持 GNU 长选项,脚本从 Linux 迁到 macOS 时要把 pwd --physical 改成 pwd -P。cd .. 默认按逻辑路径回退,不一定回到物理父目录;需要物理行为时用 cd -P ..。pwd 的输出拼路径时不要假设没有空格或换行,变量引用一律加双引号。合上页面,先回答,再展开对照。
pwd 和 pwd -P 会给出不同结果?$PWD 不如执行 pwd -P 可靠?pwd 形式分别会怎样?pwd 显示逻辑路径,pwd -P 显示解析后的物理路径。$PWD 是 shell 变量,可能为空、过期或被环境覆盖;pwd -P 直接向系统查询当前目录。pwd 可能仍打印旧路径,pwd -P 通常报 No such file or directory。
小程序版
微信扫码,随时查命令