Wenn Sie tun:
stty eol =
Und führen Sie dann die in Ihrem EDIT vorgeschlagene Demo aus. Sie sehen die foo-Leiste im Ausdruck von test.out . Die Zeilendisziplin des Terminals spült seine Ausgabe an den Leser, während es jedes spezielle EOL-Zeichen in Ihrer Eingabe liest .
Ein Linux-Terminal im kanonischen Modus - wie es mit stty icanon
oder wahrscheinlich nur mit konfiguriert werden kann stty sane
- verarbeitet die folgenden speziellen Eingabezeichen ...
- eof
- Standard:
^D
- Beendet eine Eingabezeile und spült die Ausgabe zum Lesegerät. Da es aus der Eingabe entfernt wird und als einziges Zeichen in einer Zeile eingegeben wird, wird es als Null- Lese- oder Dateiende an den Reader übergeben.
- eol
- Standard: nicht zugewiesen
- Beendet auch eine Eingabezeile, wird jedoch nicht aus der Eingabe entfernt.
- töten
- Standard:
^U
- Löscht alle gepufferten Eingaben.
- löschen
- Standard:
^H
(oder möglicherweise @
oder ^?
auf einigen Systemen)
- Löscht das zuletzt gepufferte Eingabezeichen.
Wenn iexten auch gesetzt ist - wie stty icanon iexten
oder wahrscheinlich auch nur - stty sane
, wird ein kanonisches Linux-Terminal auch ...
- eol2
- Standard: nicht zugewiesen
- Beendet auch eine Eingabezeile und wird auch nicht aus der Eingabe entfernt.
- werase
- Standard:
^W
- Löscht das letzte gepufferte Eingangswort .
- rprnt
- Standard:
^R
- Druckt alle gepufferten Eingaben erneut.
- Nächste
- Standard:
^V
- Entfernt jegliche besondere Bedeutung in Bezug auf die Zeilendisziplin für das unmittelbar folgende Eingabezeichen.
Diese Zeichen werden behandelt, indem sie aus dem Eingabestream entfernt werden - mit Ausnahme von eol und eol2 - und die zugehörige Spezialfunktion ausgeführt werden, bevor der verarbeitete Stream an den Reader übergeben wird. Dies ist normalerweise Ihre Shell, kann aber auch die Vordergrundprozessgruppe sein .
Andere spezielle Eingabezeichen, die ähnlich gehandhabt werden, aber unabhängig von einer beliebigen Einstellung von icanon konfiguriert werden können , umfassen das isig set - set wie stty isig
und wahrscheinlich auch in einer vernünftigen Konfiguration enthalten:
- Verlassen
- Standard:
^\
- Leert alle gepufferten Eingaben (falls noflsh nicht gesetzt ist) und sendet SIGQUIT an die Vordergrund-Prozessgruppe - was wahrscheinlich einen Core-Dump erzeugt.
- verdächtig
- Standard:
^Z
- Leert alle gepufferten Eingaben (falls noflsh nicht gesetzt ist) und sendet SIGTSTP an die Vordergrund-Prozessgruppe. Die angehaltene Prozessgruppe kann wahrscheinlich mit einer
kill -CONT "$!"
oder nur fg
mit einer ( set -m
) jobgesteuerten Shell fortgesetzt werden .
- intr
- Standard:
^C
- Leert alle gepufferten Eingaben (falls noflsh nicht gesetzt ist) und sendet SIGINT an die Vordergrund-Prozessgruppe.
Und das ixon- Set - konfiguriert wie stty ixon
und normalerweise auch in einer vernünftigen Konfiguration enthalten:
- halt
- Standard:
^S
- Stoppt die gesamte Ausgabe an den Reader, bis entweder Start in Eingabe gelesen wird oder - wenn ixany ebenfalls gesetzt ist - mindestens ein weiteres Zeichen gelesen wird.
- Start
- Standard:
^Q
- Startet die Ausgabe neu, wenn sie zuvor mit stop gestoppt wurde .
- Sowohl stop als auch start werden bei der Verarbeitung aus der Eingabe entfernt. Wenn jedoch die Ausgabe aufgrund eines Zeichens in der Eingabe neu gestartet wird, wenn ixany festgelegt ist, wird dieses Zeichen nicht entfernt.
Sonderzeichen, die auf anderen Nicht-Linux-Systemen behandelt werden, können sein:
- spülen
- Standard:
^O
- Schaltet das Löschen und Löschen von gepufferten Eingaben ein und wird aus der Eingabe entfernt.
- dsusp
- Standard: nicht zugewiesen
- Leert alle gepufferten Eingaben nur, wenn der Leser das zugewiesene spezielle Eingabezeichen liest und dann SIGTSTP sendet.
Und möglicherweise...
- swtch
- Standard
^@
(Bedeutung \0
oder NUL
)
- Schaltet die Vordergrund-Shell-Ebenen um. Zur Verwendung mit der
shl
Shell-Layer- Anwendung auf einigen Systemen.
- Eine Implementierung,
shl
die ptys multiplext und daher mit der Auftragssteuerung kompatibel ist, und nicht das swtch- abhängige Verhalten der ursprünglichen Implementierung, kann in der heirloom-toolchest
Tool-Suite frei gewählt werden.
Für ein klareres Bild, wie und warum (und vielleicht warum nicht) diese Eingabefunktionen gehandhabt werden, konsultieren Sie man 3 termios
.
Alle oben genannten Funktionen können - falls zutreffend - wie zugewiesen (oder neu zugewiesen) werdenstty
function assigned-key
. Um eine einzelne Funktion zu deaktivieren, gehen Sie wie folgt vor . Alternativ können Sie, wie verschiedene Versuche mit Zuweisungen für eine der oben genannten Zeilenbearbeitungsfunktionen mit allen GNU-, AST- oder Erbstück- Implementierungen zu signalisieren scheinen, als NUL- Zuweisung für eine Funktion angeben, dass sie unter meinem Linux nicht zugewiesen ist System.stty
function
^-
stty
stty
function
^@
Wahrscheinlich sehen Sie ein Echo dieser Zeichen, wenn Sie sie eingeben (wie wahrscheinlich mit [-] ctlecho konfiguriert werden kann ) , aber dies ist nur eine Markierung, die Ihnen zeigt, wo Sie es getan haben - das Programm, das Ihre Eingabe empfängt, hat keine Ahnung, dass Sie es tun Sie haben sie getippt (mit Ausnahme von eol [2] ) und erhalten nur eine Kopie Ihrer Eingabe, auf die die Zeilendisziplin ihre Effekte angewendet hat.
Die Handhabung der verschiedenen Zeilenbearbeitungsfunktionen durch das Terminal hat zur Folge, dass es die Eingabe in gewissem Maße puffern muss, um auf die Funktionen zu reagieren, die Sie ihm anzeigen, dass dies der Fall sein sollte - und daher kann es keine unbegrenzte Zufuhr von Eingaben geben, die Sie könnten jederzeit töten . Der Zeilenpuffer ist genauer gesagt der Kill - Puffer.
Wenn legen Sie die EOL oder EOL2 Zeichen bis zu einem gewissen Trennzeichen , die in der Eingabe auftritt - auch wenn weder ein Newline oder ein Return - Zeichen, zum Beispiel - dann werden Sie nur in der Lage sein , zu töten bis zu dem Punkt , dass es zuletzt aufgetreten und Ihren Kill - Puffer wird so weit wie möglich verlängert, bis die nächste Zeile ( oder eine neue Zeile (oder ein Return, wenn icrnl gesetzt ist und igncr nicht)) in der Eingabe auftritt.