看来 cygwin 认为所有文件都是可执行的:
/tmp> echo "echo abc" > a
/tmp> ls -l a
-rw-r--r-- 1 I063510 Domain Users 9 Apr 9 15:39 a
/tmp> ./a
abc
/tmp> cygcheck -c base-cygwin
Cygwin Package Information
Package Version Status
base-cygwin 3.8-1 OK
我确信这种行为最近有所改变。是否可以配置,以便不执行此类文件?
我甚至记得必须更改在 cygwin 内部创建的 .bat 文件的权限,以便可以从 Windows 命令提示符执行它,但我可能错了。
答案1
问题在于缺少 she-bang,因此文件由 shell 本身加载。
https://en.wikipedia.org/wiki/Shebang_%28Unix%29
$ echo 'echo abc' > a
$ ls -l a
-rw-r--r-- 1 marco Administrators 9 Apr 10 13:28 a
$ ./a
abc
$ echo '#!/bin/bash\recho abc' > a
$ ls -l a
-rw-r--r-- 1 marco Administrators 22 Apr 10 13:29 a
$ ./a
-bash: ./a: Permission denied