2017-01-10 4 views
1

Мне нужно запустить исполняемый файл jar из сценария оболочки, чтобы получить строковое значение. Исполняемая банка не может вернуть значение в качестве основного возврата void. Я не могу использовать System.exit (int), поскольку jar должен возвращать значение типа String.как создать исполняемый банку, чтобы вернуть строку в сценарий оболочки

Просьба предложить.

ответ

0

Можете ли вы запустить приложение Java, которое запустит оболочку и захватит эту строку? Я думаю о многих приложениях, которые захватывают имя пользователя/пароль из оболочки. Например, если используется пружинная проверка: https://github.com/spring-projects/spring-shell

+0

Приложение должно возвращать значение для сценария оболочки. Поэтому из сценария оболочки я должен запустить jar и поймать возвращаемое строковое значение. –

0

Предложение: попробуйте написать свою строку в System.stdout и прочитать ее оттуда. Может быть, вы можете записать вывод в файл и прочитать его оттуда?

0

Еще одно предложение: Получить приложение Java, чтобы сохранить свой вывод во временный файл, а затем получить скрипт для чтения в содержимом файла, такие как VAR = cat /tmp/temp_file

3

Эти данные должны быть записаны на стандартный вывод (System.out на Java) и снят с $(command expansion).

Вот что все хорошие граждане Unix (и слишком мало Java программ) убедитесь, что делать:

  • результат записи программы на стандартный вывод (System.out)
  • сообщения об ошибках записи и отладки в STDERR (System.err)
  • Используйте System.exit(0), чтобы указать успех (это тоже по умолчанию, если не используется System.exit)
  • Использование System.exit(1) (или выше, до 255) для индикации

Вот полный пример для демонстрации взаимодействия между Java и сценариев оболочки:

$ cat Foo.java 
class Foo { 
    public static void main(String[] args) { 
    System.out.println("This data should be captured"); 
    System.err.println("This is other unrelated data."); 
    System.exit(0); 
    } 
} 

очень простой манифест:

$ cat manifest 
Main-Class: Foo 

Простой сценарий оболочки:

#!/bin/sh 
if var=$(java -jar foo.jar) 
then 
    echo "The program exited with success." 
    echo "Here's what it said: $var" 
else 
    echo "The program failed with System.exit($?)" 
    echo "Look at the errors above. The failing output was: $var" 
fi 

сейчас давайте скомпилируем и построим банку и сделаем исполняемый файл сценария:

$ javac Foo.java 
$ jar cfm foo.jar manifest Foo.class 
$ chmod +x myscript 

И теперь, чтобы запустить его:

$ ./myscript 
This is other unrelated data. 
The program exited with success. 
Here's what it said: This data should be captured 
Смежные вопросы