web-dev-qa-db-ja.com

Linuxで実行されるWindowsの.shファイルに実行権限を割り当てる方法

これが私の問題です

Windowsでは、Linuxで実行されることになっているテキスト.shファイルがあるZipファイルを作成しています。反対側のユーザーは、LinuxでZipファイルを開き、.shファイルを実行しようとしますが、実行許可は失われます。そのため、ユーザーは手動で行う必要があります(ここで説明するように: 実行権限を追加

Windowsで.sh実行可能ファイルを作成してZipファイルに追加すると、LinuxでZipファイルを開いたときに.shファイルの実行権限が保持されます(ユーザーが手動で実行する必要がなくなります)。

41
C graphics

私の知る限り、Linuxの許可システムは、あなたが達成しようとしていることを正確に防ぐように設定されています。

あなたができる最善のことは、プロンプトで実行するカスタムの解凍ワンライナーをLinuxユーザーに与えることだと思います:

unzip Zip_name.Zip && chmod +x script_name.sh

実行許可を与える必要があるスクリプトが複数ある場合は、次のようにgrant_perms.shを記述します。

#!/bin/bash
# file: grant_perms.sh

chmod +x script_1.sh
chmod +x script_2.sh
...
chmod +x script_n.sh

(chmodの場合、スクリプトをすべて1行に配置できますが、vimおよびシェルスクリプトコマンドで作業する方が簡単であることがわかりました。)

そして今、あなたの解凍ワンライナーは次のようになります:

unzip Zip_name.Zip && source grant_perms.sh

sourceを使用してgrant_perms.shを実行しているため、実行許可は必要ないことに注意してください。

47
sampson-chen

Zipファイル形式では許可ビットを保存できますが、Windowsプログラムは通常それを無視します。ただし、CygwinのZipユーティリティは、Linuxの場合と同様にxビットを保持します。 Cygwinを使用したくない場合は、ソースコードを取得し、すべての* .shファイルが実行可能ビットセットを取得するように調整できます。または、説明されているようなスクリプトを記述します here

7
jmster

これは、 Info-Zip オープンソースZipユーティリティを使用して可能です。 unzip-Xパラメーターを指定して実行された場合、元の許可を保持しようとします。ソースファイルシステムがNTFSで、宛先がUnixの場合、一方から他方への変換を試みます。現在、翻訳をテストするためのWindowsシステムはありません。そのため、実行許可を付与する必要があるグループを実験する必要があります。 「ユーザー」または「すべてのユーザー」のようなものになります

3
itsbruce