将shell变量从shell脚本返回并保存到Java

时间:2010-09-23 09:25:22

标签: java variables shell

我想将值保存在此脚本中的变量中:

#!/bin/sh
filename=$1

var= $filename | sed 's/\([A-Z]\)/ \1/g';

return var;

(Firstable,我不确定它是否正确),并且在thar之后,获取此值并在我的Java程序中使用它,如下所示:

Process s = Runtime.getRuntime().exec("./CreateTitle.sh "+filename);
OutputStream exitVal = s.getOutputStream();
System.out.println("Process exitValue: " + exitVal.toString());

我认为我错了一些东西,因为在上一篇sysout中,我没有得到希望的结果,但是这一个:

Process exitValue: java.io.BufferedOutputStream@3e25a5

有任何帮助吗? 提前致谢

3 个答案:

答案 0 :(得分:3)

它不是你需要的OutputStream。这是您需要的代码

BufferedReader b = new BufferedReader(new InputStreamReader(s.getInputStream()));
String output = "", line = "";
while((line = br.readLine()) != null) {
    output += line;
}
System.out.println(output);

你也应该看看Mark的答案。他用shell脚本解决了这个问题。

编辑:以下是更改后的脚本

#!/bin/sh
filename=$1

var = $filename | sed 's/\([A-Z]\)/ \1/g';

echo var;

我对shell脚本不太满意。如果这里有什么不妥,有人会纠正我。

答案 1 :(得分:2)

This文章会对您有所帮助。

答案 2 :(得分:0)

基本上你不能这样做。

shell环境变量是该shell的局部变量,生成它的进程无法看到shell中的数据,除了返回代码是一个整数。

您可以将shell变量写入stdout,然后Java可以读取它。

此外,您的代码会打印出正确的流地址 - 获取流中需要打开它并从流中读取的值

在您的示例中,我将使用Java的正则表达式类。