2017-04-18 170 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