在 中bash 4.4.12
说help cd
:
Options: -L force symbolic links to be followed: resolve symbolic links in DIR after processing instances of `..' -P use the physical directory structure without following symbolic links: resolve symbolic links in DIR before processing instances of `..' -e if the -P option is supplied, and the current working directory cannot be determined successfully, exit with a non-zero status -@ on systems that support it, present a file with extended attributes as a directory containing the file attributes
我很难理解这些词,而且我的谷歌搜索引擎也找不到任何东西。
cd -P
什么时候会优先于 的例子是什么cd
?cd -L
与标准有何不同cd
?- 怎么可能无法成功确定工作目录呢?
- 使用的例子是什么
-@
?
答案1
这bash手册给出了更多细节。
cd -P
确保你最终得到一条“真实”的路径:$ cd /tmp $ mkdir -p a/b $ ln -s a/b b $ cd b $ pwd /tmp/b $ cd -P ../b $ pwd /tmp/a/b
使用意味着从到 的
-P
符号链接被取消引用。与is 的交互通常通过删除前一个路径组件(如果有)来处理;不是通过检查磁盘上的路径。如果您使用大量符号链接,这最终会变得非常混乱。b
a/b
..
..
cd -L
相当于默认的cd
。无法确定当前工作目录是否已被删除:
$ cd /tmp $ mkdir -p c/d $ cd c/d $ rmdir ../d ../../c $ cd ..; echo $? cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 0
v.
$ cd -Pe ..; echo $? cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory 1
我对此不太确定(我可以想象它会是什么样子,但 Bash 只是说“
cd
::-@
无效选项”;我的印象是这目前仅在 Solaris 上可用,它需要O_XATTR
)。