跳转到内容

pwd

pwd(print working directory)用于打印当前工作目录的绝对路径,常用来确认自己在哪,或在脚本里取出当前路径。

Terminal window
pwd [选项]

不接受路径参数,只输出当前目录

两种路径的差别来自记账方式的不同:

  • 逻辑路径直接读环境变量 $PWD,这个值是历次 cd 拼出来的,所以保留了走过的软链接
  • 物理路径不看 $PWD,靠 inode 一级级向上回溯,得到内核眼里那条唯一的真实路径
Terminal window
ln -s /var/log/nginx weblog
cd weblog
pwd # /home/bdathe/weblog
pwd -P # /var/log/nginx

软链接想建几条建几条,所以同一个目录的逻辑路径可以有很多条,但物理路径只有一条

选项 说明
-L 输出逻辑路径(logical),路径里的软链接原样保留,shell 内建 pwd 的默认行为
-P 输出物理路径(physical),把软链接全部解析成真实路径

1. 在脚本里取当前目录

Terminal window
here=$(pwd)
cd /tmp && do_something
cd "$here"

直接用 $PWD 效果一样,还省掉一次命令替换带来的进程创建

2. 内建 pwd 与 /bin/pwd

Terminal window
type pwd # pwd is a shell builtin
pwd # 内建,默认 -L
/bin/pwd # coreutils 的外部命令,未设 POSIXLY_CORRECT 时默认 -P

两者默认行为不一致,脚本里要哪种就显式写 pwd -L 或 pwd -P,别赌默认值

3. 和 readlink -f 的关系

Terminal window
pwd -P
readlink -f .

结果相同 pwd -P 只管当前目录,readlink -f 能对任意路径求真实路径,见 ln