如何将java方法的输出分配给bash脚本变量

时间:2011-02-20 19:49:53

标签: java bash variables sh

我有一个调用java类方法的bash脚本。独立运行时,该方法将字符串返回到linux控制台。如何将java方法中的值赋值给bash脚本中的变量?

运行脚本:

java -cp /opt/my_dir/class.method [parameter]

输出:my_string

如果在bash脚本中添加:

read parameter
java -cp /opt/my_dir/class.method [parameter] | read the_output
echo $the_output

以上不起作用,我也尝试过失败:

the_output=java -cp /opt/my_dir/class.method [parameter]
the_output=`java -cp /opt/my_dir/class.method [parameter]`
java -cp /opt/my_dir/class.method [parameter] 2>&1

如何将输出存储到the_output变量中?

感谢。

3 个答案:

答案 0 :(得分:3)

在Bash中:

$ the_output="$(java -cp /opt/my_dir/class.method [parameter])"

请参阅:http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution

修改
实际上,看着你的命令行,我很惊讶它的工作原理。我以前没见过像这样的Java程序。通常,您只能从java命令运行main()方法。你的工作如何?

修改
你说当你这样做时你仍然会输出到控制台。您可能还需要捕获stderr:

  $ the_output="$(java -cp /opt/my_dir/class.method [parameter] 2>&1 )"

2>表示重定向stderr(文件描述符2)。 &1表示与stdout(文件描述符1)相同的位置。

答案 1 :(得分:1)

通过将命令包装在反引号中来使用command substitution

答案 2 :(得分:0)

尝试 bashj (支持java的bash变种)https://sourceforge.net/projects/bashj/

例如:

#!/usr/bin/bashj
X= Math.cos(0.5)
Y= Math.hypot(3.0,4.0)
Z= System.getProperty("java.runtime.version")

您也可以将自己的方法放在bashj加载的jar中,或者在bashj脚本中包含一些java源代码:

#!/usr/bin/bashj
#!java
public static int factorial(int n) 
{if (n<=0) return(0);
 if (n==1) return(1);
 return(n*factorial(n-1));}
#@bash
echo j.factorial(10)

比任何涉及创建新JVM进程的解决方案快得多