2017-04-18 139 views
0

我试图从java运行此脚本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)\\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== 
+0

您是否尝试检查执行程序的Exception或stderr/stdout? https://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/ExecuteStreamHandler.html –

+0

你说的“适用于git bash”,为了执行你需要打开的shell Git Bash控制台? o您可以直接在Windows cmd控制台上执行shell? – reos

+0

@reos是的,我使用git bash控制台,我用控制台输出更新了问题。该脚本不能在Windows cmd控制台上工作...感谢 – Prosp

回答

0

有几个问题与您的代码:

  • 你不似乎正在检查程序的stderr/stdout,或者检查th引发异常。
  • Git.exe不会将shell脚本作为第一个参数。正如@reos所说,您可能需要调用git-bash.exe而不是git.exe
+0

感谢您的回复;我已经用stderr/stdout更新了代码。现在错误信息是'进程退出并出现错误:1(退出值:1)'。我应该在哪里放置文件“fileName.sh”在代码中? – Prosp

+0

每个答案更新的答案。尝试调用'git-bash.exe'而不是'git.exe' –

1

有一些要注意的要点。

  1. 如果你想运行需要执行的git-bash.exe混帐bash命令,您需要执行此命令的CMD控制台上:
%windir%\system32\cmd.exe /c ""C:\Program Files\Git\git-bash.exe" --login -i -- D:\temp\test.sh param1" 
  • 如果你想从一个Java应用程序执行它是相同的,你需要执行的命令是git-bash.exe而不是git.exe。 这是一个从java运行命令的例子。我没有使用你正在使用的对象,而是简单的java对象。但是,您可以将其调整为适合您的代码。
  • 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(); 
         } 
    
    +0

    --login -i部分可能很重要。所以你应该把它添加到你的命令中。 String [] command = {“C:\ Program Files \\\ Git \\\ git-bash.exe”, “--login”, “-i”, “D:\ \ temp \\ test.sh“, ”param1“}; – Naxos84