Извлеките количество отказов из отчета о тестировании

Спасибо, что Антон за ваш ответ выше, он значительно способствовал решению моей проблемы.

Кажется, что решение моего вопроса было две части.

  1. Вход в / etc / default / grub, для меня следует прочитать:

    grub_cmdline_linux = "cryptdevice = / dev / sdb2: root = / dev / mapper / lvmpool-root"

, чтобы сломать каждую запись:

CryptDevice состоит из раздела, которую вы также применили шифрование, в моем случае / dev / sdb2 и lvmpool (мою группу громкости)

root просто указывает на местоположение моего зашифрованного корня LVMPOOL (который находится на SDB2)

  1. После того, как эта запись сделана (и это была ключевой ошибкой для меня), вы должны запустить:

    grub-mkconfig -o /boot/grub/grub.cfg

This обновит ваш /boot/grub/grub.cfg с добавленной вами информацией / etc / default / grub.

После того, как я это сделал, система загрузилась прямо в подсказку, чтобы разблокировать корневой раздел.

0
13.06.2014, 02:28
7 ответов

Нет ничего плохого в том, как вы это делаете, при условии, что сбои будут происходить только в одной строке выхода. Другим вариантом может быть привязка к тому, что количество сбоев всегда будет в 4-й строке вывода. Это очень просто сделать с помощью awk:

lein test | awk 'NR==4 { print $1 }'

или привязать к строке, где отказывает, является вторым полем:

lein test | awk '$2=="failures," { print $1 }'

или привязать к последней строке:

lein test | awk 'END { print $1 }'

или использовать sed для привязки к последней строке:

lein test | sed -n '$ s/^\([0-9]*\).*/\1/p'
3
28.01.2020, 02:13
[

] Ваше решение возвращает часть каждой строки, содержащей "ошибки" до первого пробела. [

] [

]Если вы хотите быть более точным, вы можете сделать:[

] [
sed -n '$s/^\([[:digit:]]\{1,\}\) failures.*/\1/p'
] [

]То есть, учитывать только последнюю строку ([]$[]), и только если она следует определенному шаблону: любая непустая последовательность десятичных цифр, за которой следует [] отказов[] (и возвращать эту последовательность цифр).[

].
4
28.01.2020, 02:13

С помощью awk (напечатать $1, значит первый столбец):

lein test | grep 'failures' | awk '{print $1}'
1
28.01.2020, 02:13

Through awk,

lein test | awk '/ failures,/{print $1}'

А с помощью GNU sed,

lein test | sed -n '/ failures,/s/^\([^ ]\+\).*/\1/p'

Или portably:

lein test | sed -n '/ failures,/s/^\([^ ]\{1,\}\).*/\1/p'
1
28.01.2020, 02:13

Можно попробовать использовать этот код:

lein test | tail | tr " " "\n" | head -1

, который должен дать вам то, что вы хотите.

0
28.01.2020, 02:13

Учитывая вывод, возможно (если у вас есть GNU реализация grep):

lein test | grep -m 1 -o '^[[:digit:]]*'

Safer, с той же самой реализацией:

lein test | grep -E 'failures.*errors' | grep -o '^[[:digit:]]*'

Из manpages:

-o, --only-matching

Печатать только совпадающие (непустые) части совпадающей строки, с каждой такая часть на отдельной выходной линии.

-m NUM, --max-count=NUM

Перестаньте читать файл после строк соответствия NUM.[...]

1
28.01.2020, 02:13

Попробуйте следующее:

lein test | tail -n 1 | tr -s " " "\n" | head -n 1

Как это работает?

  • tail -n 1 берет последнюю строку
  • tr -s "" "\ n" заменяет все пробелы символом новой строки. Это хороший трюк для токенизации ввода каким-либо символом.
  • head -n 1 занимает первую строку
1
28.01.2020, 02:13

Теги

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