【问题标题】:What's the difference between unix built-in `pwd` command and it's $PWD environment variable?unix 内置 `pwd` 命令和它的 $PWD 环境变量有什么区别?
【发布时间】:2010-12-06 02:17:42
【问题描述】:

情况就是这样。 我有一个目录调用:- %/home/我的名字/

我在那个目录中做了一个软链接:- %cd /home/我的名字/ %ln -s /home/others/ .

现在,我从 /home/myname/ cd 到 others/ 这是有趣的部分。

当我执行 unix 内置 pwd 命令时,我得到了原始路径名:- %/家/其他/

但是当我回显 $PWD 环境变量时,我得到了链接路径名:- %/home/我的名字/其他/

为什么会这样?

【问题讨论】:

标签: linux unix pwd


【解决方案1】:
/var# ls -l lrwxrwxrwx 1 root root 10 Aug 22 13:21 邮件 -> 假脱机/邮件 drwxr-xr-x 2 root root 4096 Jul 1 20:58 opt drwxr-xr-x 22 根根 4096 12 月 5 日 17:38 运行 drwxr-xr-x 12 根根 4096 8 月 22 日 13:21 线轴 drwxrwxrwt 14 根 4096 12 月 6 日 02:46 tmp /var# cd 邮件 /var/mail# 回显 $PWD /var/邮件 /var/mail#密码 /var/邮件 /var/mail# /bin/pwd /var/spool/邮件

换句话说,使用$PWD 就足够了,因为无论如何pwd 可能不会给您更好的结果(对于任何更好的定义)。

为什么会这样? /bin/pwd 使用特定于操作系统的调用来确定当前的工作目录——在 Linux 的情况下,内核只保留已解析的目录(参见 /proc/self/cwd),而 shell 的密码包含 shell 认为它所在的目录。

【讨论】:

    【解决方案2】:

    /bin/pwd 外部命令和内置命令之间的区别在于,外部命令不知道是哪一组 cd 操作将您带到那里,因此不会假装您的当前目录位于某个位置。符号链接链;它为您提供从根目录到当前目录的直接路径,就像 realpath() 函数一样。

    在bash 中查看set -o physical。

    【讨论】:

      【解决方案3】:

      /bin/pwd 使用特定于操作系统的调用来确定当前工作目录。

      你有一个 Git 2.34(2021 年第四季度)的说明,它必须用 $PWD 替换 $(pwd),并解释了原因。

      参见Johannes Sixt (j6t) 的commit f6a5af0(2021 年 8 月 24 日)。
      (由 Junio C Hamano -- gitster -- 合并于 commit e18f4de,2021 年 9 月 8 日)

      t9001: PATH 不得使用 Windows 样式的路径

      签字人:Johannes Sixt

      在 Windows 上,$(pwd) 返回驱动器号样式路径 C:/foo,而 $PWD 包含 POSIX 样式 /c/foo 路径。
      当我们要在PATH变量中插入当前目录时,一定不能使用C:/foo样式,因为冒号的含义是不明确的。
      使用 POSIX 样式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-01
        • 2011-04-08
        • 2020-12-13
        • 2017-06-16
        • 2016-10-04
        • 2011-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多