Question Comment développer des alias en ligne dans bash?


Existe-t-il un moyen d'étendre les alias en ligne dans bash?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

73
2018-02-19 09:43


origine




Réponses:


Vous pouvez appuyer sur Ctrl-Alt-e effectuer la fonction readline shell-expand-line qui fera alias, histoire et expansions de mots. Notez que sur certains claviers Meta n'est pas Alt. Vous devrez peut-être appuyer sur Esc puis Ctrl-e

Les fonctions alias-expand-line et history-and-alias-expand-line ne sont pas liés par défaut, mais vous pouvez les lier en ajoutant des lignes similaires à la suivante à votre ~/.inputrc fichier.

"\e\C-l": alias-expand-line

ce qui ferait Ctrl-Alt-l (minuscule "ell") effectuer seulement extension alias.


91
2018-02-19 10:52



Peut-on mapper l'expansion des alias sur <tab> sans affecter les autres complétions de bash? - asdfg
@asdfg: Si vous le faites, cela va casser d'autres accomplissements. Il pourrait travailler (non testé) pour créer la carte comme indiqué ci-dessus, puis ajouter cette carte supplémentaire pour remplacer celle existante pour Tab: "\C-i": "\e\C-l\e\e" qui crée une macro qui effectue à la fois alias-expand-line et complete. Cela dépend de la liaison de ma réponse ci-dessus et que la liaison par défaut pour Esc-Esc reste en place. Vous pourrez toujours faire Esc-Esc si vous voulez effectuer l'achèvement par défaut. - Dennis Williamson
ESC et CTRL + E fonctionnent sur OS X, merci! - Chris Wagner
Effectivement, ESC C-e travaille pour Bash, mais C-x a fonctionne pour Zsh. Également testé sur OS X. - Blaz
Si vous cherchez simplement quelque chose de Ctrl +, où quelque chose peut être la clé "x", vous pouvez le faire comme ceci dans certains systèmes: Control-x: history-and-alias-expand-line. - igordcard


Cela pourrait être un moyen beaucoup plus simple de faire ce que vous essayez de faire (bashversion> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shopt's man page: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
2018-06-14 13:35



C'est faux. Les options de shell "direxpand" et "expand_aliases" ne permettent pas de développer les alias en ligne comme le spécifie la question. Je ne sais pas de quel chapeau "direxpand" a été pris ...? Par défaut, "expand_aliases" est déjà défini. Si vous le désélectionnez, le résultat est de désactiver le fonctionnement des alias (ils ne sont pas développés avant l'interprétation de la ligne de commande). Par exemple. donné un alias alias ll='ls -l le shell interpréterait 'll' comme commande / fonction 'll' qui n'existe probablement pas. - FooF


Cela ne fonctionne pas. Mais je suppose que quelque chose comme ça peut être fait pour faire ce que vous voulez faire. Vous devrez utiliser votre propre script d’achèvement. Voici comment tu en fais un:

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

Maintenant, fournissez le fichier bash_completion complet (http://caliban.org/bash) et placez le script ci-dessus dans un fichier dans le répertoire bash_completion.d que le script obtenu à partir des références url. Faites-moi savoir si cela ne fonctionne pas.

Merci.


0
2018-02-19 10:09