Как назначить вывод метода Java в переменную сценария bash - PullRequest
1 голос
/ 20 февраля 2011

У меня есть скрипт bash, который вызывает метод класса Java. Метод возвращает строку в консоль 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 ]

3 голосов
/ 20 февраля 2011

В Bash:

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

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

РЕДАКТИРОВАТЬ :
На самом деле, глядя на вашу командную строку, я удивленчто это работает.Я не видел подобную программу на Java.Обычно вы можете запустить метод main () только из команды java.Как у вас работает?

РЕДАКТИРОВАТЬ :
Вы говорите, что по-прежнему получаете вывод на консоль, когда делаете это.Вам также может понадобиться захватить stderr:

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

2> означает перенаправление stderr (дескриптор файла 2).&1 означает то же место, что и стандартный вывод (дескриптор файла 1).

1 голос
/ 20 февраля 2011

Используйте подстановку команд , заключив вашу команду в кавычки.

0 голосов
/ 12 июня 2018

Попробуйте bashj (мутант bash с поддержкой Java) 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")

Вы также можете поместить свои собственные методы в jar-файл, загруженный bashj, или включить некоторый исходный код java в скрипт bashj:

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

...