Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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运行.sh文件_Java_Bash_Terminal_Command - Fatal编程技术网

使用java运行.sh文件

使用java运行.sh文件,java,bash,terminal,command,Java,Bash,Terminal,Command,我想用java运行一个.sh文件。我希望打开一个终端,然后我可以在同一个终端中执行另一个命令,最后销毁它。 我已经使用了ProcessBuilder,但无法实现这一点。 我的代码: ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter2.sh"); Process p = pb.start(); 这个方法以前在另一个代码中工作,但我不知道为什么它在我的代码中不工作 提前感谢您的程序是否输出错误,或者您的程序是否未与文件

我想用java运行一个.sh文件。我希望打开一个终端,然后我可以在同一个终端中执行另一个命令,最后销毁它。 我已经使用了ProcessBuilder,但无法实现这一点。 我的代码:

ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter2.sh");
Process p = pb.start();
这个方法以前在另一个代码中工作,但我不知道为什么它在我的代码中不工作


提前感谢

您的程序是否输出错误,或者您的程序是否未与文件交互

我建议在ProcessBuilder中尝试目录方法

Process p = null;
ProcessBuilder pb = new ProcessBuilder("baxter2.sh");
pb.directory("/home/omar/ros_ws");
p = pb.start();

如果这不起作用,您还应该查看您试图访问的文件的用户权限。

您如何知道它没有执行?也许你只是没有看到结果。在控制台中执行并打印后,您应该获得
p.getInputStream()
,如:

BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
   System.out.println(line);
}
另外,如果您使用的是jdk 7+,请尝试:

pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process p = pb.start();

我认为您应该使用下面的命令将.sh文件的可执行权限授予用于运行java程序的OS用户


chmodu+xbaxter2.sh

是的,我在java中没有错误。它只是没有效果。一旦我运行代码,它将正常结束,而不执行.sh文件。我看不出有什么不同。没有错误,也没有权限问题。关键是,当我更改不存在的.sh文件的路径时,它会抛出IOException,这已经打印了输出。我想了些什么。我制作了一个脚本,其中只包含打印当前目录的pwd,输出为“/home/omar/workspace/scriptrunner”,它是eclipse工作区的目录,而不是它的根目录。我该怎么解决呢?你是说之前的问题已经解决了?我不确定我是否理解你的解释,但这似乎是另一个问题,可能需要发布另一个问题。。。