提问者:小点点

JavaProcessBuilder开始在Linux中顺序执行多个命令


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

以下是我尝试过的方法:

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

给我以下错误:

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

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

给我类似的错误:

错误:ls:

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

给我以下错误:

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

我的OS是Linux/Mac-OSX。


共3个答案

匿名用户

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

ls ';' pwd
ls '&&' pwd

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

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。

所以我有2个命令,第一个是cd命令,第二个是javac命令,我使用顺序执行它们

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

匿名用户

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