Java ProcessBuilder在Linux中顺序启动执行多个命令

Nar*_*mar 15 java processbuilder

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

以下是我尝试过的事情:

    ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd");
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

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

    ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd");
Run Code Online (Sandbox Code Playgroud)

给我类似的错误:

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

    List<String> command = new ArrayList<String>();
    command.add("ls");
    command.add(";");
    command.add("pwd");
    ProcessBuilder processBuilder = new ProcessBuilder(command);
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

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

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

rua*_*akh 24

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

ls ';' pwd
ls '&&' pwd
Run Code Online (Sandbox Code Playgroud)

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

bash -c 'ls ; pwd'
Run Code Online (Sandbox Code Playgroud)

您可以这样称呼:

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "ls ; pwd");
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

所以我有 2 个命令,第一个是cd命令,第二个是javac命令,我使用&.

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