Java Runtime.getRuntime()非法参数异常

Dus*_*tin 1 java runtime-error

我在使.getruntime.exec()正常工作时遇到了一些问题.以下是处理该部分的代码:

while (line != null)
{
  String name = line;
  String commandFull = commandFirst + name + commandLast;

  String[] fullCommand = new String[] {commandFirst, name, commandLast};
  for(int i=0;i<3;i++)
  {
    System.out.print(fullCommand[i]);
  }
  Runtime runner = Runtime.getRuntime();
  Process p = runner.exec(fullCommand);

  outFile.println(fullCommand);

  line = inFile.readLine();
}
Run Code Online (Sandbox Code Playgroud)

它打印出应该看起来的命令.当我在这里运行程序时输出:

adfind -b dc=stuff,dc=com -f "cn=user" |find "displayName" >> fullList.txt
Exception in thread "main" java.lang.IllegalArgumentException
        at java.lang.ProcessImpl.<init>(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
        at java.lang.ProcessBuilder.start(Unknown Source)
        at java.lang.Runtime.exec(Unknown Source)
        at java.lang.Runtime.exec(Unknown Source)
        at lookup.main(lookup.java:41)
Run Code Online (Sandbox Code Playgroud)

Jar*_*aus 5

您正在尝试在没有shell的情况下执行shell命令.

也就是说,您正在尝试执行shell将解释的内容(特别是管道'|'和追加'>>').要解决此问题,请让Java执行shell实例并将整个命令传递给shell.这将如何工作取决于平台.

例如在Linux中:

String fullCommand = {"/bin/sh", "-c", "find -b dc=stuff,dc=com -f \"cn=user\" |find \"displayName\" >> fullList.txt"};
Run Code Online (Sandbox Code Playgroud)

或者在Windows中:

String fullCommand = {"cmd.exe", "/c", "find -b dc=stuff,dc=com -f \"cn=user\" |find \"displayName\" >> fullList.txt"};
Run Code Online (Sandbox Code Playgroud)