Je suis implémentant un script Bash interactif similaire au client MySQL, L'extrait listé ici ( Exemple 15-6, détecter les touches fléchées ) ne fait pas exactement ce que je veux. Je veux vraiment ce qui suit: p> Les touches fléchées haut / bas doivent fonctionner en mode silencieux. Signification, ils ne doivent pas faire écho à leurs codes de caractères sur le terminal. p> li>
Les autres touches Toutefois (qui seront utilisées pour lire les noms de commande et leurs arguments) Le problème avec Quelqu'un a-t-il tenté cette chose à bash? (Remarque: je ne peux pas utiliser c, ni d'autres langages de script comme Perl, Python, etc.) P> Modifier strong> P> Continuer avec Dennis 'Réponse ... Vous allez em> besoin de em> manuellement em> ajoutez vos entrées souhaitées à votre historique via / USR / Bin / mysql code>. Dans ce script, je dois émettre divers types de "commandes". J'ai également besoin de fournir un mécanisme d'historique dans lequel l'utilisateur peut utiliser les touches fléchées haut / bas pour faire défiler les commandes entrées jusqu'à présent.
lecture -s -n3 code> est qu'il ne satisfait pas mes exigences simultanément contradictoires du mode silencieux
-n3 code> fonctionnera pour les touches fléchées, mais, pour les autres clés régulières, il ne "retournera pas le contrôle" au programme d'appel jusqu'à 3 caractères. P> Maintenant, je pourrais essayer
-n1 code> et assembler manuellement l'entrée, un caractère à la fois (yuck!). Mais le problème de commutation silencieux silencieux-/-écho basé sur le code de caractères persisterait toujours! P>
historique -s code>, comme ... p>
while read -e x; do
history -s "$x"
# ...
done
3 Réponses :
mySQL et bash utilise le Lisezline bibliothèque pour la mettre en œuvre. Peut-être pourriez-vous utiliser quelque chose comme rlwrap ou rlfe ? p>
Merci, christoffer, pour mentionner Aoubt RLWrap et RLFE. Étant donné que ce sont des forfaits externes que je / mes utilisateurs devront installer, j'irai avec Readline pour la suggestion de Dennis. +1
Ouais, cela semble être une meilleure solution! :) Merci!
Vous pouvez utiliser read -e code> pour avoir
lire code> Utiliser
readline code>. Il traitera vos clés de curseur et maintiendra l'histoire pour vous. Vous aurez également besoin d'ajouter manuellement vos entrées souhaitées à votre historique via
historique -s code>, comme:
RLWRAP a un mode spécial "one-shot" pour servir de remplacement de la commande shell "lecture". Si vous le souhaitez, chaque occurrence de cette commande dans votre script peut recevoir sa propre liste d'historique et d'achèvement des mots.
Utilisez-le comme ceci: p>
REPLY=$(rlwrap -H my_history -f my_completions -o cat)
Merci, Hans, pour mentionner à propos de RLWrap. Comme il s'agit d'un forfait externe que je / mes utilisateurs devra installer, j'irai avec Readline pour la suggestion de Dennis par Dennis. +1 Pour votre réponse et vos extraits d'échantillons, je les utiliserai dans un autre endroit une autre fois.