Czy niewidoczny błąd tekstowy w bashie jest błędem czy funkcją?

8

W każdej dystrybucji Linuksa, z której korzystałem przez ostatnie 10 lat, pojawiały się następujące niedogodności: uruchamiasz program w terminalu za pomocą bash. Po zatrzymaniu lub przerwaniu programu, cokolwiek wpiszesz, wydaje się czasem niewidoczne. Następnie możesz wprowadzić polecenie „reset”, a ekran zostanie wyczyszczony, a kursor ponownie widoczny.

Z powodu tego błędu zawsze zmieniałem powłokę na zsh za każdym razem, gdy loguję się do nowego terminala. W ZHS niewidzialny błąd tekstowy nigdy się nie zdarza. Ponieważ błąd istnieje już od ponad 10 lat, zacząłem podejrzewać, że jest to cecha bash. Czy ktoś może mi powiedzieć, do czego jest dobry?

Ponadto, gdzie faktycznie znajduje się strona główna / narzędzie do śledzenia błędów. Wydaje się, że Bash.org dotyczy „bashowania IT”, podobnie jak kanał IRC #bash. Dlaczego większość dystrybucji Linuksa zawiera powłokę, na którą tak trudno jest wyrazić opinię, skoro kilka alternatyw jest co najmniej tak samo dobrych?


źródło
1
Więc ... która część twojego pytania jest związana z programowaniem?
Ignacio Vazquez-Abrams
2
Proszę skierować mnie do właściwego miejsca, w którym mogę zapytać. Ironią jest to, że wyszukiwanie google w „narzędziu do śledzenia błędów powłoki bash” prowadzi obecnie do tej strony.
Tak się dzieje, gdy catpliki binarne ...
Yab

Odpowiedzi:

11

To tylko znaczy, że w Zsh nie możesz zrobić czegoś takiego:

stty -echo     #turn off echoing what you type
stty echo      #turn on echoing
reset          #reset terminal to the default state

W bash powyższe polecenie działa zgodnie z oczekiwaniami - wyłącz echo polecenia. Właśnie wypróbowałem w Zsh - nie działa. Kto ma błąd? ;)

Wyłączenie echa jest możliwe dzięki sekwencjom ESC, więc jeśli twój program losowo wysyła sekwencje binarne do terminala, {lub gdy CTRL- \ jakiś program zorientowany na ekranie), czasami zachowuje się podobnie stty -echoi musisz reset. To nie jest błąd - po prostu tak działają terminale (i emulatory terminali).

Co dziwne, dlaczego w Zsh stty -echonie działa.

jm666
źródło
2
W Zsh możesz ttyctl -fzabronić wprowadzania zmian w trybach terminalowych i ttyctl -uzezwolić na nie.