Comment développer des alias en ligne dans Bash?


84

Existe-t-il un moyen de développer des alias en ligne dans bash?

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

Réponses:


107

Vous pouvez appuyer sur Ctrl- Alt- epour exécuter la fonction readline shell-expand-linequi effectuera des extensions d’alias, d’historique et de mots. Notez que sur certains claviers Metan'est pas Alt. Vous devrez peut-être appuyer Escalors Ctrl-e

Les fonctions alias-expand-lineet history-and-alias-expand-linene sont pas liées par défaut, mais vous pouvez les lier en ajoutant des lignes similaires à celles-ci dans votre ~/.inputrcfichier.

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

ce qui ferait Ctrl- Alt- l(minuscule "ell") effectuer uniquement le développement de pseudonyme.


Pouvons-nous mapper le développement d'alias sur <tab> sans affecter les autres complétions de bash?.
asdfg

2
@asdfg: Si vous le faites, cela complètera les autres finitions. Cela pourrait fonctionner (non testé) pour créer la carte comme indiqué ci-dessus, puis ajouter cette carte supplémentaire pour remplacer la carte existante pour Tab: "\C-i": "\e\C-l\e\e"qui crée une macro qui exécute à la fois alias-expand-lineet 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 faire l'achèvement par défaut.
Dennis Williamson

4
En effet, ESC C-etravaille pour Bash, mais C-x atravaille pour Zsh. Également testé sur OS X.
Blaz

Si vous recherchez simplement Ctrl + quelque chose, où quelque chose peut être la clé, vous pouvez le faire comme « x » cela dans certains systèmes: Control-x: history-and-alias-expand-line.
igordcard

1
@ WeijunZhou: Cela dépend de votre gestionnaire de fenêtres et des paramètres personnalisés que vous avez. Pour Gnome, par exemple, l'écran de verrouillage est Super + L.
Dennis Williamson

2

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

shopt -s direxpand
shopt -s expand_aliases

shoptLa manpage de: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
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ésactivez, 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, avec un alias, alias ll='ls -lle shell interpréterait "ll" comme une commande / fonction "ll" qui n'existe probablement pas.
FooF

0

Cela ne fonctionne pas. Mais je suppose / espère que quelque chose comme ceci peut être fait pour faire ce que vous voulez faire. Vous devrez utiliser votre propre script d'achèvement. Voici comment vous en faites 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, recherchez le fichier complet bash_completion ( http://caliban.org/bash ) et placez le script mentionné ci-dessus dans un fichier du répertoire bash_completion.d que le script que vous obtenez à partir des références d’URL. Faites-moi savoir si cela ne fonctionne pas.

Merci.


0

Pour les personnes ayant installé zsh à la recherche d'une solution simple, globalias est peut-être votre ami.

Développe toutes les expressions globales, sous-commandes et alias (y compris global).

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

installer simplement ajouter "globalias" à votre liste de plugins .zshrc

plugins=(... globalias)

Ensuite, appuyez simplement sur SPACEpour déclencher le développement d'une commande que vous avez écrite.

Si vous souhaitez uniquement insérer un espace sans développer la ligne de commande, appuyez sur CTRL+SPACE

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.