簡體   English   中英

使用 java 從它自己的根運行一個 .sh 腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM