我正在尝试从Java代码运行shell脚本。
Shell脚本:
function print() {
echo "First Script"
}
print
echo "Hello"
Java代码:
final String cmd = "sh test.sh";
final Process p = Runtime.getRuntime().exec(cmd);
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is = p.getErrorStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
System.out.println(line);
}
但是当我运行上面的代码时,我收到此错误test.sh: 1: Syntax error: "(" unexpected
。
当我在命令行中尝试时,相同的代码工作正常,我能够看到输出。我也试过dos2unix
并运行了java代码,但仍然没有运气。任何形式的帮助都将非常感激。
答案 0 :(得分:3)
如果您使用bash
运行它,它将起作用。
我会(也)用#!/bin/bash
启动脚本。这样,脚本本身就会确定它将使用哪个shell,而不是依赖于调用它的人。如下所述,您仍然可以使用任何脚本编写过程调用脚本,但 shebang 将突出显示正在使用的脚本语言/方言。
另请注意the issues surrounding invoking processes from Java and collecting stdout/sterr。
答案 1 :(得分:1)
最有可能的是,在你的系统/bin/sh
上是一个与POSIX兼容的shell而不是Bash(在Ubuntu和Debian以及大多数商业Unices中就是这种情况)。在POSIX shells中,请勿使用function
关键字:
print() {
echo "First Script"
}
print
echo "Hello"
应该有效。 (这种形式也适用于Bash。)
答案 2 :(得分:-2)
验证您的Java版本是否与您的操作系统匹配。 您的操作系统可能是32b,Java是64版本。