Linux 为什么'cd..'反映符号链接遍历,而'ls..'不反映符号链接遍历?
表示“列出上层目录的文件和目录” 当我在符号链接后更改目录时,Linux 为什么'cd..'反映符号链接遍历,而'ls..'不反映符号链接遍历?,linux,bash,shell,ls,cd,Linux,Bash,Shell,Ls,Cd,表示“列出上层目录的文件和目录” 当我在符号链接后更改目录时,ls..不在符号链接后。它只显示真正的上层目录 例如,当目录结构如下所示时 ls .. (sub@是指向sub目录的符号链接) ls..命令在cd a/b/sub之后,当我在r/sub中时,在r目录下给出文件。不是b目录的。但是cd..命令将我带到b目录 如何使用ls命令显示目录b中的文件?一个目录不知道您使用了什么符号链接来访问它。是指向实际父目录的实际目录项。但是当您使用shell命令cd..时,bash会作弊。它知道您使用什么
ls..
不在符号链接后。它只显示真正的上层目录
例如,当目录结构如下所示时
ls ..
(sub@
是指向sub
目录的符号链接)
ls..
命令在cd a/b/sub
之后,当我在r/sub
中时,在r
目录下给出文件。不是b
目录的。但是cd..
命令将我带到b
目录
如何使用
ls
命令显示目录b
中的文件?一个目录不知道您使用了什么符号链接来访问它<代码>。是指向实际父目录的实际目录项。但是当您使用shell命令cd..
时,bash会作弊。它知道您使用什么路径到达那里(在$PWD
中),因此它只删除该路径的最后一个组件并更改结果目录
通过使用“${PWD%/*}”
而不是,您可以自己使用相同的技巧来使用其他命令。
:
r ┬ a - b - sub@
└ sub
请不要使用
${PWD%/*}
;这有几个问题。改用$(dirname$PWD)
。@fuzzxl什么问题?我所知道的唯一一个例子是dirname
返回
,替换将不适用于这里。@fuzzxl,如果您要尝试推广最佳实践,至少让它成为dirname“$PWD”
。否则,创建的bug比修复的要多。@EtanReisner对,$(dirname“$PWD”)
甚至更好。替换在路径(如foo//bar)或根目录上无法正常工作。它也可能在相对路径上失败。它在foo/bar/
上也会失败dirname
使用子shell来处理所有可能的情况。然后,如果您仍然要使用子shell,您可以只使用(cd..&&ls)
。函数呢<代码>符号()(cd“$@”和&ls)
?你可以像symls..
那样使用它,或者疯狂地执行symls-P..
来完全取消对路径的引用。你为什么要对一个明显离题的问题进行投票?@m0skit0 Shell脚本正在编程。这个问题在超级用户、Unix和堆栈溢出之间是重叠的。@fuzzxl,shell脚本是编程,我坚信这一点(作为一个在“bash”和“shell”中都拥有金质徽章的人),但我仍然不相信这是一个很好的匹配。这更像是“基本UNIX工具的行为如何?”,而不是任何与脚本化使用特别相关的内容。可能与@fuzzxl重复在问题中没有说明这是一个脚本。当然,问题不在于脚本编写,而在于工具本身。
ls "${PWD%/*}"