为何zsh命令行中输入`..`会出现permission denied错误?
zsh中输入
..返回permission denied的原因解析 当你在zsh里直接输入无空格的..时,zsh会把它识别为当前工作目录的父目录路径,而非未知命令或. .(空格分隔的两个点),具体解析逻辑如下:
- 路径优先匹配:zsh处理输入命令时,会先判断输入字符串是否为合法的文件/目录路径。
..是标准的相对路径标识,指向父目录,所以会被优先解析为路径,而非去$PATH里查找命令。 - 尝试执行路径目标:zsh会尝试执行这个路径指向的对象。由于
..是目录,系统会先检查该目录是否拥有执行权限(x权限):- 如果父目录没有给当前用户分配执行权限,就会直接返回
permission denied错误; - 如果父目录有执行权限,zsh会进一步发现它是目录而非可执行文件,此时会返回类似
..: is a directory的错误。
- 如果父目录没有给当前用户分配执行权限,就会直接返回
再对比你提到的两种情况:
- 若输入完全不存在的命令(比如
xyz123),zsh会遍历$PATH里的所有目录查找该命令,找不到才会返回command not found; - 若输入
. .(带空格),第一个.是zsh的内置命令source,作用是读取并执行指定文件,第二个.代表当前目录,由于source需要指定文件而非目录,所以会返回no such file or directory错误。
内容的提问来源于stack exchange,提问作者Sha2b
相关产品推荐
相关产品推荐

