Si tu fais:
stty eol =
Et puis exécutez la démo suggérée dans votre EDIT , vous verrez foo bar dans l'impression de test.out . La discipline de ligne du terminal videra sa sortie vers son lecteur pendant qu'il lit chaque caractère EOL spécial dans votre entrée.
Un terminal en mode canonique Linux - tel qu'il peut être configuré avec stty icanon
ou probablement juste stty sane
- gère les caractères d'entrée spéciaux suivants ...
- eof
- défaut:
^D
- Termine une ligne d'entrée et vide la sortie vers le lecteur. Parce qu'il est supprimé de l'entrée, s'il est entré en tant que seul caractère sur une ligne, il est transmis en tant que lecture nulle - ou fin de fichier - au lecteur.
- eol
- par défaut: non attribué
- Termine également une ligne d'entrée, mais n'est pas supprimé de l'entrée.
- tuer
- défaut:
^U
- Efface toutes les entrées en mémoire tampon.
- effacer
- par défaut:
^H
(ou éventuellement @
ou ^?
sur certains systèmes)
- Efface le dernier caractère d'entrée mis en mémoire tampon.
Lorsque iexten est également défini - comme stty icanon iexten
ou, encore une fois, probablement juste stty sane
, un terminal Linux canonique gérera également ...
- eol2
- par défaut: non affecté
- En outre également se termine une ligne d'entrée, et est également pas retiré de l' entrée.
- effacer
- défaut:
^W
- Efface le dernier mot d' entrée mis en mémoire tampon .
- rprnt
- défaut:
^R
- Réimprime toutes les entrées mises en mémoire tampon.
- lnext
- défaut:
^V
- Supprime toute signification particulière en ce qui concerne la discipline de ligne pour le caractère d'entrée immédiatement suivant.
Ces caractères sont gérés en les supprimant du flux d'entrée - à l'exception de eol et eol2 , c'est-à-dire - et en exécutant la fonction spéciale associée avant de transmettre le flux traité au lecteur - qui est généralement votre shell, mais pourrait être le groupe de processus de premier plan quel qu'il soit. .
D'autres caractères d'entrée spéciaux qui sont traités de la même manière mais qui peuvent être configurés indépendamment de tout paramètre icanon incluent le jeu isig - défini comme stty isig
et probablement également inclus dans une configuration saine :
- quitter
- défaut:
^\
- Vide toutes les entrées tamponnées (si noflsh n'est pas défini) et envoie SIGQUIT au groupe de processus de premier plan - générant probablement un vidage de mémoire .
- susp
- défaut:
^Z
- Vide toutes les entrées en mémoire tampon (si noflsh n'est pas défini) et envoie SIGTSTP au groupe de processus de premier plan. Le groupe de processus suspendu peut probablement être repris avec
kill -CONT "$!"
ou simplement fg
dans un shell contrôlé par le travail ( set -m
) .
- intr
- défaut:
^C
- Vide toutes les entrées tamponnées (si noflsh n'est pas défini) et envoie SIGINT au groupe de processus de premier plan.
Et l' ensemble ixon - configuré comme stty ixon
et également généralement inclus dans une configuration saine :
- Arrêtez
- défaut:
^S
- Arrête toutes les sorties vers le lecteur jusqu'à ce que le début soit lu en entrée ou - lorsque ixany est également défini - au moins un caractère supplémentaire soit lu.
- début
- défaut:
^Q
- Redémarre la sortie si elle a déjà été arrêtée avec stop .
- Les deux arrêt et commencer sont retirés de l' entrée lors d'un traitement, mais si la sortie est redémarré en raison d'un caractère en entrée lorsque ixany est réglé alors que le caractère est pas supprimé.
Les caractères spéciaux gérés sur d'autres systèmes non Linux peuvent inclure ...
- affleurer
- défaut:
^O
- Bascule la suppression et le vidage de l'entrée en mémoire tampon et est supprimé de l'entrée.
- dsusp
- par défaut: non affecté
- Vide toutes les entrées mises en mémoire tampon uniquement lorsque le lecteur lit le caractère d'entrée spécial affecté puis envoie SIGTSTP.
Et peut-être ...
- swtch
- par défaut
^@
(sens \0
ou NUL
)
- Bascule les calques de premier plan. À utiliser avec l' application
shl
shell-couches sur certains systèmes.
- Une implémentation
shl
dont multiplexe ptys et est donc compatible avec le contrôle des tâches plutôt que le comportement dépendant de swtch de l'implémentation d' origine peut être librement disponible dans la heirloom-toolchest
suite d'outils.
Pour une image plus claire de comment et pourquoi (et peut-être pourquoi pas) ces fonctions d'entrée sont gérées, consultez man 3 termios
.
Toutes les fonctions ci-dessus peuvent être attribuées (ou réaffectées) - le cas échéant - comme stty
function assigned-key
. Pour désactiver une fonction unique, faites . Alternativement, comme diverses tentatives avec des affectations pour l'une des fonctions d'édition de ligne susmentionnées avec toutes les implémentations de GNU, AST ou de l'héritage semblent l'indiquer, vous pouvez également, comme l' affectation NUL pour n'importe quelle fonction semble équivaloir à la définir comme non affectée sur mon linux système.stty
function
^-
stty
stty
function
^@
Vous voyez probablement un écho de ces caractères lorsque vous les tapez (comme cela peut probablement être configuré avec [-] ctlecho ) , mais ce n'est qu'un marqueur pour vous montrer où vous en êtes - le programme recevant votre entrée n'a aucune idée que vous les a tapés (sauf eol [2] , c'est-à-dire) et ne reçoit qu'une copie de votre saisie à laquelle la discipline de ligne a appliqué leurs effets.
Une conséquence de la gestion par le terminal des diverses fonctions d'édition de ligne est qu'il doit dans une certaine mesure mettre en mémoire tampon l'entrée afin d'agir sur les fonctions que vous lui indiquez qu'il devrait - et donc il ne peut pas y avoir une fourniture illimitée d'entrée qui vous pourriez à tout moment tuer . Le tampon de ligne est plus précisément le tampon de mise à mort .
Si vous définissez les caractères eol ou eol2 sur un délimiteur qui se produit en entrée - même si ni un saut de ligne ni un caractère de retour, par exemple - alors vous ne pourrez tuer que jusqu'au dernier point et votre tampon de mise à mort s'étendra aussi loin que possible jusqu'à ce que la prochaine - ou une nouvelle ligne (ou retourne si icrnl est défini et igncr ne l'est pas) - se produit en entrée.