Nieoczekiwane wcięcie po ustawieniu terminala w trybie surowym - dlaczego tak się dzieje?

27

Na podstawie tego, co przeczytałem, gdy terminal jest w trybie surowym, znaki nie są przetwarzane przez sterownik terminala, ale są przesyłane bezpośrednio.

Ustawiłem terminal w trybie surowym za pomocą polecenia stty rawi zauważyłem, że wyjście jest wcięte za każdym razem w prawo, aż nie będzie już miejsca. To mam na myśli:

wprowadź opis zdjęcia tutaj

Dlaczego tak się dzieje ?!

Paweł
źródło

Odpowiedzi:

45

Jedno z sttyustawień ( onlcr) mówi sterownikowi terminalu, aby przekonwertował znak nowej linii (który jest tak naprawdę wierszem ASCII) na znak powrotu karetki plus znak wiersza.

Systemy uniksowe po prostu zapisują znak nowej linii do linii końcowych, pozwalając sterownikowi terminalu zrobić właściwą czynność (przekonwertować znak nowej linii na znak powrotu karetki plus znak linii).

Powrotny przewóz „idzie w lewo”, a linia przesuwu „idzie w dół”.

Po ustawieniu terminala w trybie surowym znak nowej linii nie będzie już konwertowany na powrót karetki plus przesunięcie wiersza. Brak powrotów karetki daje efekt schodów .

Thomas Dickey
źródło
Aby uzyskać dogłębny widok, możesz rzucić okiem na naprawdę dobry post @ stéphane-chazelas: unix.stackexchange.com/questions/151916/... , który pokazuje wiele interesujących rzeczy na temat konwersji terminali (i ich skutków ubocznych) . W skrócie: tylko „ssh -t”, aby używać interaktywnych poleceń, ale w swoich skryptach używaj tylko ssh, jeśli chcesz uzyskać dokładnie to, co wygenerowało polecenie (np. Pliki tar utworzone po jednej stronie ssh i odczytane / zapisane na druga strona: nie dodawaj „-t”, bo może (... zrobi to?) zepsuć twoje pliki binarne)
Olivier Dulac