4

我有一个 java 应用程序。我使用 Runtime.getRuntime().exec 调用批处理文件。当我使用 Runtime.getRuntime().exec 调用 linux 批处理文件时,批处理文件找不到自己的目录。我在批处理文件中使用 pwd 命令,但它返回应用程序路径。我需要批处理文件自己的物理路径。我怎样才能做到这一点?

4

3 回答 3

4

您必须使用ProcessBuilder才能完成:

ProcessBuilder builder = new ProcessBuilder( "pathToExecutable");
builder.directory( new File( "..." ).getAbsoluteFile() ); //sets process builder working directory
于 2014-08-20T11:50:01.977 回答
0

批处理文件,如果您特别指的是具有“.bat”扩展名的文件,则旨在与 Windows 中的 Microsoft 的命令提示符外壳 (“cmd.exe”) 一起使用,因为它们是包含一系列命令的脚本文件对于这个 shell,因此不适用于 Bash 等 Unix shell。

假设您实际上是指 Unix 的“shell 脚本”,而不是专门的 Microsoft 的“批处理文件”,那么最好使用ProcessBuilderexec()类,因为它比 Runtime 的方法提供了更大的灵活性。

要使用 ProcessBuilder 在其自己的目录中运行脚本,请将构建器的目录设置为您用来指向脚本的同一目录,如下所示:

// Point to wherever your script is stored, for example:
String script    = "/home/andy/bin/myscript.sh";
String directory = new File(script).getParent();

// Point to the shell that will run the script
String shell = "/bin/bash";

// Create a ProcessBuilder object
ProcessBuilder processBuilder = new ProcessBuilder(shell, script);

// Set the script to run in its own directory
processBuilder.directory(new File(directory));

// Run the script
Process process = processBuilder.start();
于 2014-08-20T12:29:36.903 回答
0

尝试这个 。它为我工作。

        Process p = Runtime.getRuntime().exec("pwd");
        BufferedReader bri = new BufferedReader
                (new InputStreamReader(p.getInputStream()));
        BufferedReader bre = new BufferedReader
                (new InputStreamReader(p.getErrorStream()));
        String line;
        while ((line = bri.readLine()) != null) {
            System.out.println(line);
        }
        bri.close();
        while ((line = bre.readLine()) != null) {
            System.out.println(line);
        }
        bre.close();
        p.waitFor();
于 2014-08-20T11:55:34.913 回答