5 votes

Comment définir la commande de lecture à exécuter sans avoir à appuyer sur le bouton Enter dans le shell ?

J'utilise le code ci-dessous pour affecter un caractère donné par l'utilisateur à la variable G :

read G

Cependant, pour avancer dans l'exécution de mon script, je dois appuyer sur la touche Entrée. Est-il possible de configurer la commande de lecture de telle sorte qu'elle affiche le processus d'avancement à la ligne suivante immédiatement après avoir reçu la lettre de stdin ?

5voto

Mark Byers Points 318575

Si vous utilisez Bash :

read -n1 G

Votre système est configuré pour utiliser dash par défaut et dash ne supporte pas cette fonctionnalité, vous devez donc également modifier la première ligne de votre script pour spécifier que vous souhaitez utiliser bash :

#!/bin/bash

3voto

Dennis Williamson Points 105818

Je pensais dd pourrait être capable de le faire, alors j'ai essayé et je n'ai rien obtenu. Cependant, Google a trouvé este pour moi et je l'ai adapté ici :

readOne () {
    local oldstty
    oldstty=$(stty -g)
    stty -icanon -echo min 1 time 0
    dd bs=1 count=1 2>/dev/null
    stty "$oldstty"
}

Définissez cette fonction une fois au début de votre script, puis vous pouvez l'utiliser comme ceci :

char=$(readOne)    # get the character
echo $char         # print the character (or you can do something else with it)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X