无法从java命令行运行shell脚本

无法从java命令行运行shell脚本,java,bash,shell,Java,Bash,Shell,我试图从java运行这个脚本shell,但它不起作用 我收到以下错误消息: Process exited with an error: 1 (Exit value: 1) 有人能帮忙吗 String pwd = "blabla"; String s_key = "0000"; String path = "C:/Files/scripts"; CommandLine commandLine = CommandLine.parse("C:\\Program Files (x86)\\Gi

我试图从java运行这个脚本shell,但它不起作用

我收到以下错误消息:

Process exited with an error: 1 (Exit value: 1)
有人能帮忙吗

String pwd = "blabla";

String s_key = "0000";

String path = "C:/Files/scripts"; 

CommandLine commandLine = CommandLine.parse("C:\\Program Files (x86)\\Git\\bin\\git.exe");

commandLine.addArgument("fileName.sh");

commandLine.addArgument(password);

commandLine.addArgument(s_key);

DefaultExecutor defaultExecutor = new DefaultExecutor();

ByteArrayOutputStream sdtout = new ByteArrayOutputStream();

ByteArrayOutputStream sdterr = new ByteArrayOutputStream();

PumpStreamHandler streamHandler = new PumpStreamHandler(sdtout, sdterr);

defaultExecutor.setStreamHandler(streamHandler);

defaultExecutor.execute(commandLine);
这是剧本

#!/bin/sh

pwd=$1
s_key=$2
....
echo $pwd
它与git bash配合得很好

  $ ./fileName.sh blabla 0000
  nkfjWmiG7dDnYUmjr6VD0A==

您的代码有几个问题:

  • 您似乎没有检查程序的stderr/stdout,也没有检查抛出的异常
  • Git.exe不将shell脚本作为第一个参数。正如@reos所说,您可能需要调用
    git bash.exe
    ,而不是
    git.exe

    • 有几点需要注意

    • 如果要运行git-bash命令,需要在cmd控制台上执行git-bash.exe,需要执行以下命令:
    • 如果您想从java应用程序执行它,它是相同的,您需要执行的命令是git-bash.exe而不是git.exe。 这是一个从java运行命令的示例。我使用的不是您正在使用的对象,而是简单的java对象。但是,您可以根据自己的代码对其进行调整

    • 您是否尝试过检查执行者的异常或标准状态?您说过“与git bash配合良好”,为了执行shell,您需要打开git bash控制台吗?o您可以直接在Windows cmd控制台上执行shell?@reos是的,我使用git bash控制台,我已经用控制台输出更新了问题。该脚本在windows cmd控制台上不工作。。。感谢您的回复;我已经用stderr/stdout更新了代码。现在,错误消息是
      进程退出,错误为:1(退出值:1)
      。我应该将文件“fileName.sh”放在代码中的什么位置?根据reos的回答更新。尝试调用
      git bash.exe
      ,而不是
      git.exe
      ——login-i部分可能很重要。因此,您应该将其添加到您的命令中。String[]command={“C:\\\\Program Files\\\\Git\\\\Git bash.exe”、“--login”、“-i”、“D:\\temp\\test.sh”、“param1”};
      %windir%\system32\cmd.exe /c ""C:\Program Files\Git\git-bash.exe" --login -i -- D:\temp\test.sh param1"
      
       public static void main(String[] args) throws IOException {
                String[] command = {"C:\\\\Program Files\\\\Git\\\\git-bash.exe",
                        "D:\\temp\\test.sh",
                        "param1"};
                ProcessBuilder processBuilder = new ProcessBuilder(command);
                processBuilder.redirectErrorStream(true);
                processBuilder.start();
            }