awk ведет себя по-разному с tail и inotifywait

Согласно этой ошибке проблема заключается в том, что ссылка на grubenv указывает на /boot/grub2/grubenv, но /boot не монтируется в среде меню grub. Вышеупомянутая ошибка связана с Fedora, но я предполагаю, что то же самое относится и к Centos. У меня возникла эта проблема с CentOS 7 и grub2.

Система загружается нормально, но только после нажатия клавиши, которая отклоняет сообщение о том, что grubenv не существует. Вышеупомянутая ошибка также включает исправление. Симлинкинг

/boot/grub2/grubenv ->../efi/EFI/centos/grubenv

Должно решить эту проблему.

  • Редактировать *Подтверждено, что это решает проблему с CentOS 7.1 с ядром Linux 4.20.0.1.

Как?

sudo rm /boot/grub2/grubenv
sudo ln -s../efi/EFI/centos/grubenv /boot/grub2/grubenv

Убедитесь, что вы также удалили grub2 -efi, если он вам не нужен, так как он вызывает эту проблему.

sudo yum remove grub2-efi

2
01.02.2021, 00:01
1 ответ

echo $?запускается после завершения всего конвейера (кода до завершения ||).

В случае inotifywait … | awk … || echo …после завершения awkinotifywaitвсе еще выполняется. Он получит SIGPIPE, только если (, когда )попытается записать больше. Попробуйте touch test.fileеще раз, чтобы добраться до этой точки и вызвать echo.

С другой стороны, tailв tail -f … | awk …завершается сразу после завершения awk, потому что GNU tailпредпринимает специальные шаги для обнаружения этой ситуации .


Чтобы воспроизвести это с помощью inotifywait, нужно будет перенаправить PID и отправить SIGPIPE через awk:

{ inotifywait  -m -e OPEN./  & echo $! ; } |
awk 'NR==1 {pid=$0}
     /OPEN/ {print $0,pid
             system("echo kill -13 "pid)
             exit 122  }' ||
echo $? 
2
18.03.2021, 22:33

Теги

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