我在test.sh
文件夹中有一个名为/tmp/padm
的shell脚本。
在那个shell脚本中,我有一个语句
echo "good"
我正在尝试使用Java代码运行shell脚本。
String cmd=("/tmp/padm/.test.sh");
Runtime rt = Runtime.getRuntime();
Process pr=rt.exec(cmd);
但我的问题是我无法看到“好”这是shell脚本的输出。
如何让脚本运行?
答案 0 :(得分:4)
您可以使用以下代码获取命令输出。希望这会有所帮助。
Process process = Runtime.getRuntime().exec(cmd);
String s = "";
BufferedReader br = new BufferedReader(new InputStreamReader(process
.getInputStream()));
while ((s = br.readLine()) != null)
{
s += s + "\n";
}
System.out.println(s);
BufferedReader br2 = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while (br2.ready() && (s = br2.readLine()) != null)
{
errOutput += s;
}
System.out.println(errOutput);
答案 1 :(得分:1)
那不行。您必须在脚本的第一行添加“hash bang”,告诉Linux它必须使用合适的解释器(例如bash)来解释脚本,或者通过Java显式地通过bash运行它。
答案 2 :(得分:1)
当你说“在终端上”是什么意思?如果您想查看您需要使用的流程的输出/错误:
process.getErrorStream();
process.getOutputStream();
除此之外,我可以从使用Runtime.exec
调用shell脚本看到没有问题
答案 3 :(得分:1)
process.getErrorStream();
process.getOutputStream();
是 oxbow_lakes 指出的正确方法。
另外,请确保以shell脚本位置作为参数执行/bin/sh
。
答案 4 :(得分:1)
试试这个,肯定会有用。
Shell脚本test.sh代码
#!/bin/sh
echo "good"
Java代码执行shell脚本test.sh
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]{"/bin/sh", "/tmp/padm/.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();
}
答案 5 :(得分:0)
这是Need sample java code to run a shellscript的副本。
我的答案中的示例程序确实打印出标准错误和标准输出(示例程序稍后添加)。
请注意,streamGobblers在不同的线程中运行,以防止由于完整的输入/输出缓冲区而导致执行问题。
如果您希望当然可以让StreamGobblers将输出存储在列表中,并在执行该过程后检索列表,而不是直接将其转储到stdout上。