Comme mentionné par William Pursell , less
lit les frappes de l'utilisateur depuis le terminal. Il ouvre explicitement /dev/tty
le terminal de contrôle; cela lui donne un descripteur de fichier, distinct de l'entrée standard, à partir duquel il peut lire l'entrée interactive de l'utilisateur. Il peut simultanément lire des données à afficher à partir de son entrée standard si nécessaire. (Il pourrait aussi écrire directement sur le terminal si nécessaire.)
Vous pouvez voir cela arriver en exécutant
some_command | strace -o less.trace -e open,read,write less
Déplacez-vous dans l'entrée, quittez less
-le et examinez le contenu de less.trace
: vous verrez qu'il s'ouvre /dev/tty
et lit le descripteur de fichier 0 et celui qui a été renvoyé lors de son ouverture /dev/tty
(probablement 3).
C'est une pratique courante pour les programmes qui souhaitent s'assurer qu'ils lisent et écrivent sur le terminal. SSH en est un exemple, par exemple lorsqu'il demande un mot de passe ou une phrase secrète.
Comme expliqué par schily , si /dev/tty
impossible, less
nous lirons son erreur standard (descripteur de fichier 2). less
L'utilisation de de a /dev/tty
été introduite dans la version 177, publiée le 2 avril 1991.
Si vous essayez de courir cat /dev/tty | less
, comme suggéré par Hagen von Eitzen , vous less
réussirez à ouvrir /dev/tty
mais n’obtiendrez aucune information de sa part avant la cat
fermeture. Donc, vous verrez l'écran vide et rien d'autre jusqu'à ce que vous appuyiez sur CtrlCpour tuer cat
(ou le tuer d'une autre manière); puis less
montrera tout ce que vous avez tapé pendant que vous étiez en cat
cours d’exécution, et vous permettra de le contrôler.
less
lit les données à afficher à partir de stdin, et lit les commandes du tty. Ce sont des choses différentes.