这是我的问题,
在 Windows 中,我正在制作一个 zip 文件,其中有一个应该在 Linux 中执行的文本 .sh 文件。另一端的用户在 Linux 中打开 zip 文件并尝试执行 .sh 文件,但执行权限已消失。所以用户必须手动完成(就像这里解释的:添加执行权限。
我如何在 Windows 中制作 .sh 可执行文件并将其添加到 zip 文件中,以便当 zip 文件在 linux 中打开时 .sh 文件仍保留其执行权限(这样用户不必手动执行)
这是我的问题,
在 Windows 中,我正在制作一个 zip 文件,其中有一个应该在 Linux 中执行的文本 .sh 文件。另一端的用户在 Linux 中打开 zip 文件并尝试执行 .sh 文件,但执行权限已消失。所以用户必须手动完成(就像这里解释的:添加执行权限。
我如何在 Windows 中制作 .sh 可执行文件并将其添加到 zip 文件中,以便当 zip 文件在 linux 中打开时 .sh 文件仍保留其执行权限(这样用户不必手动执行)
据我所知,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,您可以将脚本全部放在一行中,但我发现单独的行更容易在 vim 和 shell 脚本命令中使用。)
现在你的解压缩单线变成:
unzip zip_name.zip && source grant_perms.sh
请注意,由于您source
用于运行grant_perms.sh
,因此不需要执行权限
ZIP 文件格式确实允许存储权限位,但 Windows 程序通常会忽略它。然而,Cygwin 上的zip
实用程序确实保留了 x 位,就像它在 Linux 上一样。如果您不想使用 Cygwin,您可以获取源代码并对其进行调整,以便所有 *.sh 文件都设置可执行位。或者写一个像这里解释的脚本
Use my windows command line utility zip_exec.zip to set the executable flag for linux/unix and mac (tested on files created with Windows Explorer and 7zip). The cpp source is also available. I searched the internet a lot before making my own utility. It can be modified to set any file attribute.
这是不可能的。Linux 权限和 windows 权限不转换。它们是特定于机器的。允许在文件到达目标系统之前对其设置权限将是一个安全漏洞。