这是我的问题,
在Windows中我正在创建一个zip文件,其中有一个文本.sh文件,应该在Linux中执行。 另一端的用户在Linux中打开zip文件并尝试执行.sh文件,但执行权限已经消失。因此,用户必须手动执行此操作(如此处所述:add execute permission。
我如何在Windows中生成.sh可执行文件并将其添加到zip文件中,这样当zip文件在linux中打开时,.sh文件仍然保留其执行权限(这样用户就不必手动执行) )
答案 0 :(得分:47)
据我所知,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
,因此不需要执行权限
答案 1 :(得分:7)
ZIP文件格式允许存储权限位,但Windows程序通常会忽略它。
然而,Cygwin上的zip
实用程序确实保留了x位,就像在Linux上一样。
如果您不想使用Cygwin,您可以获取源代码并进行调整,以便所有* .sh文件都可以设置可执行位。
或者写一个类似于解释here
答案 2 :(得分:3)
使用Info-Zip开源Zip实用程序可以实现这一点。如果使用 -X 参数运行unzip,则会尝试保留原始权限。如果源文件系统是NTFS并且目标是Unix,它将尝试从一个转换为另一个。我目前没有可用的Windows系统来测试翻译,因此您必须尝试哪些组需要获得执行权限。它会像“用户”或“任何用户”
答案 3 :(得分:0)
使用我的 windows 命令行实用程序 zip_exec.zip 为 linux/unix 和 mac 设置可执行标志(在使用 Windows 资源管理器和 7zip 创建的文件上进行测试)。 cpp source 也可用。在制作自己的实用程序之前,我在互联网上搜索了很多。可以修改它以设置任何文件属性。
答案 4 :(得分:-3)
这是不可能的。 Linux权限和Windows权限不会转换。它们是机器特定的。在文件到达目标系统之前,允许在文件上设置权限将是一个安全漏洞。