Vous pouvez déterminer la séquence de caractères émise par une touche en appuyant sur Ctrl- vsur la ligne de commande, puis en appuyant sur la touche qui vous intéresse. Sur mon système pour F12, je reçois ^[[24~
. Le ^[
représente Esc. Différents types de terminaux ou d'émulateurs de terminaux peuvent émettre des codes différents pour la même clé.
À une invite Bash, vous pouvez entrer une commande comme celle-ci pour activer la macro clé afin que vous puissiez l'essayer.
bind '"\e[24~":"foobar"'
Maintenant, lorsque vous appuyez sur F12, vous obtenez "foobar" sur la ligne de commande prêt pour une édition ultérieure. Si vous souhaitez qu'une touche pour saisir une commande immédiatement, vous pouvez ajouter une nouvelle ligne:
bind '"\e[24~":"pwd\n"'
Maintenant, lorsque vous appuyez sur F12, vous obtenez le répertoire actuel affiché sans avoir à appuyer sur Enter. Que faire si vous avez déjà tapé quelque chose sur la ligne et que vous utilisez ce qui s'exécute automatiquement? Cela pourrait devenir compliqué. Cependant, vous pouvez effacer la ligne dans le cadre de votre macro:
bind '"\e[24~":"\C-k \C-upwd\n"'
L'espace permet de s'assurer que le Ctrl- ua quelque chose à supprimer pour empêcher la cloche de sonner.
Une fois que vous avez fait fonctionner la macro comme vous le souhaitez, vous pouvez la rendre persistante en l'ajoutant à votre ~/.inputrc
fichier. Il n'y a pas besoin de la bind
commande ou de l'ensemble extérieur de guillemets simples:
"\e[24~":"\C-k \C-upwd\n"
Éditer:
Vous pouvez également créer une liaison de clé qui exécutera quelque chose sans perturber la ligne de commande actuelle.
bind -x '"\eW":"who"'
Ensuite, pendant que vous tapez une commande qui nécessite un nom d'utilisateur, par exemple, et que vous avez besoin de connaître les noms des utilisateurs qui sont connectés, vous pouvez appuyer sur Alt- Shift- Wet la sortie de who
sera affichée et l'invite sera réémise avec votre commande partielle intacte et le curseur à la même position dans la ligne.
Malheureusement, cela ne fonctionne pas correctement pour les clés telles que celles F12qui produisent plus de deux caractères. Dans certains cas, cela peut être contourné.
La commande ( who
dans ce cas) peut être n'importe quel exécutable - un programme, un script ou une fonction.
bind '"\C-q": menu-complete'
par exemple (ou dans votre~/.inputrc
:"\C-q": menu-complete
). Vous pouvez aussi avoir besoinstty -ixon
dans votre~/.bashrc
pour désactiver le contrôle de flux et faire ^ S et ^ Q disponibles.^[
représenteesc
et ensuite vous semblez le remplacer\e
dans votre exemple. Pouvez-vous expliquer pourquoi s'il vous plaît?^[
est la représentation de sortie. C'est\e
une façon de le saisir (^[
ne fonctionne pas pour cela).Vous pouvez définir les raccourcis clavier bash dans
~/.inputrc
(fichier de configuration pour la bibliothèque GNU Readline). La syntaxe est<nom de clé ou nom de clé>: macro
par exemple:
va créer une macro qui insère "> sortie" lorsque vous appuyez sur ControlO
va créer une macro qui insère "echo foobar" lorsque vous appuyez sur F1... Je ne sais pas à quoi F11sert le keysym .
Éditer:
.inputrc
comprend la\n
séquence d'échappement pour le saut de ligne, vous pouvez donc utiliserCe qui va effectivement «appuyer sur Entrée» après l'émission de la commande.
la source
Alt
, utilisez\e
, par exemple"\eo": "> output"
..inputrc
consultez hackaday.com/2018/01/19/linux-fu-custom-bash-command-completionCette solution est spécifique aux environnements X11 et n'a rien à voir avec bash, mais en ajoutant ce qui suit à vos .Xmodmaps
enverra la chaîne "foobar" au terminal en appuyant sur F12.
la source
Je voulais me lier
Ctrl+B
à une commande. Inspiré par une réponse ci-dessus, j'ai essayé d'utiliserbind
mais je n'ai pas pu comprendre à quelle série de gribouillis cryptiques (\e[24~
?) Se traduisaientCtrl+B
.Sur un Mac, allez dans Paramètres de l'application Terminal, Profils -> Clavier ->
+
puis appuyez sur le raccourci clavier que vous recherchez et il sort. Pour moi , aCtrl+B
donné lieu à\002
laquelle je lié avec succès à la commandebind '"\002":"echo command"'
De plus, si vous souhaitez que la commande soit exécutée immédiatement (pas simplement insérée dans l'invite), vous pouvez ajouter la touche Entrée à la fin de votre commande, comme ceci:
bind '"\002":"echo command\015"'
la source