2010-04-12 7 views
13

Je finissent par taperComment écrire un alias pour grep -R?

grep -Rni pattern . 

et énormément. Comment puis-je faire cela en un alias comme

alias gr='grep -Rni [email protected] .' 

course qui donne:

$ gr pattern 
grep: pattern: No such file or directory 

Même si l'alias semble bien:

$ type gr 
gr is aliased to `grep -R [email protected] .' 

Il semble que le @ et $ la. être échangé quand il est effectivement exécuté.

+2

Ce n'est pas que '$ @' et '.' sont changés - c'est que '$ @' n'est pas substitué (ce qui le rend vide '') et 'pattern' est ajouté à la fin de la ligne. Votre commande devient 'grep -Rni'. modèle'. –

Répondre

6

créer une fonction à la place de l'alias. Enregistrer dans un fichier par exemple mylibrary.sh et chaque fois que vous souhaitez utiliser la fonction, la source du fichier

par exemple mylibrary.sh

myfunction(){ 
grep -Rni ... 
} 

#!/bin/bash 
source mylibrary.sh 
myfunction 
+0

doux! une idée de pourquoi il doit être une fonction au lieu d'un alias? – numerodix

+1

à l'intérieur d'une fonction, vous pouvez faire beaucoup d'autres choses. par exemple, le contrôle du flux. vous pouvez également passer des arguments à une fonction. Ce n'est pas si facile avec des alias. En principe, utilisez un alias si vos commandes sont courtes et simples, sinon utilisez des fonctions. – ghostdog74

22

Essayez ceci:

$ alias gr='grep -Rnif /dev/stdin . <<<' 
$ gr pattern 
./path/file:42: here is the pattern you were looking for 

Cela fonctionne aussi:

$ alias gr='grep -Rnif - . <<<' 
+1

+1 pour ici string fu. –

+0

Wow! C'est cool. – sixtyfootersdude

+0

Est-ce que tout ou partie de '-. <<< 'correspond au drapeau' -f'? –

Questions connexes