Radosław Napisano Kwiecień 11 Zgłoszenie Share Napisano Kwiecień 11 Kontynuacja innego tematu o wysyłaniu znaku "y" i enter do terminala do interaktywnej komendy. Jeśli jest komenda interaktywna jak: dnf check-update <lista pakietów do aktualizacji> która kończy się pytaniem [y/N] to nie jestem w stanie analizować pojawiającego się tekstu (np. | grep -q "[y/N]" ) dopóki nie zakończę wybierając "y" lub domyślne Enter dla "N". Jak przechwycić pojawienie się [y/N] w terminalu? Przechwycić, aby wyświetlić pytanie kdialog --yesno. Radek Glebicki Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Szept Napisano Kwiecień 16 Zgłoszenie Share Napisano Kwiecień 16 Narzędzie expect. #!/usr/bin/expect # Uruchom polecenie, np. dnf check-update <lista pakietów> # Możesz przekazać argumenty do skryptu set cmd [lindex $argv 0] set args [lrange $argv 1 end] # Uruchom program w pseudoterminalu eval spawn $cmd $args # Oczekuj na pytanie (dopasuj wzorzec do tego, co faktycznie wyświetla dnf) expect -re {\[y/N\]} { # Pytanie się pojawiło – pokaż okno kdialog # --yesno zwraca 0 dla Tak, 1 dla Nie set user_choice [exec kdialog --yesno "Czy chcesz kontynuować?"] if {$user_choice == 0} { send "y\r" # wyślij 'y' i Enter } else { send "\r" # sam Enter = domyślnie N } } # Przekaż dalsze wyjście programu (np. listę pakietów) na stdout # i poczekaj na zakończenie expect eof Zapisujesz jako dnf-with-kdialog.exp uruchamiasz ./dnf-with-kdialog.exp "dnf check-update" pakiet1 pakiet2 spawn tworzy nowy proces z przypisanym PTY.expect czyta wyjście z tego PTY (łącznie z pytaniem).Gdy wzorzec zostanie dopasowany, możesz uruchomić dowolne polecenie zewnętrzne (exec kdialog ...).Na podstawie odpowiedzi użytkownika wysyłasz dane z powrotem do PTY (send). Odpal sobie dowolną AI, to ci będzie pomagać w takich rzeczach. 1 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Radosław Napisano Kwiecień 16 Autor Zgłoszenie Share Napisano Kwiecień 16 Czytałem o "expect". Trochę mnie przerosło zrozumienie działania. Tutaj jest wytłumaczone. Dzięki. Ok, pytanie. Jak niby miało by wyglądać zapytanie dla AI do wygenerowania takiej odpowiedzi jak powyższa? Radek Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Exper1977 Napisano Maj 14 Zgłoszenie Share Napisano Maj 14 W dniu 11.04.2026 o 06:02, Radosław napisał: Kontynuacja innego tematu o wysyłaniu znaku "y" i enter do terminala do interaktywnej komendy. Jeśli jest komenda interaktywna jak: dnf check-update <lista pakietów do aktualizacji> która kończy się pytaniem [y/N] to nie jestem w stanie analizować pojawiającego się tekstu (np. | grep -q "[y/N]" ) dopóki nie zakończę wybierając "y" lub domyślne Enter dla "N". Jak przechwycić pojawienie się [y/N] w terminalu? Przechwycić, aby wyświetlić pytanie kdialog --yesno. Radek Glebicki Czasem, gdy czekasz na reakcję terminala i masz chwilę przerwy, można wykorzystać ją na małą odskocznię – np. szybka gra online w mostbet casino app, żeby nie myśleć o problemach z automatyzacją komend, zanim ruszysz dalej. 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. 1 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się