Etes-vous littéralement en train de "terminer un fichier" en entrant cette séquence d'échappement, c'est-à-dire si la session interactive du shell est vue comme un véritable flux de fichiers par le shell, comme tout autre flux de fichiers? Si oui, quel fichier?
Ou bien, le signal Ctrl+ est-il Dsimplement un espace réservé signifiant "l'utilisateur a fini de fournir des entrées et vous pouvez mettre fin à l'opération"?
set -o ignoreeof
pour changer ce comportement.Réponses:
Le
^D
caractère (également appelé\04
ou 0x4, FIN DE TRANSMISSION en Unicode) est la valeur par défaut dueof
paramètre caractère de contrôle spécial du terminal ou du pilote de pseudo-terminal dans le noyau (plus précisément de latty
discipline de ligne attachée au port série ou pseudo). appareil tty ). C'estc_cc[VEOF]
latermios
structure transmise au TCSETS / TCGETS que l'ioctl
on envoie au terminal pour influer sur le comportement du conducteur.La commande typique qui envoie ceux-ci
ioctls
est lastty
commande.Pour récupérer tous les paramètres:
Ce
eof
paramètre n'est pertinent que lorsque le terminal est enicanon
mode.Dans ce mode, le pilote de terminal (pas l'émulateur de terminal) implémente un éditeur de ligne très simple , dans lequel vous pouvez taper Backspacepour effacer un caractère, Ctrl-Upour effacer toute la ligne ... Lorsqu'une application lit à partir du terminal, elle ne voit rien jusqu'à ce que vous appuyez sur Returnà quel point les
read()
rendements de la ligne complète , y compris le dernierLF
caractère (par défaut, le pilote de terminal se traduit également par l'CR
envoyé par votre terminal lors ReturndeLF
).Maintenant, si vous voulez envoyer ce que vous avez tapé jusqu'à présent sans appuyer Enter, vous pouvez entrer le
eof
caractère. À la réception de ce caractère de l'émulateur de terminal, le pilote de terminal soumet le contenu actuel de la ligne afin que l'application qui leread
reçoit le reçoive tel quel (et n'inclura pas deLF
caractère de fin ).Maintenant, si la ligne en cours était vide et que l'application lise intégralement les lignes entrées précédemment, le
read
caractère 0 sera renvoyé.Cela signifie la fin du fichier dans l'application (lorsque vous lisez un fichier, vous lisez jusqu'à ce qu'il ne reste plus rien à lire). C'est pourquoi il est appelé le
eof
caractère, car son envoi fait en sorte que l'application constate qu'aucune autre entrée n'est disponible.Maintenant, les shells modernes, à leur invite, ne mettent pas le terminal en
icanon
mode, car ils implémentent leur propre éditeur de ligne, qui est beaucoup plus avancé que le pilote de terminal intégré. Cependant, dans leur propre éditeur de lignes , pour éviter de dérouter les utilisateurs, ils donnent au^D
caractère (ou quel que soit leeof
réglage du terminal avec certains) la même signification (signifiereof
).la source
CTRL_D est juste un signal disant qu'il s'agit de la fin d'un flux de texte. Vous ne terminez pas un fichier avec celui-ci, vous terminez votre flux d'entrée en le tapant. De plus, CTRL_D ne représente aucun caractère ou octet comme vous pouvez le savoir avec l'outil hexdump:
la source