Как сделать провальный $ (оболочка), прерывание команды Делает

В некоторых случаях может быть недостаток слова static:

final static Logger logging = Logger.getLogger(ProcessorTest.class);

Если я сделаю регистратор полем экземпляра, я получаю именно это предупреждение:

No appenders could be found for logger (org.apache.kafka.producer.Sender)

Что еще хуже, предупреждение указывает не на ProcessorTest, где находится ошибка, а на совершенно другой класс (Отправитель) в качестве источника проблем. Класс имеет правильный регистратор заданий и не нуждается в каких-либо изменениях! Мы могли бы искать проблему на века!

20
задан Carl Seleborg 22 October 2008 в 18:09
поделиться

4 ответа

Хорошо, вот мое собственное решение, которое является, к сожалению, не на основе кода состояния collect_sources.py сценария, но какие Работы Для Me(TM) и позволяет мне видеть любой вывод, который производит сценарий:

SHELL_OUTPUT := $(shell python collect_sources.py 2>&1)
ifeq ($(filter error: [Errno %],$(SHELL_OUTPUT)),)
  $(info $(SHELL_OUTPUT))
else
  $(error $(SHELL_OUTPUT))
endif

сценарий записан так, чтобы любая ошибка произвела вывод, начинающийся "collect_sources: error:". Кроме того, если Python не может найти или выполнить данный сценарий, он производит сообщение об ошибке, содержащее сообщение "[Errno 2]" или подобный. Таким образом, этот маленький кусочек кода просто получает вывод (перенаправляющий stderr к stdout) и ищет сообщения об ошибках. Если ни один не найден, это просто использует $(info) для печати вывода, иначе это использует $(error), который эффективно делает, Делают остановку.

Примечание, что добавление отступа в эти ifeq ... endif сделано с пробелами. Если вкладки используются, Сделайте, думает, что Вы пытаетесь вызвать команду, и жалуется на это.

4
ответ дан 30 November 2019 в 01:26
поделиться

Мог бы быть лучший путь, но я попробовал следующее, и он работает:

$(if $(shell if your_command; then echo ok; fi), , $(error your_command failed))

Здесь я предполагал, что your_command не дает вывода, но не должно быть трудно работать вокруг такой ситуации.

Редактирование: Чтобы заставить его работать с оболочкой Windows по умолчанию (и вероятно любой достойной оболочкой), Вы могли записать your_command && echo ok вместо if в эти shell функция. Я не думаю, что это возможно для (более старых) оболочек DOS. Для них Вы, вероятно, хотите адаптировать your_command или записать сценарий обертки для печати чего-то на ошибке (или успех).

6
ответ дан 30 November 2019 в 01:26
поделиться

Необходимо использовать регулярную цель для создания BuildRules.mk:

BuildRules.mk: collect_sources.py
        python $< >$@

include BuildRules.mk

Это - стандартный прием для использования при автоматической генерации зависимостей.

4
ответ дан 30 November 2019 в 01:26
поделиться

Удостоверьтесь, что Вы не вызываете make/gmake с-k опцией.

-1
ответ дан 30 November 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: