Эти данные должны быть записаны на стандартный вывод (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
Приложение должно возвращать значение для сценария оболочки. Поэтому из сценария оболочки я должен запустить jar и поймать возвращаемое строковое значение. –