Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-尝试执行shell脚本时权限被拒绝_Java_Command_Processbuilder_Chmod_Cd - Fatal编程技术网

Java-尝试执行shell脚本时权限被拒绝

Java-尝试执行shell脚本时权限被拒绝,java,command,processbuilder,chmod,cd,Java,Command,Processbuilder,Chmod,Cd,我正在创建一个Java程序,它将执行一个JAR文件,以便在我的机器上本地部署一个数据库。为了做到这一点,我需要从shell脚本执行JAR文件(这需要自动化,而不是手动部署) “java-jar一些jar SNAPSHOT.jar” 问题是,每当我尝试访问任何类型的shell脚本时,我都会得到error=13,权限被拒绝。我使用sudochmod777让我的目录为所有用户读、写、执行,以及JAR文件本身。即使我尝试更改目录,问题也会出现 下面是我用来执行命令的代码片段: String[]jarCo

我正在创建一个Java程序,它将执行一个JAR文件,以便在我的机器上本地部署一个数据库。为了做到这一点,我需要从shell脚本执行JAR文件(这需要自动化,而不是手动部署)

“java-jar一些jar SNAPSHOT.jar”

问题是,每当我尝试访问任何类型的shell脚本时,我都会得到error=13,权限被拒绝。我使用sudochmod777让我的目录为所有用户读、写、执行,以及JAR文件本身。即使我尝试更改目录,问题也会出现

下面是我用来执行命令的代码片段:

String[]jarCommand={“java-jarsomejarsnapshot.jar”};
Process Process=Runtime.getRuntime().exec(jarCommand);
System.out.println(“访问Jar文件”)

编辑:当我尝试执行简单命令时,会出现此权限问题,例如:

String[]cd={jarDirectory.getAbsolutePath(),“cd”};
Runtime.getRuntime().exec(cd)

这是在通过chmod设置文件权限之后进行的


我看了很多不同的、相似的问题,但没有一个解决方案能解决我的问题。非常感谢您的帮助。

我不知道为什么这会导致权限被拒绝,但这应该是正确的

String[] jarCommand = {"java", "-jar", "some-jar-SNAPSHOT.jar"};

否则,exec调用将查找一个名为“java-jar some jar SNAPSHOT.jar”的可执行文件,尽管我希望这会导致enoint而不是EPERM。

这与jar文件的执行权限无关。事实上,JAR文件只需要可读

如果您的问题标题准确,那么这是关于Java程序是否能够读取和执行您所说的shell脚本的问题:

  • shell脚本本身必须由尝试运行它们的有效用户执行。例如,脚本本身需要设置相关的执行位

  • shell脚本的路径需要从根目录一直可读(由有效用户…)。(如果使用点相对路径名,则为当前目录。如果使用简单命令名,则为目录$PATH…)


奇怪的是,这段代码根本不是试图运行shell脚本。这是一个简单的
java
命令。不涉及shell脚本

如果由于“权限被拒绝”错误而失败,则可能是
java
命令不可执行,或者JAR文件不可读

我认为你需要向我们提供更多的信息;e、 g.所有相关输出、真实代码、真实文件/目录名称和权限


我的程序首先尝试(通过CD)导航到包含JAR文件本身的目录:

我假设您意识到您的尝试:

    String[] cd = {jarDirectory.getAbsolutePath(), "cd"};
    Runtime.getRuntime().exec(cd);
不起作用。它更改子进程的当前目录,但这对父进程或运行的下一个子进程没有影响。您应该使用
ProcessBuilder
,特别是它的
目录(文件)
,它可以用于为子进程选择不同的当前目录


这意味着您可能位于错误的目录中,这可能会导致“权限被拒绝”问题。

嘿,谢谢您的回复。我的信息到处都是。我的程序首先尝试(通过CD)导航到包含JAR文件本身的目录:'code'字符串[]cdCommandRPM={jarDirectory.getAbsolutePath(),“CD”};'代码'where jarDirectory.getAbsolutePath=可以找到JAR文件的目录。我得到的权限被拒绝的错误,以及在这里,只是改变目录。我已经将JAR的根文件夹和特定文件夹设置为read、write、execute(以排除任何其他问题)@史蒂芬