2010-04-12 19 views
13

termino escribiendo¿Cómo escribo un alias para grep -R?

grep -Rni pattern . 

y muchísimo. ¿Cómo puedo hacer esto en un alias como

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

de reproducción que da:

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

A pesar de que el alias se ve bien:

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

parece que los $ @ y. ser intercambiado cuando en realidad se ejecuta.

+2

No es ese '$ @' y '.' se están intercambiando - es que '$ @' no se sustituye (por lo que está vacío '') y 'patrón' se agrega al final de la línea. Tu comando se está convirtiendo en 'grep -Rni. patrón'. –

Respuesta

6

hacer una función en lugar de alias. Guardarlo en un archivo por ejemplo mylibrary.sh y cada vez que desee utilizar la función, origen del archivo de

por ejemplo mylibrary.sh

myfunction(){ 
grep -Rni ... 
} 

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

dulce! ¿Alguna idea de por qué tiene que ser una función en lugar de un alias? – numerodix

+1

dentro de una función, puede hacer muchas otras cosas. por ejemplo, control de flujo. también puede pasar argumentos a una función. No es tan fácil con alias. En principio, use alias si sus comandos son cortos y simples, de lo contrario, use funciones. – ghostdog74

22

Prueba esto:

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

Esto también funciona:

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

+1 para aquí string fu. –

+0

¡Guau! Esta genial. – sixtyfootersdude

+0

Hace algunos o todos '-. <<< 'coincidir con la bandera' -f'? –

Cuestiones relacionadas