如何将 java 方法的输出分配给 bash 脚本变量
我有一个调用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 Bash 中:
请参阅:http://www.gnu.org/ software/bash/manual/bashref.html#Command-Substitution
编辑:
事实上,看看你的命令行,我很惊讶它的工作原理。我以前没见过这样调用的 Java 程序。通常,您只能从 java 命令运行 main() 方法。你的如何运作?
编辑:
您说,当您执行此操作时,您仍然可以将输出发送到控制台。您可能还需要捕获 stderr:
2>
表示重定向 stderr(文件描述符 2)。&1
表示与 stdout(文件描述符 1)所在的位置相同。In Bash:
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:
2>
means redirect stderr (file descriptor 2).&1
means to the same place as stdout (file descriptor 1) is going.通过将命令括在反引号中来使用命令替换。
Use command substitution by wrapping your command in backquotes.
尝试bashj(一个支持java的bash变体)https://sourceforge.net/项目/bashj/。
例如:
您还可以将自己的方法放入 bashj 加载的 jar 中,或者在 bashj 脚本中包含一些 java 源代码:
这比任何涉及创建新 JVM 进程的解决方案快得多 。
Try bashj (a bash mutant with java support) https://sourceforge.net/projects/bashj/.
for instance:
You can also put your own methods in a jar loaded by bashj, or include some java source code within the bashj script:
This is much faster than any solution involving the creation of a new JVM process.