我正在尝试从java运行shell脚本,并希望在java中捕获shell脚本的退出值。下面是我尝试过的代码及其输出
java代码1:
try {
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "dir //pathOfSHFile//Test.sh");
Process proc = processBuilder.start();
proc.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
String output = "";
while ((line = in.readLine()) != null)
{
output += line;
}
System.out.println("### " + output);
} catch (Throwable t) {
t.printStackTrace();
}
test.sh文件
# !/bin/sh
echo "good"
输出1:
### Volume in drive C is OSDisk Volume Serial Number is***Directory of C:\Data\Code07-12-2020 12:10 22 Test.sh
期望“好”作为输出。
java代码2:
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]{"C:\\Data\\Code", ".\\Test.sh"});
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
输出2:
java.io.IOException: Cannot run program "C:\Data\Code": CreateProcess error=5, Access is denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:621)
at java.lang.Runtime.exec(Runtime.java:486)
at Intersecttion.main(Intersecttion.java:53)
Caused by: java.io.IOException: CreateProcess error=5, Access is denied
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:444)
at java.lang.ProcessImpl.start(ProcessImpl.java:140)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 3 more
我试图给所有的文件夹权限,但仍然是相同的结果。我需要传递一个参数以及脚本,但不知道如何得到这一点,并运行脚本以及获得退出值。除了上述方法,还有没有更好的方法呢。
1条答案
按热度按时间qhhrdooz1#
版本2尝试执行文件夹。这应该起作用:
但是,您可能必须将脚本改为批处理文件“test.bat”,因为windows不会以本机方式执行shell脚本。您还可以安装bash并执行
bash
以脚本作为参数的命令。我加了这句话作为评论。