【问题标题】:pwd output after moving current working directory to a new location将当前工作目录移动到新位置后的 pwd 输出
【发布时间】:2014-03-04 19:53:37
【问题描述】:

我有一个关于为什么会发生这种情况的一般性问题,以及对“密码”的误解。

您从目录 /test 开始,其中有 /test/folder1。

文件夹 1 有:file1.txt

在 2 个单独的终端中,我们“cd /test”,然后执行“ls”并发现 folder1 作为这两个终端的输出。

我们现在在 1 号终端上“cd folder1”。 2 号航站楼仍在 /test 中。

如果我们然后在终端 2 上执行“mv folder1 folder2”并运行“ls”,我们将得到 folder2 作为输出。清楚地表明我们的 mv 是成功的。

但是,在终端 1(位于 /test/folder1 中)内,如果我们运行“pwd”,则输出仍然是 /test/folder1。即:它并不反映我们已经将文件夹移动到 /test/folder2。

为什么会这样?我可以理解为什么如果我们要编辑 file1.txt 它只是文件系统中应该指向同一个文件的指针。事实上,您可以在每个终端中修改文件并在另一个终端中查看编辑。但是,为什么“pwd”命令不再反映该目录的实际路径?

谢谢!

【问题讨论】:

    标签: unix filesystems pwd


    【解决方案1】:

    假设您使用的是 bash,pwd 会向您显示 PWD 环境变量的值,当您使用 cd 更改目录时会更新该值。 folder1 目录更改名称不会导致 bash 更新 PWD。但是,您可以找到目录已更改名称的证据:

    • pwd -P 将显示目录的新名称。
    • ls -l /proc/self/cwd 将链接到新名称。

    【讨论】:

      【解决方案2】:

      我认为只是第一个终端没有理由重新评估它的位置。如果您在第一个终端执行以下命令

      cd .
      

      你会看到你当前的工作目录确实随着重命名而改变了 (mv)。

      【讨论】:

      • “pwd”调用不应该总是反映正确的目录路径吗?我知道这将需要通知目录已被移动到所有进程(不可行)或更准确地表示这一点的“pwd”的更强大的实现。我只是想知道是否有更多技术经验的人能回答为什么不这样做。
      • /bin/pwd 是正确的,但是 shell 的内置 pwd 的快捷方式使它出错 - 速度的代价。
      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多