Я запускаю Java-программу, которая генерирует исключение. Я передаю результат запуска команде grep, где я проверяю несуществующий шаблон, однако grep продолжает возвращать совпадение.
0,2,468.000000
1,2,305.000000
2,5,2702.000000
3,3,1672.000000
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at TestConverter.processPayments(TestConverter.java:113)
at TestConverter.processFile(TestConverter.java:131)
at TestConverter.main(TestConverter.java:142)
Я запускаю следующую команду:
java -classpath TestConverter.jar TestConverter test_xml.xml | grep "stringthatdoesnotmatch*"
Я получаю следующий вывод:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at TestConverter.processPayments(TestConverter.java:113)
at TestConverter.processFile(TestConverter.java:131)
at TestConverter.main(TestConverter.java:142)
Я не знаю, почему это происходит. Кроме того, моя конечная цель — проверить, содержит ли вывод следующий шаблон:
.*java.lang.IndexOutOfBoundsException*ArrayList.java:653*TestConverter.java:142*
Вы уверены, что вывод исключения не будет stderr вместо stdout?
Попробуйте также передать STDERR в grep:
java -classpath TestConverter.jar TestConverter test_xml.xml |& grep "stringthatdoesnotmatch*"
@StephenNewell Не уверен, куда это идет. Но я чувствую, что это может быть stderr. Как я могу grep stderr?
@zwer Я попробовал это и получил
-bash: syntax error near unexpected token `&'
@sophist_pt - это странно, bash должен распознавать сокращение
|&
. В любом случае попробуйте:java -classpath TestConverter.jar TestConverter test_xml.xml 2>&1 | grep "stringthatdoesnotmatch*"
@zwer Кажется, это работает, однако сейчас я пытаюсь убедиться, что grep проверяет совпадение, которое гарантирует, что оно содержит
*java.lang.IndexOutOfBoundsException*ArrayList.java:653*TestConverter.java:142*
Знаете ли вы, как я могу этого добиться?@sophist_pt -
grep
по умолчанию работает построчно. Есть несколько подходов, которые вы можете использовать для многострочных совпадений, проверьте ответы на этот вопрос@zwer Спасибо за помощь. Я передал вывод в xargs и сделал grep, и, похоже, он работает.