如何让我的目录为我的Java程序创建的脚本文件提供可执行权限?

时间:2016-12-11 20:06:38

标签: java linux shell

我希望我的目录为我运行Java程序后将在该目录中创建的所有shell脚本提供可执行权限(默认情况下)。我尝试了以下命令:

setfacl -d -m group:name:rwx /path/to/your/dir

find ./ -name "*.sh" -exec chmod +x {} \;

第一个没有显示任何响应,而第二个工作正常但我必须在我的Java程序创建所有脚本后在终端中手动执行此命令。这不是我所寻求的。我想要这个东西是自动的。这是我想要实现的目标:

我的Java程序在目录中创建.sh文件。 现在该程序将尝试执行此脚本文件。

这是一个Java代码片段,展示了如何执行脚本文件:

    ExecuteShellComand obj = new ExecuteShellComand();        
    String command2 = "./script.sh";
    String output2 = obj.executeCommand(command2);

除非我向script.sh提供可执行权限,否则它不会运行。我该怎么做?它有什么办法吗?如果我没有以某种方式做某事应该做,请随意提出你的建议。感谢

1 个答案:

答案 0 :(得分:1)

默认ACL权限由openmkdir系统调用中指定的文件创建模式屏蔽。

由于文件通常使用默认模式0666创建,因此执行权限将被屏蔽而不是继承。

创建文件以使用正确的权限创建文件的程序负责。如果在创建脚本时正确设置权限,则根本不需要ACL或chmod。解决此问题的最佳方法是让您的程序将open调用中的模式设置为0777。

Java似乎有Files.createFile。另外,事后你有一个更模糊的File.setExecutable来做这件事,这不是Unix的规范行为,但可能对你的用例很好。