chmod 不能在 minGW64 中工作,但可以在 Cygwin 中工作?

chmod 不能在 minGW64 中工作,但可以在 Cygwin 中工作?

我需要在 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.")

相关内容