我的shell脚本与我的java文件不同。此脚本仅包含ls
,用于打印当前目录中的文件。当我运行java项目时,它会打印java项目根目录中的文件,而不是shell脚本的根目录。我希望它在shell脚本的根目录中打印文件。
Java代码:
ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter3.sh");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
答案 0 :(得分:1)
然后,您应该将ProcessBuilder
实例的工作目录设置为您要观看的目录。您可以使用其方法directory(File directory)
。
见Javadoc of ProcessBuilder
所以在pb.start()
之前,为您的目录定义一个文件并将其分配给ProcessBuilder的实例。
File myDir = new File("/home/omar/ros_ws");
pb.directory(myDir);
pb.start();
答案 1 :(得分:0)
使用您可能需要的ProcessBuilder.directory
String path = "/home/omar/ros_ws/baxter3.sh";
ProcessBuilder pb = new ProcessBuilder(path);
pb.directory(new File(path).getParent());
答案 2 :(得分:0)
一个简单的解决方案:命令ls
可以使用多个参数运行。其中一个是文件参数,可以是目录。
来自ls
man page:
# List the contents of your home directory
$ ls ~
因此,只需将您在Java代码中硬编码的目录传递给shell脚本:"/home/omar/ros_ws/"
并通过$1
在shell脚本中访问它。
所以你的shell脚本看起来像:
#!/bin/bash
ls $1
通过以下方式从java调用shell脚本:
ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter3.sh /home/omar/ros_ws/");
// other code omitted for brevity