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

Java ProcessBuilder开始在Linux中顺序执行多个命令,java,processbuilder,Java,Processbuilder,我希望使用ProcessBuilder类通过Java应用程序顺序执行2个或更多命令。我尝试了其他回复/论坛中建议的多种选择,但运气不佳 以下是我尝试过的东西: ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd"); 给我以下错误: 错误:ls:;:没有这样的文件或目录 错误:ls:pwd:没有这样的文件或目录 ProcessBuilder processBuilder = new Process

我希望使用ProcessBuilder类通过Java应用程序顺序执行2个或更多命令。我尝试了其他回复/论坛中建议的多种选择,但运气不佳

以下是我尝试过的东西:

    ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd");
给我以下错误:

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

    ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd");
    List<String> command = new ArrayList<String>();
    command.add("ls");
    command.add(";");
    command.add("pwd");
    ProcessBuilder processBuilder = new ProcessBuilder(command);
给我类似的错误:

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

    ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd");
    List<String> command = new ArrayList<String>();
    command.add("ls");
    command.add(";");
    command.add("pwd");
    ProcessBuilder processBuilder = new ProcessBuilder(command);
List命令=新建ArrayList();
命令。添加(“ls”);
命令。添加(“;”);
命令。添加(“pwd”);
ProcessBuilder ProcessBuilder=新的ProcessBuilder(命令);
给我以下错误:

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

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

我的操作系统是Linux/MacOSX

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

ls ';' pwd
ls '&&' pwd
如果希望将
ls
pwd
作为单独的命令运行,可以使用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:不知道它在做什么,但它很重要,你可以查看这个链接了解更多信息
  • cd+dir:是第一个命令,它将目录更改为特定路径dir
  • &:它的意思是在完成第一个命令后启动第二个命令
  • javac:这个单词和字符串的其余部分是第二个命令
  • -cp:要编译的类所使用的外部类的路径
所以我有两个命令,第一个是
cd
命令,第二个是
javac
命令,我使用
&
顺序执行它们。


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

@ruakh您能告诉我如何使用基于windows的PsExec.exe进行包装吗。例如,导航到“C”驱动器并创建一个名为“abc”的目录,例如:newProcessBuilder(“psexec”、“-C”、“cd C:\;mkdir abc”);。非常感谢。@Channa:我不知道一般情况,但我认为您的具体示例可以写成
newprocessbuilder(“psexec”,computer,“mkdir”,“C:\\abc”)
/C是自动关闭的,您可以分享一个示例吗