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実行可能と見なされます。最初の2文字が" #!"、" 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*

文書の内容:

アルファベット:

#! /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.")

関連情報