在 Linux 中将文件夹作为可执行文件运行背后是否有某种哲学?
user@node main % ls -lash ./bin
total 0
0 drwxrwxrwx 2 user staff 64B May 23 21:04 .
0 drwxr-xr-x 6 user staff 192B May 23 21:04 ..
user@node main % ./bin
zsh: permission denied: ./bin
拒绝许可意味着可以允许。如果不是,那么为什么是它permission denied
而不是类似的东西can't run a directory
?
或者当目录以这种方式涉及时,这只是 API 的一个奇怪的工件?
PS 我知道 x 标志是采用在目录上下文中允许/拒绝 cd-ing 进入它们并长列出(ls -l)它们,这不是这个问题的目的。
PSS 在Python中,如果目录内部具有一定的文件结构,则可以将其视为Python“可执行文件”。 (即可以传递一个目录而不是要由 python 解释器运行的 python 文件)。
答案1
使用 Linux API 无法运行文件夹。尤其,execve
回报EACCES
当尝试这样做时 - 这就是 Zsh 所表示的“权限被拒绝”,可能是因为如果执行权限被拒绝,也可能返回该错误。规范的错误消息为EACCES
是“权限被拒绝”;execve
使用它来覆盖各种错误,包括任何尝试运行非常规文件的文件,这就是这里发生的情况。
大多数 shell 的行为与 Zsh 类似,但有一些 shell 的处理方式有所不同;例如,Bash 输出
bash: ./bin: Is a directory
autocd
还可以使用选项 ( )来指示 Zsh 通过更改文件夹来“运行”该文件夹setopt autocd
。如果您尝试运行fish,它总是会更改为文件夹。