Beenden Sie eine Datei buchstäblich durch Eingabe dieser Escape-Sequenz, dh wird die interaktive Shell-Sitzung von der Shell wie jeder andere Dateistream als echter Dateistream angesehen? Wenn ja, welche Datei?
Oder ist das Ctrl+ DSignal nur ein Platzhalter, der bedeutet, "der Benutzer hat die Eingabe beendet und Sie können die Eingabe beenden"?
shell
escape-characters
Geeb
quelle
quelle
set -o ignoreeof
dieses Verhalten ändern.Antworten:
Das
^D
Zeichen (auch bekannt als\04
oder 0x4, END OF TRANSMISSION in Unicode) ist der Standardwert für deneof
speziellen Steuerzeichenparameter des Terminal- oder Pseudoterminaltreibers im Kernel (genauer gesagt der Zeilendisziplin,tty
die mit dem seriellen oder Pseudoterminal verbunden ist). tty Gerät ). Das ist diec_cc[VEOF]
von dertermios
Struktur an die TCSETS bestanden / TCGETSioctl
ein Fragen im Zusammenhang mit dem Endgerät des Fahrerverhalten zu beeinflussen.Der typische Befehl, der diese sendet,
ioctls
ist derstty
Befehl.So rufen Sie alle Parameter ab:
Dieser
eof
Parameter ist nur relevant, wenn sich das Endgerät imicanon
Modus befindet.In diesem Modus implementiert der Terminal-Treiber (nicht der Terminal-Emulator) einen sehr einfachen Zeileneditor , in den Sie Backspaceeingeben können , um ein Zeichen Ctrl-Uzu löschen, um die gesamte Zeile zu löschen ... Wenn eine Anwendung vom Terminal-Gerät liest, sieht sie nichts bis Sie drücken, Returnan welcher Stelle die
read()
vollständige Zeile einschließlich des letztenLF
Zeichens zurückgegeben wird (standardmäßig übersetzt der Terminal-Treiber auch dieCR
von Ihrem Terminal Returnan gesendeten ZeichenLF
).Wenn Sie nun das, was Sie bisher eingegeben haben, senden möchten, ohne die Taste zu drücken Enter, können Sie hier das
eof
Zeichen eingeben . Auf dieses Zeichen aus dem Terminal - Emulator empfängt, die Terminal - Treiber tragen den aktuellen Inhalt der Linie, so dass die Anwendung tut dasread
auf sie wird es erhalten, ist (und es wird keine abschließenden enthältLF
Zeichen).Wenn nun die aktuelle Zeile leer war und die Anwendung die zuvor eingegebenen Zeilen vollständig gelesen hat,
read
wird das Zeichen 0 zurückgegeben.Dies bedeutet das Ende der Datei für die Anwendung (wenn Sie aus einer Datei lesen, lesen Sie, bis nichts mehr zu lesen ist). Aus diesem Grund wird es als
eof
Zeichen bezeichnet, da die Anwendung beim Senden feststellt, dass keine weiteren Eingaben verfügbar sind.Moderne Shells versetzen das Terminal nun nicht mehr in den
icanon
Modus, da sie einen eigenen Zeileneditor implementieren, der weitaus fortschrittlicher ist als der in den Terminaltreiber integrierte. In ihrem eigenen jedoch Zeileneditor , die Benutzer nicht zu verwirren, geben sie die^D
Zeichen (oder was auch immer die Terminal -eof
Einstellung mit einigen ist) die gleiche Bedeutung (bedeuteneof
).quelle
STRG_D ist nur ein Signal, das besagt, dass dies das Ende eines Textstroms ist. Sie beenden eine Datei damit nicht, Sie beenden Ihren Eingabestream, indem Sie ihn eingeben. Auch CTRL_D steht nicht für ein Zeichen oder Byte, wie Sie mit dem Tool hexdump herausfinden können:
quelle