Jeśli zrobisz:
stty eol =
A następnie uruchom demo sugerowane w EDIT , zobaczysz pasek foo na wydruku test.out . Dyscyplina liniowa terminala opróżni swoje wyjście do swojego czytnika, gdy odczytuje każdy specjalny znak eol z twojego wejścia.
Terminal trybu kanonicznego w systemie Linux - jak można skonfigurować za pomocą stty icanon
lub prawdopodobnie po prostu stty sane
- obsługuje następujące specjalne znaki wejściowe ...
- eof
- domyślna:
^D
- Kończy linię wejściową i opróżnia wyjście do czytnika. Ponieważ jest usuwany z wejścia, jeśli jest wprowadzany jako jedyny znak w linii, jest przekazywany do czytnika jako zerowy odczyt lub koniec pliku .
- eol
- domyślnie: nieprzypisany
- Kończy również linię wejściową, ale nie jest usuwana z wejścia.
- zabić
- domyślna:
^U
- Usuwa wszystkie buforowane dane wejściowe.
- wymazać
- domyślnie:
^H
(lub ewentualnie @
lub ^?
w niektórych systemach)
- Usuwa ostatni buforowany znak wejściowy.
Gdy iexten jest również ustawiony - podobnie jak stty icanon iexten
, a może znowu tylko stty sane
kanoniczny terminal Linux, będzie obsługiwał ...
- eol2
- domyślnie: nieprzypisany
- Także też kończy przewód wejściowy i jest również nie usuwa z wejścia.
- werase
- domyślna:
^W
- Usuwa ostatnie buforowane słowo wejściowe .
- rprnt
- domyślna:
^R
- Przedrukowuje wszystkie buforowane dane wejściowe.
- następny
- domyślna:
^V
- Usuwa wszelkie szczególne znaczenie, jeśli chodzi o dyscyplinę liniową dla bezpośrednio następującego znaku wejściowego.
Te znaki są obsługiwane przez usunięcie ich ze strumienia wejściowego - z wyjątkiem eol i eol2 , czyli - i wykonanie powiązanej funkcji specjalnej przed przekazaniem przetworzonego strumienia do czytnika - co zwykle jest twoją powłoką, ale może być niezależnie od grupy procesów pierwszego planu. .
Inne specjalne znaki wejściowe, które są obsługiwane podobnie, ale mogą być konfigurowane niezależnie od dowolnego ustawienia icanon , obejmują zestaw isig - zestaw podobny stty isig
i prawdopodobnie również zawarty w zdrowej konfiguracji:
- porzucić
- domyślna:
^\
- Opróżnia wszystkie buforowane dane wejściowe (jeśli nie jest ustawiony noflsh ) i wysyła SIGQUIT do grupy procesów na pierwszym planie - prawdopodobnie generując zrzut rdzenia.
- susp
- domyślna:
^Z
- Opróżnia wszystkie buforowane dane wejściowe (jeśli nie jest ustawiony noflsh ) i wysyła SIGTSTP do grupy procesów pierwszego planu. Zawieszoną grupę procesów można prawdopodobnie wznowić za pomocą jednej
kill -CONT "$!"
lub tylko fg
w ( set -m
) kontrolowanej przez powłokę powłoce.
- intr
- domyślna:
^C
- Opróżnia wszystkie buforowane dane wejściowe (jeśli nie jest ustawiony noflsh ) i wysyła SIGINT do grupy procesów pierwszego planu.
I zestaw ixon - skonfigurowany jak stty ixon
i zwykle zawarty w zdrowej konfiguracji:
- zatrzymać
- domyślna:
^S
- Zatrzymuje wszystkie dane wyjściowe do czytnika, dopóki albo start nie zostanie odczytany na wejściu, albo - gdy ixany jest również ustawiony - zostanie odczytany co najmniej jeden znak
- początek
- domyślna:
^Q
- Ponownie uruchamia wyjście, jeśli zostało wcześniej zatrzymane za pomocą stop .
- Zarówno stop, jak i start są usuwane z wejścia podczas przetwarzania, ale jeśli wyjście zostanie ponownie uruchomione z powodu dowolnego znaku na wejściu, gdy ustawiono ixany , znak ten nie zostanie usunięty.
Znaki specjalne obsługiwane w innych systemach innych niż Linux mogą obejmować ...
- spłukać
- domyślna:
^O
- Przełącza odrzucanie i opróżnianie buforowanego wejścia i jest usuwane z wejścia.
- dsusp
- domyślnie: nieprzypisany
- Opróżnia wszystkie buforowane dane wejściowe tylko wtedy, gdy czytnik odczytuje przypisany specjalny znak wejściowy, a następnie wysyła SIGTSTP.
I ewentualnie...
- swtch
- domyślne
^@
(znaczenie \0
lub NUL
)
- Przełącza warstwy powłoki pierwszego planu. Do użytku z aplikacją
shl
warstw powłoki w niektórych systemach.
- Implementacja,
shl
która multipleksuje ptys i dlatego jest kompatybilna z kontrolą zadań, a nie z zachowaniem zależnym od switch oryginalnej implementacji, może być swobodnie dostępna w heirloom-toolchest
pakiecie narzędzi.
Aby uzyskać wyraźniejszy obraz tego, jak i dlaczego (a może dlaczego nie) obsługiwane są te funkcje wprowadzania, zapoznaj się z man 3 termios
.
Wszystkie powyższe funkcje można przypisać (lub ponownie przypisać) - w stosownych przypadkach - podobnie stty
function assigned-key
. Aby wyłączyć dowolną pojedynczą funkcję, wykonaj . Alternatywnie, ponieważ różne próby przypisania dowolnej z wyżej wymienionych funkcji edycji linii ze wszystkimi implementacjami GNU, AST lub dziedzicami wydają się wskazywać, możesz również, ponieważ przypisanie NUL dla dowolnej funkcji wydaje się równoznaczne z ustawieniem jej jako nieprzypisanej w moim systemie Linux system.stty
function
^-
stty
stty
function
^@
Prawdopodobnie widzisz echo tych znaków podczas ich wpisywania (co można prawdopodobnie skonfigurować w / [-] ctlecho ) , ale jest to tylko znacznik pokazujący, gdzie zrobiłeś - program otrzymujący twoje dane wejściowe nie ma pojęcia, że ty wpisałem je (z wyjątkiem eol [2] , to jest) i otrzymuje tylko kopię twojego wkładu, do którego dyscyplina liniowa zastosowała swoje efekty.
Konsekwencją obsługi różnych funkcji edycji linii przez terminal jest to, że musi on w pewnym stopniu buforować dane wejściowe, aby działać zgodnie z funkcjami, które mu wskażesz - i dlatego nie może istnieć nieograniczona ilość danych wejściowych, które możesz w dowolnym momencie zabić . Linia bufor jest dokładniej kill bufor.
Jeśli ustawisz znaki eol lub eol2 na jakiś separator występujący na wejściu - nawet jeśli na przykład nie jest on znakiem nowej linii ani znakiem powrotu - będziesz w stanie zabić tylko do momentu, w którym ostatnio wystąpił i bufor zabijania będzie rozciągać się tak daleko, jak to możliwe, dopóki następna z nich - lub nowa linia (lub powróci, jeśli icrnl jest ustawione, a igncr nie jest ustawione ) - pojawi się na wejściu.