Есть ли способ передать вывод, построенный из сообщений printk, на grep на консоли? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть утилита, которая печатает вывод, используя printk. Например,

printmsg.c:
void main() {
     printk(KERN_DEBUG "Message alert id:XXXX!\n");
     printk(KERN_DEBUG "Message alert id:YYYY!\n");
     return;
}

Если запустить эту утилиту в системе, она напечатает сообщение, как показано ниже, на консоли

#./printmsg
Message alert id:XXXX!
Message alert id:YYYY!

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

#./printmsg | grep XXXX
Message alert id:XXXX!
Message alert id:YYYY!

Мне известно, что printk отправляет сообщения в буфер журнала ядра и dmesg для печати буфера журнала. С опциями dmesg для печати вывода на stdoutput.

Однако я ищу опцию для направления вывода в grep мгновенно при запуске утилиты и выводе дампов на консоль.

Ограничение: printk здесь не может быть скомпрометирован.

1 Ответ

0 голосов
/ 10 марта 2020

Вам необходимо создать свой сценарий оболочки следующим образом:

#./printmsg 2>&1| grep XXXX

, и это потому, что (с высокой вероятностью) функция printk отправляет сообщение в STDERR, а не STDOUT

...