Linux 中可以“运行文件夹”吗?

Linux 中可以“运行文件夹”吗?

在 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,它总是会更改为文件夹。

相关内容