是否 CD .有用吗?

是否 CD .有用吗?

我一直在关注的教程之一简要指出cd .没有用。当尝试复制OP中显示的问题时符号链接递归 - 是什么让它“重置”?,我也尝试过cd .,它显示了与OP描述的相同的效果(不断增长的$PWD变量),这可以用 来抵消cd -P

这让我想知道,是否有任何情况下人们实际上想要使用cd .

答案1

我认为这是想多了的问题。cd .可能不是人们在通常情况下手动运行的东西,但它绝对是可以在编程执行中出现的东西(想想你可能会cd进入包含文件的目录的任何情况,其路径由用户提供)。因此,它不必有特定的用途:只要它满足 的通常语义cd <some-path>,它就是有用的。

答案2

自执行最后一个命令以来,目录的路径可能已更改,并且如果没有cd .bash 和 ksh93 shell,则将依赖于问题中链接的帖子中描述的逻辑工作目录,因此调用cd .这会使 shell 发出getcwd()系统调用将确保您的当前路径仍然有效。

在 bash 中重现的步骤:

  1. 在终端选项卡问题中mkdir ./dir_no_1; cd ./dir_no_1
  2. 在不同的终端选项卡问题中mv dir_no_1 dir_no_2
  3. 在第一个终端选项卡问题echo $PWDpwd.请注意,该目录已被外部重命名; shell 的环境尚未更新。
  4. 问题cd .; pwd; echo $PWD。请注意该值已更新。

不过,ksh93 不会更新环境信息,因此cd .在 ksh93 中实际上可能没用。在/bin/dashUbuntu 和其他基于 Debian 的系统上,cd .返回dash: 3: cd: can't cd to .错误,但cd -P .可以工作(与 ksh93 不同)。

答案3

另一个用例是cd .当您当前所在的目录已被删除然后再次创建时。考虑尝试以下方法 -

  1. 创建目录temp
  2. cd temp然后做一个ls
  3. 打开另一个终端并删除然后重新创建该目录temp
  4. 从第一个终端返回,尝试执行 ls。这会导致错误 -ls: cannot open directory .: Stale file handle
  5. cd .然后执行 ls 就可以了

答案4

从编程角度来说,它作为无操作很有用。考虑从外部输入提供的路径。

read -p "Path to file: " p
dirn=$(dirname "$p")
file=$(basename "$p")
echo "dirn=$dirn, file=$file"
cd "$dirn"
ls -ld "$file"

使用诸如“fred.txt”之类的路径,目录将变为.,导致cd .

相关内容