运行 使用 java 来自其自身根目录的 .sh 脚本
run a .sh script from its own root using java
我的 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);
}
使用ProcessBuilder.directory,你可能想要
String path = "/home/omar/ros_ws/baxter3.sh";
ProcessBuilder pb = new ProcessBuilder(path);
pb.directory(new File(path).getParent());
然后您应该将 ProcessBuilder
实例的工作目录设置为您要观看的目录。你可以做的就是使用它的方法directory(File directory)
。
参见 Javadoc of ProcessBuilder
所以在 pb.start()
之前,为您的目录定义一个文件并将其分配给 ProcessBuilder 实例。
File myDir = new File("/home/omar/ros_ws");
pb.directory(myDir);
pb.start();
一个简单的解决方案:命令 ls
可以是带有多个参数的 运行。其中之一是一个文件参数,它可以是一个目录。
来自ls
man page:
# List the contents of your home directory
$ ls ~
因此,只需将您的 shell 脚本传递到您在 java 代码中硬编码的目录:"/home/omar/ros_ws/"
并通过 [=] 在您的 shell 脚本中访问它16=].
因此您的 shell 脚本将类似于:
#!/bin/bash
ls
然后从 java 通过以下方式调用您的 shell 脚本:
ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter3.sh /home/omar/ros_ws/");
// other code omitted for brevity
我的 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);
}
使用ProcessBuilder.directory,你可能想要
String path = "/home/omar/ros_ws/baxter3.sh";
ProcessBuilder pb = new ProcessBuilder(path);
pb.directory(new File(path).getParent());
然后您应该将 ProcessBuilder
实例的工作目录设置为您要观看的目录。你可以做的就是使用它的方法directory(File directory)
。
参见 Javadoc of ProcessBuilder
所以在 pb.start()
之前,为您的目录定义一个文件并将其分配给 ProcessBuilder 实例。
File myDir = new File("/home/omar/ros_ws");
pb.directory(myDir);
pb.start();
一个简单的解决方案:命令 ls
可以是带有多个参数的 运行。其中之一是一个文件参数,它可以是一个目录。
来自ls
man page:
# List the contents of your home directory
$ ls ~
因此,只需将您的 shell 脚本传递到您在 java 代码中硬编码的目录:"/home/omar/ros_ws/"
并通过 [=] 在您的 shell 脚本中访问它16=].
因此您的 shell 脚本将类似于:
#!/bin/bash
ls
然后从 java 通过以下方式调用您的 shell 脚本:
ProcessBuilder pb = new ProcessBuilder("/home/omar/ros_ws/baxter3.sh /home/omar/ros_ws/");
// other code omitted for brevity