Как я могу обработать исключение команды java -cp в сценарии оболочки (файл .sh)

1

Я помещал эту команду в.sh файл:

CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 

Где CP - это путь к файлу jar

моя проблема:

когда CP не имеет надлежащего значения, и в этой инструкции он не смог найти основной класс, и я получу это исключение:

Exception in thread "main" java.lang.NoClassDefFoundError

как я могу справиться с этим исключением в сценарии оболочки?

  • 0
    В сценарии оболочки не существует такого понятия, как обработка исключений. Вы можете (и можете только) проверить состояние выхода команд в оболочке, а затем решить, что вы хотите сделать. Но что именно вы хотите сделать? Если вы хотите обработать «исключение Java», то НЕТ, извините, Bash - это другой язык, и он не может копаться в вашей JVM.
  • 0
    Спасибо, я хотел бы проверить состояние завершения команды и показать мое сообщение вместо исключения команды Java, возможно ли это?
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Чтобы заменить любую ошибку, напечатанную на stderr собственным сообщением об ошибке, вы можете подавить команду stderr (путем перенаправления на /dev/null) и напечатать свое сообщение вместо этого, когда статус завершения вашей команды отличен от нуля:

CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 2>/dev/null || { echo "error: Java exited with nonzero status $?"; exit 1; }

Более подробный способ сделать это, что, вероятно, более читаемо для людей, относительно новых для Bash:

CP="$1"
if ! "$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 2>/dev/null; then
    echo "error: Java exited with nonzero status $?"
    exit 1
fi
  • 0
    Отлично, спасибо большое, я поместил его в свой код, и теперь он также работает, С уважением
  • 0
    @faribafarrokhpour Нет проблем. Вы можете принять ответ, нажав на флажок под стрелками слева, чтобы пометить проблему как решенную.
Показать ещё 1 комментарий
1

Возможно, вы можете найти эту ссылку полезной: http://www.tldp.org/LDP/abs/html/exit-status.html

Bash содержит встроенную переменную с именем $? который содержит код выхода ранее выполненной команды. $? == 0 $? == 0 означает, что программа Java выполнена успешно, а $? != 0 $? != 0 означает, что программа Java выбрала исключение, такое как в вашем случае.

  • 0
    спасибо, я изменил скрипт как этот # инструмент Run с classpath ($ 1) и другими аргументами function run_tool () {CP = "$ 1"; shift "$ JAVA_CMD" -cp "$ CP" "$ MAIN_CLASS" "$ @" if ["$?" ! = 0] затем echo "путь к классу неверен" fi}, но у меня есть класс получения не найден, а также мое сообщение
  • 0
    Я хочу показать свое сообщение вместо класса не найдено исключение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню