无法从java命令行运行shell脚本
我试图从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
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();
}