2010-09-23 3 views
11

J'ai un tas de scripts dans le répertoire qui existe sur le chemin, donc Je peux accéder à chaque endroit où je suis. Parfois, ce sont des scripts util très simples qui "vims" le fichier. De temps en temps je voudrais voir rapidement le contenu du fichier de script et voir le chemin vers le fichier que le script ouvre (puis faire cat, grep ...).bash alias avec argument et auto complétion

Je voudrais faire un alias qui va "chat" script donné où que je sois.
Compte tenu de l'un ne fonctionne pas:
alias a="cat `which \$1`"
Si je place le nom du script au lieu du numéro de paramètre (1 $), il fonctionne très bien. Mais avec le paramètre pas.

La deuxième question (je souhaite que la vie soit si belle!) Obtiendrait auto-complétion du nom de script pour cet alias.
Utiliser un script qui pourrait exister dans mon répertoire "bin" serait une autre approche que je peux prendre.

Répondre

6

Si votre fonction est appelée "foo" alors votre completi sur la fonction pourrait ressembler à ceci:

Si vous avez le paquet d'achèvement Bash installé:

_foo() { local cur; cur=$(_get_cword); COMPREPLY=($(compgen -c -- $cur)); return 0; } 

Si vous n'êtes pas:

_foo() { local cur; cur=${COMP_WORDS[$COMP_CWORD]}; COMPREPLY=($(compgen -c -- $cur)); return 0; } 

ensuite pour l'activer:

complete -F _foo foo 

La commande compgen -c entraîne l'achèvement de toutes les commandes de votre système.

Votre fonction « foo » pourrait ressembler à ceci:

foo() { cat $(type -P "[email protected]"; } 

qui serait cat un ou plusieurs fichiers dont les noms sont passés comme arguments.

+0

:-) Merci beaucoup pour le poste. Je n'ai pas accepté la réponse avant d'espérer trouver un moment pour le tester. Ce que je cherche avant. – Gadolin

6

Pour l'alias avec l'argument, utilisez function au lieu d'alias:

a() { cat `which $1` ;} 

Ou si vous le faites sur plus d'une ligne, passez e-virgule:

a() { 
    cat `which $1` 
} 

Vous pouvez entrer interactive à l'invite du shell:

shell:>a() { 
>cat `which $1` 
>} 
shell:> 
+0

+1 J'ai une telle solution. Soyez mon héros et parlez-moi de l'auto-complétion pour cette fonction. Donc, je n'ai pas besoin d'entrer la commande chaque fois à la main. Maintenant j'ai la complétion automatique quand j'appelle les commandes qui sont dans le chemin. – Gadolin

Questions connexes