繁体   English   中英

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

[英]Java ProcessBuilder to start execute multiple commands sequentially in Linux

我想使用ProcessBuilder类通过我的Java Application顺序执行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。

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

ls ';' pwd
ls '&&' pwd

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

bash -c 'ls ; pwd'

您可以这样称呼:

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

我正在使用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个命令,第一个是cd命令,第二个是javac命令,我使用&顺序执行它们。

抱歉我的写作能力差,如果我没有很好地解释我的代码,请向我询问你想知道的任何事情。

您可以从第一个命令从ProcessBuilder.start()获取Process,等待使用waitFor()然后启动第二个命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM