Skocz do zawartości

Analiza znaków/tekstu w terminalu. Jak?


Radosław

Rekomendowane odpowiedzi

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

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. 

  • Upvote 1
Odnośnik do komentarza
Udostępnij na innych stronach

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

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ę
×
×
  • Dodaj nową pozycję...