我需要在 win10 上进行一些文件权限更改,虽然我可以在 cygwin 下运行此命令,但不能在 git bash minGW64 中运行,有人可以帮忙解释一下原因吗?
来自 cygwin 终端的结果:
$ chmod 777 testfile
$ ls -l
total 0
-rwxrwxrwx 1 Jon Domain Users 0 Nov 1 11:57 testfile
但在 mingw64 中:
$ touch test
-rw-r--r-- 1 jon 1049089 0 Nov 1 12:17 test
$ chmod 777 test
$ ll
-rw-r--r-- 1 jon 1049089 0 Nov 1 12:17 test
当我使用 chmod 时,我什至没有收到错误消息。
如何解决问题以使 chmod 正常工作?
答案1
Cygwin 尝试使用 Windows 更复杂的 ACL 来模拟 POSIX 基本权限。明威没有。
但是,您并非没有选择。来自Cygwin 文档(同时影响两者):
.exe
以某些扩展名 ( 、.com
、 )结尾的文件.lnk
被假定为可执行。前两个字符为“#!
”、“MZ
”或“:\n
”的文件也被视为可执行。
请注意,如果您愿意,该:
选项意味着您也可以对文件执行此操作。.bat
编辑:我错过了这是使用 git bash 的事实;如果这是一个 git 存储库,则不需要使用 chmod,而是可以直接告诉 git 你想要什么:
git update-index --chmod=+x setupscript.sh
答案2
这并不能完全回答如何在 MinGW 上工作的问题chmod
(它不会),但它确实获得了在输出中显示的正确权限位,并在ls
键入后启用可执行文件的自动完成./
<选项卡>。
因此,如果
- 可以修改该文件,并且
- 有问题的可执行文件由解释器运行,
添加适当的 shebang 作为文件的第一行MinGW 自动认为它是可执行的。
例如,我们获得如下所示文件的以下权限。请注意,不需要特定的文件扩展名。
$ ll
total 3
-rwxr-xr-x 1 user 197121 47 Oct 13 07:14 abc*
-rw-r--r-- 1 user 197121 43 Oct 13 07:14 def
-rwxr-xr-x 1 user 197121 49 Oct 13 07:16 ghi*
文件内容:
ABC:
#! /bin/sh
echo I show as an executable.
定义:
echo I do NOT show as executable, though `./def` will run me.
吉:
#! /c/Python39/python
print("MinGW sees me as executable too.")