Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么'cd..'反映符号链接遍历,而'ls..'不反映符号链接遍历?_Linux_Bash_Shell_Ls_Cd - Fatal编程技术网

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%/*}"