Istnieje wiele pytań dotyczących SE, które pokazują, jak odzyskać zepsuty terminal cat /dev/urandom
. Dla tych, którzy nie znają tego problemu - tutaj chodzi o:
- Wykonujesz
cat /dev/urandom
lub równoważny (na przykładcat binary_file.dat
). - Śmieci są drukowane.
To by było w porządku ... z tym wyjątkiem, że twój terminal drukuje śmieci nawet po zakończeniu polecenia! Oto zrzut ekranu niepoprawnie odczytanego tekstu, który w rzeczywistości jest wynikiem g ++:
Sądzę, że ludzie mieli rację co do tego, że błędy C ++ są czasami zbyt tajemnicze!
Zwykle rozwiązaniem jest uruchamianie stty sane && reset
, chociaż jest to trochę denerwujące, gdy jest to uruchamiane.
Z tego powodu w tym pytaniu chcę skupić się na pierwotnym powodzie, dla którego tak się dzieje, oraz na tym, jak zapobiegać zerwaniu terminala po wydaniu takiego polecenia. Nie szukam rozwiązań, takich jak przesyłanie niepoprawnych poleceń do tr
lub xxd
, ponieważ wymaga to, abyś wiedział, że program / plik wypisuje dane binarne przed ich uruchomieniem / wydrukowaniem, i należy pamiętać o każdym wyjściu takich danych .
Zauważyłem to samo zachowanie w buforze ramek URxvt, PuTTY i Linux, więc nie sądzę, że jest to problem specyficzny dla terminala. Moim głównym podejrzeniem jest to, że losowe wyjście zawiera kod ucieczki ANSI, który zmienia kodowanie znaków (w rzeczywistości, jeśli uruchomisz cat /dev/urandom
ponownie, istnieje szansa, że rozbije terminal, co wydaje się potwierdzać tę teorię). Jeśli to prawda, co to za kod ucieczki? Czy są jakieś standardowe sposoby na wyłączenie?
Wklej dane wyjściowe polecenia itp. Do tee -
źródło
more
lubless
?