我一直在关注的教程之一简要指出cd .
没有用。当尝试复制OP中显示的问题时符号链接递归 - 是什么让它“重置”?,我也尝试过cd .
,它显示了与OP描述的相同的效果(不断增长的$PWD
变量),这可以用 来抵消cd -P
。
这让我想知道,是否有任何情况下人们实际上想要使用cd .
?
答案1
我认为这是想多了的问题。cd .
可能不是人们在通常情况下手动运行的东西,但它绝对是可以在编程执行中出现的东西(想想你可能会cd
进入包含文件的目录的任何情况,其路径由用户提供)。因此,它不必有特定的用途:只要它满足 的通常语义cd <some-path>
,它就是有用的。
答案2
自执行最后一个命令以来,目录的路径可能已更改,并且如果没有cd .
bash 和 ksh93 shell,则将依赖于问题中链接的帖子中描述的逻辑工作目录,因此调用cd .
这会使 shell 发出getcwd()
系统调用将确保您的当前路径仍然有效。
在 bash 中重现的步骤:
- 在终端选项卡问题中
mkdir ./dir_no_1; cd ./dir_no_1
- 在不同的终端选项卡问题中
mv dir_no_1 dir_no_2
- 在第一个终端选项卡问题
echo $PWD
和pwd
.请注意,该目录已被外部重命名; shell 的环境尚未更新。 - 问题
cd .; pwd; echo $PWD
。请注意该值已更新。
不过,ksh93 不会更新环境信息,因此cd .
在 ksh93 中实际上可能没用。在/bin/dash
Ubuntu 和其他基于 Debian 的系统上,cd .
返回dash: 3: cd: can't cd to .
错误,但cd -P .
可以工作(与 ksh93 不同)。
答案3
另一个用例是cd .
当您当前所在的目录已被删除然后再次创建时。考虑尝试以下方法 -
- 创建目录
temp
cd temp
然后做一个ls
- 打开另一个终端并删除然后重新创建该目录
temp
- 从第一个终端返回,尝试执行 ls。这会导致错误 -
ls: cannot open directory .: Stale file handle
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 .