[英]run a .sh script from its own root using java
我在與 java 文件不同的目錄中有一個 shell 腳本。 這個腳本只包含ls
,它打印當前目錄中的文件。 當我運行 java 項目時,它會打印 java 項目根目錄中的文件,而不是 shell 腳本的根目錄。 我希望它打印 shell 腳本根目錄中的文件。
爪哇代碼:
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(File directory)
。 參見ProcessBuilder 的 Javadoc
所以在pb.start()
之前,為您的目錄定義一個文件並將其分配給 ProcessBuilder 的實例。
File myDir = new File("/home/omar/ros_ws");
pb.directory(myDir);
pb.start();
使用ProcessBuilder.directory ,你可能想要
String path = "/home/omar/ros_ws/baxter3.sh";
ProcessBuilder pb = new ProcessBuilder(path);
pb.directory(new File(path).getParent());
一個簡單的解決方案:命令ls
可以使用多個參數運行。 其中之一是可以是目錄的文件參數。
從ls
手冊頁:
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.