Java ProcessBuilder,用于在 Linux 中按顺序启动多个命令

2022-09-02 00:58:45

我想使用 ProcessBuilder 类通过我的 Java 应用程序按顺序执行 2 个或更多命令。我已经尝试了其他响应/论坛中建议的多个选项,但没有运气。

以下是我尝试过的事情:

    ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd");

给我以下错误:

错误 : ls: ;: 没有这样的文件或目录 错误 : ls: pwd: 没有这样的文件或目录

    ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd");

给我类似的错误:

错误 : ls: &&: 没有这样的文件或目录 错误 : ls: pwd: 没有这样的文件或目录

    List<String> command = new ArrayList<String>();
    command.add("ls");
    command.add(";");
    command.add("pwd");
    ProcessBuilder processBuilder = new ProcessBuilder(command);

给我以下错误:

错误 : ls: ;: 没有这样的文件或目录 错误 : ls: pwd: 没有这样的文件或目录

我的操作系统是Linux/Mac-OSX。


答案 1

您的方法等效于使用指定的参数进行调用。在 Bash 表示法中,您正在运行的是:ls

ls ';' pwd
ls '&&' pwd

如果您希望并作为单独的命令运行,则可以使用 Bash(或其他 shell 语言)将它们包装到单个命令中:lspwd

bash -c 'ls ; pwd'

你可以这样称呼它:

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "ls ; pwd");

答案 2

我正在使用ProcessBuilder来编译这样的java程序,它对我有用:

ProcessBuilder b = new ProcessBuilder("cmd.exe","/c","cd " + dir,
            " & javac " + mapClassName + ".java -cp " + pathToProjectClasses);
  • cmd.exe :启动命令提示符。
  • \c :不确定它在做什么,但它很重要,您可以看到此链接以获取更多信息(\? cmd 命令)
  • cd + dir :是第一个命令,它将目录更改为某个路径,即dir。
  • &:它的意思是在你完成第一个命令后开始第二个命令
  • javac :这个单词和字符串的其余部分是第二个命令
  • -cp :要编译的类使用的外部类的路径。

所以我有2个命令,第一个是命令,第二个是命令,我使用按顺序执行它们。cdjavac&

很抱歉我的写作技巧不好,如果我没有很好地解释我的代码,请问我任何你想知道的事情。


推荐