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

发布于 2024-10-18 05:12:09 字数 632 浏览 4 评论 0原文

我有一个调用 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 变量中?

谢谢。

I have a bash script that calls a java class method. The method returns a string to the linux console when run independently. how can I assign the value from the java method to a variable in a bash script?

running the script:

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

output: my_string

if added in a bash script:

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

the above doesnt work, I also tried unsuccessfully:

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

How can i get the output stored into the_output variable?

thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一桥轻雨一伞开 2024-10-25 05:12:09

在 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)所在的位置相同。

In Bash:

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

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

EDIT:
Actually, looking at your command-line, I'm surprised that it works. I haven't seen a Java program called like that before. Usuallly you can only run a main() method from a java command. How does yours work?

EDIT:
You say that you are still getting output going to the console when you do this. You may need to capture stderr too:

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

2> means redirect stderr (file descriptor 2). &1 means to the same place as stdout (file descriptor 1) is going.

溺渁∝ 2024-10-25 05:12:09

通过将命令括在反引号中来使用命令替换

Use command substitution by wrapping your command in backquotes.

Smile简单爱 2024-10-25 05:12:09

尝试bashj(一个支持java的bash变体)https://sourceforge.net/项目/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 进程的解决方案快得多

Try bashj (a bash mutant with java support) https://sourceforge.net/projects/bashj/.

for instance:

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

You can also put your own methods in a jar loaded by bashj, or include some java source code within the bashj script:

#!/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)

This is much faster than any solution involving the creation of a new JVM process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文