Cześć Radek,
w Twoim przypadku problem wynika z tego, że interaktywna komenda blokuje strumień, dopóki nie odpowiesz, więc standardowe grep czy awk nie zadziałają w czasie rzeczywistym. Są dwa główne podejścia do przechwycenia takiego pytania:expect – narzędzie do automatyzacji interaktywnych programów:
#!/usr/bin/expect -f
spawn dnf check-update <lista_pakietów>
expect {
"*[y/N]*" {
exec kdialog --yesno "Czy kontynuować aktualizację?"
send "y\r"
}
}
interact
spawn uruchamia komendę.
expect czeka na pojawienie się wzorca [y/N].
send "y\r" wysyła odpowiedź „y” (Enter dodaje \r).
interact pozwala dalej kontrolować terminal ręcznie, jeśli potrzeba.
Automatyzacja przez flagi komendy, jeśli dostępne:
Niektóre programy (w tym dnf) mają flagę nieinteraktywnego potwierdzania, np. -y:
dnf check-update -y
Wtedy terminal nie czeka na [y/N] i można analizować wynik od razu.
Podsumowując: jeśli chcesz reagować na pojawiające się pytanie w czasie rzeczywistym, expect jest najbezpieczniejszym rozwiązaniem, bo standardowe potoki Bash nie przechwycą interaktywnych promptów w trakcie działania.